From 6bbc0aefb4cc2b57f354330c0ffead71fad13cac Mon Sep 17 00:00:00 2001 From: cjl Date: Wed, 20 Feb 2019 11:46:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=95=86=E5=93=81=E7=B1=BB?= =?UTF-8?q?=E5=88=AB=E5=B1=95=E7=A4=BA=E6=96=B9=E5=BC=8F=E4=B8=BA=E6=A0=91?= =?UTF-8?q?=E5=BD=A2=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- erp_web/pages/materials/materialcategory.html | 507 ++--- .../materials/materialcategory_forselect.html | 45 + sql/jsh_erp.sql | 48 + sql/华夏ERP数据库设计汇总.xlsx | Bin 75370 -> 76315 bytes .../jsh/erp/constants/BusinessConstants.java | 13 + .../jsh/erp/constants/ExceptionConstants.java | 13 + .../MaterialCategoryController.java | 232 ++- .../datasource/entities/MaterialCategory.java | 518 ++++-- .../entities/MaterialCategoryExample.java | 1623 +++++++++++------ .../mappers/MaterialCategoryMapper.java | 200 +- .../mappers/MaterialCategoryMapperEx.java | 35 + .../com/jsh/erp/datasource/vo/TreeNode.java | 96 + .../MaterialCategoryService.java | 78 +- .../mapper_xml/MaterialCategoryMapper.xml | 141 +- .../mapper_xml/MaterialCategoryMapperEx.xml | 67 +- 15 files changed, 2369 insertions(+), 1247 deletions(-) create mode 100644 erp_web/pages/materials/materialcategory_forselect.html create mode 100644 src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapperEx.java create mode 100644 src/main/java/com/jsh/erp/datasource/vo/TreeNode.java diff --git a/erp_web/pages/materials/materialcategory.html b/erp_web/pages/materials/materialcategory.html index 9bd1fe3f..908a0641 100644 --- a/erp_web/pages/materials/materialcategory.html +++ b/erp_web/pages/materials/materialcategory.html @@ -15,65 +15,53 @@ - -
- - - - - - - - - - -
名称: - -  类别: - - - -   - 查询   - 重置 -
-
-
-
+ +
-
+ + + + - + - + + + + + +
上级目录 + + + + +
名称 + data-options="required:true,validType:'length[2,30]'" style="width: 200px;height: 20px"/> +
层次编号 - +
上级序号 - - +
备注 + +
@@ -82,169 +70,18 @@ 取消 +
+
diff --git a/erp_web/pages/materials/materialcategory_forselect.html b/erp_web/pages/materials/materialcategory_forselect.html new file mode 100644 index 00000000..0d82f32b --- /dev/null +++ b/erp_web/pages/materials/materialcategory_forselect.html @@ -0,0 +1,45 @@ + + + + 商品类别选择 + + + + + + + + + + + + + + +
+ +
+ + + + \ No newline at end of file diff --git a/sql/jsh_erp.sql b/sql/jsh_erp.sql index 003c3ceb..e49423cd 100644 --- a/sql/jsh_erp.sql +++ b/sql/jsh_erp.sql @@ -5291,3 +5291,51 @@ end; // DELIMITER ; +-- ---------------------------- +-- 时间:2019年2月18日 +-- version:1.0.3 +-- 此次更新修改产品类型表jsh_materialcategory,添加一些字段 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +-- ---------------------------- +-- 产品类型表添加字段sort,显示顺序 +-- ---------------------------- +alter table jsh_materialcategory add sort varchar(10) DEFAULT null COMMENT '显示顺序'; +-- ---------------------------- +-- 产品类型表添加字段status,状态,0系统默认,1启用,2删除 +-- ---------------------------- +alter table jsh_materialcategory add status varchar(1) DEFAULT '0' COMMENT '状态,0系统默认,1启用,2删除'; +-- ---------------------------- +-- 产品类型表添加字段serial_no,编号 +-- ---------------------------- +alter table jsh_materialcategory add serial_no varchar(100) DEFAULT null COMMENT '编号'; +-- ---------------------------- +-- 产品类型表添加字段remark,备注 +-- ---------------------------- +alter table jsh_materialcategory add remark varchar(1024) DEFAULT null COMMENT '备注'; +-- ---------------------------- +-- 产品类型表添加字段create_time,创建时间 +-- ---------------------------- +alter table jsh_materialcategory add create_time datetime DEFAULT null COMMENT '创建时间'; +-- ---------------------------- +-- 产品类型表添加字段creator,创建人 +-- ---------------------------- +alter table jsh_materialcategory add creator bigint(20) DEFAULT null COMMENT '创建人'; +-- ---------------------------- +-- 产品类型表添加字段update_time,更新时间 +-- ---------------------------- +alter table jsh_materialcategory add update_time datetime DEFAULT null COMMENT '更新时间'; +-- ---------------------------- +-- 产品类型表添加字段updater,更新人 +-- ---------------------------- +alter table jsh_materialcategory add updater bigint(20) DEFAULT null COMMENT '更新人'; + +-- ---------------------------- +-- 去掉jsh_materialcategory外键 +-- ---------------------------- +ALTER TABLE jsh_materialcategory DROP FOREIGN KEY FK3EE7F725237A77D8; + +-- ---------------------------- +-- 修改根目录父节点id为-1 +-- ---------------------------- +update jsh_materialcategory set ParentId='-1' where id='1' diff --git a/sql/华夏ERP数据库设计汇总.xlsx b/sql/华夏ERP数据库设计汇总.xlsx index 54f9e10fe9f2884e3d22b1332da735c2a2c56227..634e8785f0696de86d431e1ede5018d978cb36d4 100644 GIT binary patch delta 61046 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 delta 60110 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%0Dc_h8~z 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 materialCategoryList = materialCategoryService.getAllList(parentId); - res.code = 200; - res.data = materialCategoryList; - } catch(Exception e){ - e.printStackTrace(); - res.code = 500; - res.data = "获取数据失败"; - } - return res; - } - - /** - * 根据id来查询商品名称 - * @param id - * @param request - * @return - */ - @GetMapping(value = "/findById") - public BaseResponseInfo findById(@RequestParam("id") Long id, HttpServletRequest request) { - BaseResponseInfo res = new BaseResponseInfo(); - try { - List dataList = materialCategoryService.findById(id); - JSONObject outer = new JSONObject(); - if (null != dataList) { - for (MaterialCategory mc : dataList) { - outer.put("name", mc.getName()); - outer.put("parentId", mc.getParentid()); - } - } - res.code = 200; - res.data = outer; - } catch(Exception e){ - e.printStackTrace(); - res.code = 500; - res.data = "获取数据失败"; - } - return res; - } -} +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.gson.JsonObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.MaterialCategory; +import com.jsh.erp.datasource.entities.SerialNumberEx; +import com.jsh.erp.datasource.vo.TreeNode; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.materialCategory.MaterialCategoryService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * @author ji—sheng—hua 华夏ERP + */ +@RestController +@RequestMapping(value = "/materialCategory") +public class MaterialCategoryController { + private Logger logger = LoggerFactory.getLogger(MaterialCategoryController.class); + + @Resource + private MaterialCategoryService materialCategoryService; + + @GetMapping(value = "/getAllList") + public BaseResponseInfo getAllList(@RequestParam("parentId") Long parentId, HttpServletRequest request) { + BaseResponseInfo res = new BaseResponseInfo(); + try { + List materialCategoryList = materialCategoryService.getAllList(parentId); + res.code = 200; + res.data = materialCategoryList; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 根据id来查询商品名称 + * @param id + * @param request + * @return + */ + @RequestMapping(value = "/findById") + public BaseResponseInfo findById(@RequestParam("id") Long id, HttpServletRequest request) { + BaseResponseInfo res = new BaseResponseInfo(); + try { + List dataList = materialCategoryService.findById(id); + JSONObject outer = new JSONObject(); + if (null != dataList) { + for (MaterialCategory mc : dataList) { + outer.put("id", mc.getId()); + outer.put("name", mc.getName()); + outer.put("parentId", mc.getParentid()); + List dataParentList = materialCategoryService.findById(mc.getParentid()); + if(dataParentList!=null&&dataParentList.size()>0){ + outer.put("parentName", dataParentList.get(0).getName()); + } + outer.put("sort", mc.getSort()); + outer.put("serialNo", mc.getSerialNo()); + outer.put("remark", mc.getRemark()); + } + } + res.code = 200; + res.data = outer; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + /** + * create by: cjl + * description: + * 获取商品类别树数据 + * create time: 2019/2/19 11:49 + * @Param: + * @return com.alibaba.fastjson.JSONArray + */ + @RequestMapping(value = "/getMaterialCategoryTree") + public JSONArray getMaterialCategoryTree() throws Exception{ + JSONArray arr=new JSONArray(); + List materialCategoryTree = materialCategoryService.getMaterialCategoryTree(); + if(materialCategoryTree!=null&&materialCategoryTree.size()>0){ + for(TreeNode node:materialCategoryTree){ + String str=JSON.toJSONString(node); + JSONObject obj=JSON.parseObject(str); + arr.add(obj) ; + } + } + return arr; + } + /** + * create by: cjl + * description: + * 新增商品类别数据 + * create time: 2019/2/19 17:17 + * @Param: beanJson + * @return java.lang.Object + */ + @RequestMapping(value = "/addMaterialCategory") + public Object addMaterialCategory(@RequestParam("info") String beanJson) throws Exception { + JSONObject result = ExceptionConstants.standardSuccess(); + MaterialCategory mc= JSON.parseObject(beanJson, MaterialCategory.class); + int i= materialCategoryService.addMaterialCategory(mc); + if(i<1){ + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_CATEGORY_ADD_FAILED_CODE, + ExceptionConstants.MATERIAL_CATEGORY_ADD_FAILED_MSG); + } + return result; + } + /** + * create by: cjl + * description: + * 修改商品类别数据 + * create time: 2019/2/20 9:30 + * @Param: beanJson + * @return java.lang.Object + */ + @RequestMapping(value = "/editMaterialCategory") + public Object editMaterialCategory(@RequestParam("info") String beanJson) throws Exception { + JSONObject result = ExceptionConstants.standardSuccess(); + MaterialCategory mc= JSON.parseObject(beanJson, MaterialCategory.class); + int i= materialCategoryService.editMaterialCategory(mc); + if(i<1){ + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_CATEGORY_ADD_FAILED_CODE, + ExceptionConstants.MATERIAL_CATEGORY_ADD_FAILED_MSG); + } + return result; + } + /** + * create by: cjl + * description: + * 批量删除商品类别信息 + * create time: 2019/2/19 17:26 + * @Param: ids + * @return java.lang.Object + */ + @RequestMapping(value = "/batchDeleteMaterialCategory") + public Object batchDeleteMaterialCategory(@RequestParam("ids") String ids) throws Exception { + JSONObject result = ExceptionConstants.standardSuccess(); + int i= materialCategoryService.batchDeleteMaterialCategoryByIds(ids); + if(i<1){ + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_CATEGORY_DELETE_FAILED_CODE, + ExceptionConstants.MATERIAL_CATEGORY_DELETE_FAILED_MSG); + } + return result; + } +} diff --git a/src/main/java/com/jsh/erp/datasource/entities/MaterialCategory.java b/src/main/java/com/jsh/erp/datasource/entities/MaterialCategory.java index fe948130..2f22622d 100644 --- a/src/main/java/com/jsh/erp/datasource/entities/MaterialCategory.java +++ b/src/main/java/com/jsh/erp/datasource/entities/MaterialCategory.java @@ -1,131 +1,389 @@ -package com.jsh.erp.datasource.entities; - -public class MaterialCategory { - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_materialcategory.Id - * - * @mbggenerated - */ - private Long id; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_materialcategory.Name - * - * @mbggenerated - */ - private String name; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_materialcategory.CategoryLevel - * - * @mbggenerated - */ - private Short categorylevel; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database column jsh_materialcategory.ParentId - * - * @mbggenerated - */ - private Long parentid; - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_materialcategory.Id - * - * @return the value of jsh_materialcategory.Id - * - * @mbggenerated - */ - public Long getId() { - return id; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_materialcategory.Id - * - * @param id the value for jsh_materialcategory.Id - * - * @mbggenerated - */ - public void setId(Long id) { - this.id = id; - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_materialcategory.Name - * - * @return the value of jsh_materialcategory.Name - * - * @mbggenerated - */ - public String getName() { - return name; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_materialcategory.Name - * - * @param name the value for jsh_materialcategory.Name - * - * @mbggenerated - */ - public void setName(String name) { - this.name = name == null ? null : name.trim(); - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_materialcategory.CategoryLevel - * - * @return the value of jsh_materialcategory.CategoryLevel - * - * @mbggenerated - */ - public Short getCategorylevel() { - return categorylevel; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_materialcategory.CategoryLevel - * - * @param categorylevel the value for jsh_materialcategory.CategoryLevel - * - * @mbggenerated - */ - public void setCategorylevel(Short categorylevel) { - this.categorylevel = categorylevel; - } - - /** - * This method was generated by MyBatis Generator. - * This method returns the value of the database column jsh_materialcategory.ParentId - * - * @return the value of jsh_materialcategory.ParentId - * - * @mbggenerated - */ - public Long getParentid() { - return parentid; - } - - /** - * This method was generated by MyBatis Generator. - * This method sets the value of the database column jsh_materialcategory.ParentId - * - * @param parentid the value for jsh_materialcategory.ParentId - * - * @mbggenerated - */ - public void setParentid(Long parentid) { - this.parentid = parentid; - } +package com.jsh.erp.datasource.entities; + +import java.util.Date; + +public class MaterialCategory { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.Id + * + * @mbggenerated + */ + private Long id; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.Name + * + * @mbggenerated + */ + private String name; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.CategoryLevel + * + * @mbggenerated + */ + private Short categorylevel; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.ParentId + * + * @mbggenerated + */ + private Long parentid; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.sort + * + * @mbggenerated + */ + private String sort; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.status + * + * @mbggenerated + */ + private String status; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.serial_no + * + * @mbggenerated + */ + private String serialNo; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.remark + * + * @mbggenerated + */ + private String remark; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.create_time + * + * @mbggenerated + */ + private Date createTime; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.creator + * + * @mbggenerated + */ + private Long creator; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.update_time + * + * @mbggenerated + */ + private Date updateTime; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_materialcategory.updater + * + * @mbggenerated + */ + private Long updater; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.Id + * + * @return the value of jsh_materialcategory.Id + * + * @mbggenerated + */ + public Long getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.Id + * + * @param id the value for jsh_materialcategory.Id + * + * @mbggenerated + */ + public void setId(Long id) { + this.id = id; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.Name + * + * @return the value of jsh_materialcategory.Name + * + * @mbggenerated + */ + public String getName() { + return name; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.Name + * + * @param name the value for jsh_materialcategory.Name + * + * @mbggenerated + */ + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.CategoryLevel + * + * @return the value of jsh_materialcategory.CategoryLevel + * + * @mbggenerated + */ + public Short getCategorylevel() { + return categorylevel; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.CategoryLevel + * + * @param categorylevel the value for jsh_materialcategory.CategoryLevel + * + * @mbggenerated + */ + public void setCategorylevel(Short categorylevel) { + this.categorylevel = categorylevel; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.ParentId + * + * @return the value of jsh_materialcategory.ParentId + * + * @mbggenerated + */ + public Long getParentid() { + return parentid; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.ParentId + * + * @param parentid the value for jsh_materialcategory.ParentId + * + * @mbggenerated + */ + public void setParentid(Long parentid) { + this.parentid = parentid; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.sort + * + * @return the value of jsh_materialcategory.sort + * + * @mbggenerated + */ + public String getSort() { + return sort; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.sort + * + * @param sort the value for jsh_materialcategory.sort + * + * @mbggenerated + */ + public void setSort(String sort) { + this.sort = sort == null ? null : sort.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.status + * + * @return the value of jsh_materialcategory.status + * + * @mbggenerated + */ + public String getStatus() { + return status; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.status + * + * @param status the value for jsh_materialcategory.status + * + * @mbggenerated + */ + public void setStatus(String status) { + this.status = status == null ? null : status.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.serial_no + * + * @return the value of jsh_materialcategory.serial_no + * + * @mbggenerated + */ + public String getSerialNo() { + return serialNo; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.serial_no + * + * @param serialNo the value for jsh_materialcategory.serial_no + * + * @mbggenerated + */ + public void setSerialNo(String serialNo) { + this.serialNo = serialNo == null ? null : serialNo.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.remark + * + * @return the value of jsh_materialcategory.remark + * + * @mbggenerated + */ + public String getRemark() { + return remark; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.remark + * + * @param remark the value for jsh_materialcategory.remark + * + * @mbggenerated + */ + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.create_time + * + * @return the value of jsh_materialcategory.create_time + * + * @mbggenerated + */ + public Date getCreateTime() { + return createTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.create_time + * + * @param createTime the value for jsh_materialcategory.create_time + * + * @mbggenerated + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.creator + * + * @return the value of jsh_materialcategory.creator + * + * @mbggenerated + */ + public Long getCreator() { + return creator; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.creator + * + * @param creator the value for jsh_materialcategory.creator + * + * @mbggenerated + */ + public void setCreator(Long creator) { + this.creator = creator; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.update_time + * + * @return the value of jsh_materialcategory.update_time + * + * @mbggenerated + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.update_time + * + * @param updateTime the value for jsh_materialcategory.update_time + * + * @mbggenerated + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_materialcategory.updater + * + * @return the value of jsh_materialcategory.updater + * + * @mbggenerated + */ + public Long getUpdater() { + return updater; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_materialcategory.updater + * + * @param updater the value for jsh_materialcategory.updater + * + * @mbggenerated + */ + public void setUpdater(Long updater) { + this.updater = updater; + } } \ No newline at end of file diff --git a/src/main/java/com/jsh/erp/datasource/entities/MaterialCategoryExample.java b/src/main/java/com/jsh/erp/datasource/entities/MaterialCategoryExample.java index 3c7fe5b3..49ef2ea1 100644 --- a/src/main/java/com/jsh/erp/datasource/entities/MaterialCategoryExample.java +++ b/src/main/java/com/jsh/erp/datasource/entities/MaterialCategoryExample.java @@ -1,552 +1,1073 @@ -package com.jsh.erp.datasource.entities; - -import java.util.ArrayList; -import java.util.List; - -public class MaterialCategoryExample { - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - protected String orderByClause; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - protected boolean distinct; - - /** - * This field was generated by MyBatis Generator. - * This field corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - protected List oredCriteria; - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public MaterialCategoryExample() { - oredCriteria = new ArrayList(); - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public void setOrderByClause(String orderByClause) { - this.orderByClause = orderByClause; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public String getOrderByClause() { - return orderByClause; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public void setDistinct(boolean distinct) { - this.distinct = distinct; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public boolean isDistinct() { - return distinct; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public List getOredCriteria() { - return oredCriteria; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public void or(Criteria criteria) { - oredCriteria.add(criteria); - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public Criteria or() { - Criteria criteria = createCriteriaInternal(); - oredCriteria.add(criteria); - return criteria; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public Criteria createCriteria() { - Criteria criteria = createCriteriaInternal(); - if (oredCriteria.size() == 0) { - oredCriteria.add(criteria); - } - return criteria; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - protected Criteria createCriteriaInternal() { - Criteria criteria = new Criteria(); - return criteria; - } - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public void clear() { - oredCriteria.clear(); - orderByClause = null; - distinct = false; - } - - /** - * This class was generated by MyBatis Generator. - * This class corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - protected abstract static class GeneratedCriteria { - protected List criteria; - - protected GeneratedCriteria() { - super(); - criteria = new ArrayList(); - } - - public boolean isValid() { - return criteria.size() > 0; - } - - public List getAllCriteria() { - return criteria; - } - - public List getCriteria() { - return criteria; - } - - protected void addCriterion(String condition) { - if (condition == null) { - throw new RuntimeException("Value for condition cannot be null"); - } - criteria.add(new Criterion(condition)); - } - - protected void addCriterion(String condition, Object value, String property) { - if (value == null) { - throw new RuntimeException("Value for " + property + " cannot be null"); - } - criteria.add(new Criterion(condition, value)); - } - - protected void addCriterion(String condition, Object value1, Object value2, String property) { - if (value1 == null || value2 == null) { - throw new RuntimeException("Between values for " + property + " cannot be null"); - } - criteria.add(new Criterion(condition, value1, value2)); - } - - public Criteria andIdIsNull() { - addCriterion("Id is null"); - return (Criteria) this; - } - - public Criteria andIdIsNotNull() { - addCriterion("Id is not null"); - return (Criteria) this; - } - - public Criteria andIdEqualTo(Long value) { - addCriterion("Id =", value, "id"); - return (Criteria) this; - } - - public Criteria andIdNotEqualTo(Long value) { - addCriterion("Id <>", value, "id"); - return (Criteria) this; - } - - public Criteria andIdGreaterThan(Long value) { - addCriterion("Id >", value, "id"); - return (Criteria) this; - } - - public Criteria andIdGreaterThanOrEqualTo(Long value) { - addCriterion("Id >=", value, "id"); - return (Criteria) this; - } - - public Criteria andIdLessThan(Long value) { - addCriterion("Id <", value, "id"); - return (Criteria) this; - } - - public Criteria andIdLessThanOrEqualTo(Long value) { - addCriterion("Id <=", value, "id"); - return (Criteria) this; - } - - public Criteria andIdIn(List values) { - addCriterion("Id in", values, "id"); - return (Criteria) this; - } - - public Criteria andIdNotIn(List values) { - addCriterion("Id not in", values, "id"); - return (Criteria) this; - } - - public Criteria andIdBetween(Long value1, Long value2) { - addCriterion("Id between", value1, value2, "id"); - return (Criteria) this; - } - - public Criteria andIdNotBetween(Long value1, Long value2) { - addCriterion("Id not between", value1, value2, "id"); - return (Criteria) this; - } - - public Criteria andNameIsNull() { - addCriterion("Name is null"); - return (Criteria) this; - } - - public Criteria andNameIsNotNull() { - addCriterion("Name is not null"); - return (Criteria) this; - } - - public Criteria andNameEqualTo(String value) { - addCriterion("Name =", value, "name"); - return (Criteria) this; - } - - public Criteria andNameNotEqualTo(String value) { - addCriterion("Name <>", value, "name"); - return (Criteria) this; - } - - public Criteria andNameGreaterThan(String value) { - addCriterion("Name >", value, "name"); - return (Criteria) this; - } - - public Criteria andNameGreaterThanOrEqualTo(String value) { - addCriterion("Name >=", value, "name"); - return (Criteria) this; - } - - public Criteria andNameLessThan(String value) { - addCriterion("Name <", value, "name"); - return (Criteria) this; - } - - public Criteria andNameLessThanOrEqualTo(String value) { - addCriterion("Name <=", value, "name"); - return (Criteria) this; - } - - public Criteria andNameLike(String value) { - addCriterion("Name like", value, "name"); - return (Criteria) this; - } - - public Criteria andNameNotLike(String value) { - addCriterion("Name not like", value, "name"); - return (Criteria) this; - } - - public Criteria andNameIn(List values) { - addCriterion("Name in", values, "name"); - return (Criteria) this; - } - - public Criteria andNameNotIn(List values) { - addCriterion("Name not in", values, "name"); - return (Criteria) this; - } - - public Criteria andNameBetween(String value1, String value2) { - addCriterion("Name between", value1, value2, "name"); - return (Criteria) this; - } - - public Criteria andNameNotBetween(String value1, String value2) { - addCriterion("Name not between", value1, value2, "name"); - return (Criteria) this; - } - - public Criteria andCategorylevelIsNull() { - addCriterion("CategoryLevel is null"); - return (Criteria) this; - } - - public Criteria andCategorylevelIsNotNull() { - addCriterion("CategoryLevel is not null"); - return (Criteria) this; - } - - public Criteria andCategorylevelEqualTo(Short value) { - addCriterion("CategoryLevel =", value, "categorylevel"); - return (Criteria) this; - } - - public Criteria andCategorylevelNotEqualTo(Short value) { - addCriterion("CategoryLevel <>", value, "categorylevel"); - return (Criteria) this; - } - - public Criteria andCategorylevelGreaterThan(Short value) { - addCriterion("CategoryLevel >", value, "categorylevel"); - return (Criteria) this; - } - - public Criteria andCategorylevelGreaterThanOrEqualTo(Short value) { - addCriterion("CategoryLevel >=", value, "categorylevel"); - return (Criteria) this; - } - - public Criteria andCategorylevelLessThan(Short value) { - addCriterion("CategoryLevel <", value, "categorylevel"); - return (Criteria) this; - } - - public Criteria andCategorylevelLessThanOrEqualTo(Short value) { - addCriterion("CategoryLevel <=", value, "categorylevel"); - return (Criteria) this; - } - - public Criteria andCategorylevelIn(List values) { - addCriterion("CategoryLevel in", values, "categorylevel"); - return (Criteria) this; - } - - public Criteria andCategorylevelNotIn(List values) { - addCriterion("CategoryLevel not in", values, "categorylevel"); - return (Criteria) this; - } - - public Criteria andCategorylevelBetween(Short value1, Short value2) { - addCriterion("CategoryLevel between", value1, value2, "categorylevel"); - return (Criteria) this; - } - - public Criteria andCategorylevelNotBetween(Short value1, Short value2) { - addCriterion("CategoryLevel not between", value1, value2, "categorylevel"); - return (Criteria) this; - } - - public Criteria andParentidIsNull() { - addCriterion("ParentId is null"); - return (Criteria) this; - } - - public Criteria andParentidIsNotNull() { - addCriterion("ParentId is not null"); - return (Criteria) this; - } - - public Criteria andParentidEqualTo(Long value) { - addCriterion("ParentId =", value, "parentid"); - return (Criteria) this; - } - - public Criteria andParentidNotEqualTo(Long value) { - addCriterion("ParentId <>", value, "parentid"); - return (Criteria) this; - } - - public Criteria andParentidGreaterThan(Long value) { - addCriterion("ParentId >", value, "parentid"); - return (Criteria) this; - } - - public Criteria andParentidGreaterThanOrEqualTo(Long value) { - addCriterion("ParentId >=", value, "parentid"); - return (Criteria) this; - } - - public Criteria andParentidLessThan(Long value) { - addCriterion("ParentId <", value, "parentid"); - return (Criteria) this; - } - - public Criteria andParentidLessThanOrEqualTo(Long value) { - addCriterion("ParentId <=", value, "parentid"); - return (Criteria) this; - } - - public Criteria andParentidIn(List values) { - addCriterion("ParentId in", values, "parentid"); - return (Criteria) this; - } - - public Criteria andParentidNotIn(List values) { - addCriterion("ParentId not in", values, "parentid"); - return (Criteria) this; - } - - public Criteria andParentidBetween(Long value1, Long value2) { - addCriterion("ParentId between", value1, value2, "parentid"); - return (Criteria) this; - } - - public Criteria andParentidNotBetween(Long value1, Long value2) { - addCriterion("ParentId not between", value1, value2, "parentid"); - return (Criteria) this; - } - } - - /** - * This class was generated by MyBatis Generator. - * This class corresponds to the database table jsh_materialcategory - * - * @mbggenerated do_not_delete_during_merge - */ - public static class Criteria extends GeneratedCriteria { - - protected Criteria() { - super(); - } - } - - /** - * This class was generated by MyBatis Generator. - * This class corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - public static class Criterion { - private String condition; - - private Object value; - - private Object secondValue; - - private boolean noValue; - - private boolean singleValue; - - private boolean betweenValue; - - private boolean listValue; - - private String typeHandler; - - public String getCondition() { - return condition; - } - - public Object getValue() { - return value; - } - - public Object getSecondValue() { - return secondValue; - } - - public boolean isNoValue() { - return noValue; - } - - public boolean isSingleValue() { - return singleValue; - } - - public boolean isBetweenValue() { - return betweenValue; - } - - public boolean isListValue() { - return listValue; - } - - public String getTypeHandler() { - return typeHandler; - } - - protected Criterion(String condition) { - super(); - this.condition = condition; - this.typeHandler = null; - this.noValue = true; - } - - protected Criterion(String condition, Object value, String typeHandler) { - super(); - this.condition = condition; - this.value = value; - this.typeHandler = typeHandler; - if (value instanceof List) { - this.listValue = true; - } else { - this.singleValue = true; - } - } - - protected Criterion(String condition, Object value) { - this(condition, value, null); - } - - protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { - super(); - this.condition = condition; - this.value = value; - this.secondValue = secondValue; - this.typeHandler = typeHandler; - this.betweenValue = true; - } - - protected Criterion(String condition, Object value, Object secondValue) { - this(condition, value, secondValue, null); - } - } +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class MaterialCategoryExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public MaterialCategoryExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("Id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("Id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("Id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("Id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("Id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("Id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("Id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("Id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("Id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("Id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("Id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("Id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("Name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("Name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("Name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("Name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("Name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("Name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("Name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("Name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("Name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("Name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("Name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("Name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("Name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("Name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andCategorylevelIsNull() { + addCriterion("CategoryLevel is null"); + return (Criteria) this; + } + + public Criteria andCategorylevelIsNotNull() { + addCriterion("CategoryLevel is not null"); + return (Criteria) this; + } + + public Criteria andCategorylevelEqualTo(Short value) { + addCriterion("CategoryLevel =", value, "categorylevel"); + return (Criteria) this; + } + + public Criteria andCategorylevelNotEqualTo(Short value) { + addCriterion("CategoryLevel <>", value, "categorylevel"); + return (Criteria) this; + } + + public Criteria andCategorylevelGreaterThan(Short value) { + addCriterion("CategoryLevel >", value, "categorylevel"); + return (Criteria) this; + } + + public Criteria andCategorylevelGreaterThanOrEqualTo(Short value) { + addCriterion("CategoryLevel >=", value, "categorylevel"); + return (Criteria) this; + } + + public Criteria andCategorylevelLessThan(Short value) { + addCriterion("CategoryLevel <", value, "categorylevel"); + return (Criteria) this; + } + + public Criteria andCategorylevelLessThanOrEqualTo(Short value) { + addCriterion("CategoryLevel <=", value, "categorylevel"); + return (Criteria) this; + } + + public Criteria andCategorylevelIn(List values) { + addCriterion("CategoryLevel in", values, "categorylevel"); + return (Criteria) this; + } + + public Criteria andCategorylevelNotIn(List values) { + addCriterion("CategoryLevel not in", values, "categorylevel"); + return (Criteria) this; + } + + public Criteria andCategorylevelBetween(Short value1, Short value2) { + addCriterion("CategoryLevel between", value1, value2, "categorylevel"); + return (Criteria) this; + } + + public Criteria andCategorylevelNotBetween(Short value1, Short value2) { + addCriterion("CategoryLevel not between", value1, value2, "categorylevel"); + return (Criteria) this; + } + + public Criteria andParentidIsNull() { + addCriterion("ParentId is null"); + return (Criteria) this; + } + + public Criteria andParentidIsNotNull() { + addCriterion("ParentId is not null"); + return (Criteria) this; + } + + public Criteria andParentidEqualTo(Long value) { + addCriterion("ParentId =", value, "parentid"); + return (Criteria) this; + } + + public Criteria andParentidNotEqualTo(Long value) { + addCriterion("ParentId <>", value, "parentid"); + return (Criteria) this; + } + + public Criteria andParentidGreaterThan(Long value) { + addCriterion("ParentId >", value, "parentid"); + return (Criteria) this; + } + + public Criteria andParentidGreaterThanOrEqualTo(Long value) { + addCriterion("ParentId >=", value, "parentid"); + return (Criteria) this; + } + + public Criteria andParentidLessThan(Long value) { + addCriterion("ParentId <", value, "parentid"); + return (Criteria) this; + } + + public Criteria andParentidLessThanOrEqualTo(Long value) { + addCriterion("ParentId <=", value, "parentid"); + return (Criteria) this; + } + + public Criteria andParentidIn(List values) { + addCriterion("ParentId in", values, "parentid"); + return (Criteria) this; + } + + public Criteria andParentidNotIn(List values) { + addCriterion("ParentId not in", values, "parentid"); + return (Criteria) this; + } + + public Criteria andParentidBetween(Long value1, Long value2) { + addCriterion("ParentId between", value1, value2, "parentid"); + return (Criteria) this; + } + + public Criteria andParentidNotBetween(Long value1, Long value2) { + addCriterion("ParentId not between", value1, value2, "parentid"); + return (Criteria) this; + } + + public Criteria andSortIsNull() { + addCriterion("sort is null"); + return (Criteria) this; + } + + public Criteria andSortIsNotNull() { + addCriterion("sort is not null"); + return (Criteria) this; + } + + public Criteria andSortEqualTo(String value) { + addCriterion("sort =", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotEqualTo(String value) { + addCriterion("sort <>", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThan(String value) { + addCriterion("sort >", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThanOrEqualTo(String value) { + addCriterion("sort >=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThan(String value) { + addCriterion("sort <", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThanOrEqualTo(String value) { + addCriterion("sort <=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLike(String value) { + addCriterion("sort like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotLike(String value) { + addCriterion("sort not like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortIn(List values) { + addCriterion("sort in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotIn(List values) { + addCriterion("sort not in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortBetween(String value1, String value2) { + addCriterion("sort between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotBetween(String value1, String value2) { + addCriterion("sort not between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andStatusIsNull() { + addCriterion("status is null"); + return (Criteria) this; + } + + public Criteria andStatusIsNotNull() { + addCriterion("status is not null"); + return (Criteria) this; + } + + public Criteria andStatusEqualTo(String value) { + addCriterion("status =", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotEqualTo(String value) { + addCriterion("status <>", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThan(String value) { + addCriterion("status >", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThanOrEqualTo(String value) { + addCriterion("status >=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThan(String value) { + addCriterion("status <", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThanOrEqualTo(String value) { + addCriterion("status <=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLike(String value) { + addCriterion("status like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotLike(String value) { + addCriterion("status not like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusIn(List values) { + addCriterion("status in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotIn(List values) { + addCriterion("status not in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusBetween(String value1, String value2) { + addCriterion("status between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotBetween(String value1, String value2) { + addCriterion("status not between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andSerialNoIsNull() { + addCriterion("serial_no is null"); + return (Criteria) this; + } + + public Criteria andSerialNoIsNotNull() { + addCriterion("serial_no is not null"); + return (Criteria) this; + } + + public Criteria andSerialNoEqualTo(String value) { + addCriterion("serial_no =", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotEqualTo(String value) { + addCriterion("serial_no <>", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoGreaterThan(String value) { + addCriterion("serial_no >", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoGreaterThanOrEqualTo(String value) { + addCriterion("serial_no >=", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoLessThan(String value) { + addCriterion("serial_no <", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoLessThanOrEqualTo(String value) { + addCriterion("serial_no <=", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoLike(String value) { + addCriterion("serial_no like", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotLike(String value) { + addCriterion("serial_no not like", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoIn(List values) { + addCriterion("serial_no in", values, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotIn(List values) { + addCriterion("serial_no not in", values, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoBetween(String value1, String value2) { + addCriterion("serial_no between", value1, value2, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotBetween(String value1, String value2) { + addCriterion("serial_no not between", value1, value2, "serialNo"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreatorIsNull() { + addCriterion("creator is null"); + return (Criteria) this; + } + + public Criteria andCreatorIsNotNull() { + addCriterion("creator is not null"); + return (Criteria) this; + } + + public Criteria andCreatorEqualTo(Long value) { + addCriterion("creator =", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotEqualTo(Long value) { + addCriterion("creator <>", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThan(Long value) { + addCriterion("creator >", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThanOrEqualTo(Long value) { + addCriterion("creator >=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThan(Long value) { + addCriterion("creator <", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThanOrEqualTo(Long value) { + addCriterion("creator <=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorIn(List values) { + addCriterion("creator in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotIn(List values) { + addCriterion("creator not in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorBetween(Long value1, Long value2) { + addCriterion("creator between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotBetween(Long value1, Long value2) { + addCriterion("creator not between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(Date value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(Date value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(Date value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(Date value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(Date value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(Date value1, Date value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(Date value1, Date value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdaterIsNull() { + addCriterion("updater is null"); + return (Criteria) this; + } + + public Criteria andUpdaterIsNotNull() { + addCriterion("updater is not null"); + return (Criteria) this; + } + + public Criteria andUpdaterEqualTo(Long value) { + addCriterion("updater =", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterNotEqualTo(Long value) { + addCriterion("updater <>", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterGreaterThan(Long value) { + addCriterion("updater >", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterGreaterThanOrEqualTo(Long value) { + addCriterion("updater >=", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterLessThan(Long value) { + addCriterion("updater <", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterLessThanOrEqualTo(Long value) { + addCriterion("updater <=", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterIn(List values) { + addCriterion("updater in", values, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterNotIn(List values) { + addCriterion("updater not in", values, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterBetween(Long value1, Long value2) { + addCriterion("updater between", value1, value2, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterNotBetween(Long value1, Long value2) { + addCriterion("updater not between", value1, value2, "updater"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_materialcategory + * + * @mbggenerated do_not_delete_during_merge + */ + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } } \ No newline at end of file diff --git a/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapper.java b/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapper.java index 9a25dd1b..f594f394 100644 --- a/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapper.java +++ b/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapper.java @@ -1,106 +1,96 @@ -package com.jsh.erp.datasource.mappers; - -import com.jsh.erp.datasource.entities.MaterialCategory; -import com.jsh.erp.datasource.entities.MaterialCategoryExample; -import java.util.List; -import org.apache.ibatis.annotations.Param; - -public interface MaterialCategoryMapper { - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - int countByExample(MaterialCategoryExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - int deleteByExample(MaterialCategoryExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - int deleteByPrimaryKey(Long id); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - int insert(MaterialCategory record); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - int insertSelective(MaterialCategory record); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - List selectByExample(MaterialCategoryExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - MaterialCategory selectByPrimaryKey(Long id); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - int updateByExampleSelective(@Param("record") MaterialCategory record, @Param("example") MaterialCategoryExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - int updateByExample(@Param("record") MaterialCategory record, @Param("example") MaterialCategoryExample example); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - int updateByPrimaryKeySelective(MaterialCategory record); - - /** - * This method was generated by MyBatis Generator. - * This method corresponds to the database table jsh_materialcategory - * - * @mbggenerated - */ - int updateByPrimaryKey(MaterialCategory record); - - List selectByConditionMaterialCategory( - @Param("name") String name, - @Param("parentId") Integer parentId, - @Param("offset") Integer offset, - @Param("rows") Integer rows); - - int countsByMaterialCategory( - @Param("name") String name, - @Param("parentId") Integer parentId); +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialCategory; +import com.jsh.erp.datasource.entities.MaterialCategoryExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface MaterialCategoryMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + int countByExample(MaterialCategoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + int deleteByExample(MaterialCategoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + int deleteByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + int insert(MaterialCategory record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + int insertSelective(MaterialCategory record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + List selectByExample(MaterialCategoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + MaterialCategory selectByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + int updateByExampleSelective(@Param("record") MaterialCategory record, @Param("example") MaterialCategoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + int updateByExample(@Param("record") MaterialCategory record, @Param("example") MaterialCategoryExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + int updateByPrimaryKeySelective(MaterialCategory record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_materialcategory + * + * @mbggenerated + */ + int updateByPrimaryKey(MaterialCategory record); } \ No newline at end of file diff --git a/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapperEx.java b/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapperEx.java new file mode 100644 index 00000000..e31814d1 --- /dev/null +++ b/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapperEx.java @@ -0,0 +1,35 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialCategory; +import com.jsh.erp.datasource.vo.TreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/2/18 17:23 + */ +public interface MaterialCategoryMapperEx { + List selectByConditionMaterialCategory( + @Param("name") String name, + @Param("parentId") Integer parentId, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + int countsByMaterialCategory( + @Param("name") String name, + @Param("parentId") Integer parentId); + + List getNodeTree(); + List getNextNodeTree(@Param("id") Long id); + + int addMaterialCategory(MaterialCategory mc); + + int batchDeleteMaterialCategoryByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); + + int editMaterialCategory(MaterialCategory mc); +} diff --git a/src/main/java/com/jsh/erp/datasource/vo/TreeNode.java b/src/main/java/com/jsh/erp/datasource/vo/TreeNode.java new file mode 100644 index 00000000..b7025f3b --- /dev/null +++ b/src/main/java/com/jsh/erp/datasource/vo/TreeNode.java @@ -0,0 +1,96 @@ +package com.jsh.erp.datasource.vo; + +import java.util.List; + +/** + * Description + * 树形结构基本元素 + * @Author: cjl + * @Date: 2019/2/19 11:27 + */ +public class TreeNode { + /** + * id主键 + * */ + private Long id; + /** + * text显示的文本 + * */ + private String text; + /** + *state节点状态,'open' 或 'closed',默认:'open'。如果为'closed'的时候,将不自动展开该节点。 + * */ + private String state="open"; + /** + *iconCls 节点图标id + * */ + private String iconCls; + /** + * checked 是否被选中 + * */ + private boolean checked; + /** + *attributes 自定义属性 + * */ + private String attributes; + /** + * children 子节点 + * */ + private List children; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getIconCls() { + return iconCls; + } + + public void setIconCls(String iconCls) { + this.iconCls = iconCls; + } + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getAttributes() { + return attributes; + } + + public void setAttributes(String attributes) { + this.attributes = attributes; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java b/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java index 6f808611..56cad692 100644 --- a/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java +++ b/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java @@ -1,9 +1,14 @@ package com.jsh.erp.service.materialCategory; import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; import com.jsh.erp.datasource.entities.MaterialCategory; import com.jsh.erp.datasource.entities.MaterialCategoryExample; +import com.jsh.erp.datasource.entities.User; import com.jsh.erp.datasource.mappers.MaterialCategoryMapper; +import com.jsh.erp.datasource.mappers.MaterialCategoryMapperEx; +import com.jsh.erp.datasource.vo.TreeNode; +import com.jsh.erp.service.user.UserService; import com.jsh.erp.utils.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.Date; import java.util.List; @Service @@ -20,6 +26,10 @@ public class MaterialCategoryService { @Resource private MaterialCategoryMapper materialCategoryMapper; + @Resource + private MaterialCategoryMapperEx materialCategoryMapperEx; + @Resource + private UserService userService; public MaterialCategory getMaterialCategory(long id) { return materialCategoryMapper.selectByPrimaryKey(id); @@ -38,11 +48,11 @@ public class MaterialCategoryService { } public List select(String name, Integer parentId, int offset, int rows) { - return materialCategoryMapper.selectByConditionMaterialCategory(name, parentId, offset, rows); + return materialCategoryMapperEx.selectByConditionMaterialCategory(name, parentId, offset, rows); } public int countMaterialCategory(String name, Integer parentId) { - return materialCategoryMapper.countsByMaterialCategory(name, parentId); + return materialCategoryMapperEx.countsByMaterialCategory(name, parentId); } @Transactional(value = "transactionManager", rollbackFor = Exception.class) @@ -80,4 +90,68 @@ public class MaterialCategoryService { example.createCriteria().andIdEqualTo(id); return materialCategoryMapper.selectByExample(example); } + /** + * create by: cjl + * description: + *获取商品类别树数据 + * create time: 2019/2/19 14:30 + * @Param: + * @return java.util.List + */ + public List getMaterialCategoryTree() throws Exception{ + return materialCategoryMapperEx.getNodeTree(); + } + /** + * create by: cjl + * description: + * 新增商品类别信息 + * create time: 2019/2/19 16:30 + * @Param: mc + * @return void + */ + public int addMaterialCategory(MaterialCategory mc) throws Exception { + if(mc==null){ + return 0; + } + if(mc.getParentid()==null){ + //没有给定父级目录的id,默认设置父级目录为根目录 + mc.setParentid(BusinessConstants.MATERIAL_CATEGORY_ROOT_ID); + } + //数据状态新增时默认设置为启用 + mc.setStatus(BusinessConstants.MATERIAL_CATEGORY_STATUS_ENABLE); + Date date=new Date(); + User userInfo=userService.getCurrentUser(); + //创建时间 + mc.setCreateTime(date); + //创建人 + mc.setCreator(userInfo==null?null:userInfo.getId()); + //更新时间 + mc.setUpdateTime(date); + //更新人 + mc.setUpdater(userInfo==null?null:userInfo.getId()); + return materialCategoryMapperEx.addMaterialCategory(mc); + } + + public int batchDeleteMaterialCategoryByIds(String ids) throws Exception { + //更新时间 + Date updateDate =new Date(); + //更新人 + User userInfo=userService.getCurrentUser(); + Long updater=userInfo==null?null:userInfo.getId(); + StringBuffer sb=new StringBuffer(); + String strArray[]=ids.split(","); + if(strArray.length<1){ + return 0; + } + return materialCategoryMapperEx.batchDeleteMaterialCategoryByIds(updateDate,updater,strArray); + } + + public int editMaterialCategory(MaterialCategory mc) { + //更新时间 + mc.setUpdateTime(new Date()); + //更新人 + User userInfo=userService.getCurrentUser(); + mc.setUpdater(userInfo==null?null:userInfo.getId()); + return materialCategoryMapperEx.editMaterialCategory(mc); + } } diff --git a/src/main/resources/mapper_xml/MaterialCategoryMapper.xml b/src/main/resources/mapper_xml/MaterialCategoryMapper.xml index 8fccced5..1cf6be85 100644 --- a/src/main/resources/mapper_xml/MaterialCategoryMapper.xml +++ b/src/main/resources/mapper_xml/MaterialCategoryMapper.xml @@ -1,5 +1,5 @@ - - + + - Id, Name, CategoryLevel, ParentId + Id, Name, CategoryLevel, ParentId, sort, status, serial_no, remark, create_time, + creator, update_time, updater