Преглед изворни кода

fix 商品分类 单位 管理 2个模块CRUD

fix 商品分类 单位 管理 2个模块CRUD
shenzhongzheng пре 2 година
родитељ
комит
724707072c
12 измењених фајлова са 691 додато и 0 уклоњено
  1. 8 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesGoodsUnitDto.java
  2. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesGoodsUnitSearchDto.java
  3. 9 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesStockTypeDto.java
  4. 43 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Enum/CouponEnums.java
  5. 21 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesGoodsUnitController.java
  6. 157 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesStockTypeController.java
  7. 82 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/entity/CesGoodsUnit.java
  8. 125 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/entity/CesStockType.java
  9. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesGoodsUnitMapper.java
  10. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesStockTypeMapper.java
  11. 77 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesGoodsUnitServiceImpl.java
  12. 121 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesStockTypeServiceImpl.java

+ 8 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesGoodsUnitDto.java

@@ -0,0 +1,8 @@
+package org.jeecg.modules.rooms.DTO;
+
+import lombok.Data;
+import org.jeecg.modules.rooms.entity.CesGoodsUnit;
+
+@Data
+public class CesGoodsUnitDto extends CesGoodsUnit {
+}

+ 16 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesGoodsUnitSearchDto.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.rooms.DTO;
+
+import lombok.Data;
+import org.jeecg.common.api.dto.BasePage;
+
+/**
+ * 单位查询DTO
+ */
+@Data
+public class CesGoodsUnitSearchDto  extends BasePage {
+    private String hotelId;
+
+    private String name;
+
+
+}

+ 9 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesStockTypeDto.java

@@ -0,0 +1,9 @@
+package org.jeecg.modules.rooms.DTO;
+
+import lombok.Data;
+import org.jeecg.modules.rooms.entity.CesStockType;
+
+@Data
+public class CesStockTypeDto  extends CesStockType {
+
+}

+ 43 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Enum/CouponEnums.java

@@ -126,4 +126,47 @@ public class CouponEnums {
 	}
 
 
+	/**
+	 * 商品分类应用范围
+	 */
+	public static enum CesStockTypeApplyScopeEnum {
+		GUEST_ROOM(1,"客房"), POS(2,"pos"), FUN(3,"娱乐");
+
+		int code = 0;
+		String value = "";
+
+		private CesStockTypeApplyScopeEnum(int code,String value){
+			this.code = code;
+			this.value = value;
+		}
+
+		public int code(){
+			return code;
+		}
+
+		public String getValue(){
+			return value;
+		}
+
+		//根据CODE获取类型
+		public static CesStockTypeApplyScopeEnum val(int vcode){
+			for(CesStockTypeApplyScopeEnum bld: values()){
+				if(bld.code == vcode){
+					return bld;
+				}
+			}
+			return FUN;
+		}
+
+		public static CesStockTypeApplyScopeEnum val(String value){
+			for(CesStockTypeApplyScopeEnum bld : values()){
+				if(bld.value.equals(value)){
+					return bld;
+				}
+			}
+			return FUN;
+		}
+	}
+
+
 }

+ 21 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesGoodsUnitController.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.rooms.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 商品单位 前端控制器
+ * </p>
+ *
+ * @author Claude
+ * @since 2023-03-08
+ */
+@Controller
+@RequestMapping("/rooms/cesGoodsUnit")
+public class CesGoodsUnitController {
+
+}
+

+ 157 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesStockTypeController.java

@@ -0,0 +1,157 @@
+package org.jeecg.modules.rooms.controller;
+
+import cn.hutool.core.util.EnumUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.Enum.ResultCode;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.rooms.DTO.CesStockTypeDto;
+import org.jeecg.modules.rooms.Enum.CouponEnums;
+import org.jeecg.modules.rooms.service.CesStockTypeServiceImpl;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 商品库存分类表 前端控制器
+ * </p>
+ *
+ * @author Claude
+ * @since 2023-03-08
+ */
+
+@RestController
+@Api(tags="商品库存分类")
+@Slf4j
+@RequestMapping("/rooms/cesStockType")
+public class CesStockTypeController {
+
+    @Resource
+    private CesStockTypeServiceImpl stockTypeService;
+
+
+    @ApiOperation(value="分类查询", notes="分类查询")
+    @GetMapping(value = "/tree")
+    public Result tree(@RequestParam String hotelId){
+        if(StringUtils.isBlank(hotelId)){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        try{
+            return stockTypeService.tree(hotelId);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+
+    @ApiOperation(value="分类创建", notes="分类创建")
+    @PostMapping(value = "/create")
+    public Result create(@RequestBody CesStockTypeDto dto){
+        if(StringUtils.isBlank(dto.getHotelId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getName())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getParentId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getApplyScope())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        List<Integer> applyScope = Arrays.stream(dto.getApplyScope().split(",")).map(v -> Integer.parseInt(v)).collect(Collectors.toList());
+        List<Object> codes = EnumUtil.getFieldValues(CouponEnums.CesStockTypeApplyScopeEnum.class, "code");
+        for (int i = 0; i < applyScope.size(); i++) {
+            Integer v = applyScope.get(i);
+            if (!codes.contains(v.intValue())) return Result.error("参数不正确!请选择正确的应用范围!");
+        }
+        if(applyScope.contains(CouponEnums.CesStockTypeApplyScopeEnum.POS.code())){
+            //验证
+            if(StringUtils.isBlank(dto.getPosType())){
+                return Result.error(ResultCode.PARAM_MISS,"POS 类型数据不能为空!");
+            }
+        }
+        if(applyScope.contains(CouponEnums.CesStockTypeApplyScopeEnum.FUN.code())){
+            //验证
+            if(StringUtils.isBlank(dto.getFunType())){
+                return Result.error(ResultCode.PARAM_MISS,"娱乐 类型数据不能为空!");
+            }
+        }
+        if(null == dto.getSort()){
+            return Result.error(ResultCode.PARAM_MISS,"排序字段必填");
+        }
+        try{
+            return stockTypeService.create(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+
+    @ApiOperation(value="分类修改", notes="分类修改")
+    @PutMapping(value = "/modify")
+    public Result modify(@RequestBody CesStockTypeDto dto){
+        if(StringUtils.isBlank(dto.getId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getHotelId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getName())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getParentId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getApplyScope())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        List<Integer> applyScope = Arrays.stream(dto.getApplyScope().split(",")).map(v -> Integer.parseInt(v)).collect(Collectors.toList());
+        List<Object> codes = EnumUtil.getFieldValues(CouponEnums.CesStockTypeApplyScopeEnum.class, "code");
+        for (int i = 0; i < applyScope.size(); i++) {
+            Integer v = applyScope.get(i);
+            if (!codes.contains(v.intValue())) return Result.error("参数不正确!请选择正确的应用范围!");
+        }
+        if(applyScope.contains(CouponEnums.CesStockTypeApplyScopeEnum.POS.code())){
+            //验证
+            if(StringUtils.isBlank(dto.getPosType())){
+                return Result.error(ResultCode.PARAM_MISS,"POS 类型数据不能为空!");
+            }
+        }
+        if(applyScope.contains(CouponEnums.CesStockTypeApplyScopeEnum.FUN.code())){
+            //验证
+            if(StringUtils.isBlank(dto.getFunType())){
+                return Result.error(ResultCode.PARAM_MISS,"娱乐 类型数据不能为空!");
+            }
+        }
+        if(null == dto.getSort()){
+            return Result.error(ResultCode.PARAM_MISS,"排序字段必填");
+        }
+        try{
+            return stockTypeService.modify(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+
+    @ApiOperation(value="分类删除", notes="分类删除")
+    @DeleteMapping(value = "/delete")
+    public Result delete(CesStockTypeDto dto) {
+        if(StringUtils.isBlank(dto.getId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        try{
+            return stockTypeService.delete(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+}
+

+ 82 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/entity/CesGoodsUnit.java

@@ -0,0 +1,82 @@
+package org.jeecg.modules.rooms.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 商品单位
+ * </p>
+ *
+ * @author Claude
+ * @since 2023-03-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("ces_goods_unit")
+public class CesGoodsUnit extends Model<CesGoodsUnit> {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    /**
+     * 酒店ID
+     */
+    private String hotelId;
+
+    /**
+     * 单位名称
+     */
+    private String name;
+
+    /**
+     * 是否启用
+     */
+    private Boolean state;
+
+    /**
+     * 创建时间
+     */
+    @TableField("createAt")
+    private LocalDateTime createAt;
+
+    /**
+     * 修改时间
+     */
+    @TableField("updateAt")
+    private LocalDateTime updateAt;
+
+    /**
+     * 逻辑删除字段
+     */
+    private Boolean invalid;
+
+
+    public static final String ID = "id";
+
+    public static final String HOTEL_ID = "hotel_id";
+
+    public static final String NAME = "name";
+
+    public static final String STATE = "state";
+
+    public static final String CREATEAT = "createAt";
+
+    public static final String UPDATEAT = "updateAt";
+
+    public static final String INVALID = "invalid";
+
+    @Override
+    public Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 125 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/entity/CesStockType.java

@@ -0,0 +1,125 @@
+package org.jeecg.modules.rooms.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 商品库存分类表
+ * </p>
+ *
+ * @author Claude
+ * @since 2023-03-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("ces_stock_type")
+public class CesStockType extends Model<CesStockType> {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    /**
+     * 酒店ID
+     */
+    private String hotelId;
+
+    /**
+     * 分类名称
+     */
+    private String name;
+
+    /**
+     * 上级ID
+     */
+    private String parentId;
+
+    /**
+     * 是否快捷
+     */
+    private Boolean isQuick;
+
+    /**
+     * 是否启用
+     */
+    private Boolean state;
+
+    /**
+     * 应用范围 1客房 2 pos 3 娱乐
+     */
+    private String applyScope;
+
+    /**
+     * pos 类型值
+     */
+
+    private String posType;
+
+    /**
+     * 娱乐类型值
+     */
+    private String funType;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
+
+    /**
+     * 创建时间
+     */
+    @TableField("createAt")
+    private LocalDateTime createAt;
+
+    /**
+     * 修改时间
+     */
+    @TableField("updateAt")
+    private LocalDateTime updateAt;
+
+    /**
+     * 逻辑删除字段
+     */
+    private Boolean invalid;
+
+
+    public static final String ID = "id";
+
+    public static final String HOTEL_ID = "hotel_id";
+
+    public static final String NAME = "name";
+
+    public static final String PARENT_ID = "parent_id";
+
+    public static final String ISQUICK = "is_quick";
+
+    public static final String STATE = "state";
+
+    public static final String APPLY_SCOPE = "apply_scope";
+
+    public static final String POS_TYPE = "pos_type";
+
+    public static final String FUN_TYPE = "fun_type";
+
+    public static final String SORT = "sort";
+
+    public static final String CREATEAT = "createAt";
+
+    public static final String UPDATEAT = "updateAt";
+
+    public static final String INVALID = "invalid";
+
+    @Override
+    public Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesGoodsUnitMapper.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.rooms.mapper;
+
+import org.jeecg.modules.rooms.entity.CesGoodsUnit;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 商品单位 Mapper 接口
+ * </p>
+ *
+ * @author Claude
+ * @since 2023-03-08
+ */
+public interface CesGoodsUnitMapper extends BaseMapper<CesGoodsUnit> {
+
+}

+ 16 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesStockTypeMapper.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.rooms.mapper;
+
+import org.jeecg.modules.rooms.entity.CesStockType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 商品库存分类表 Mapper 接口
+ * </p>
+ *
+ * @author Claude
+ * @since 2023-03-08
+ */
+public interface CesStockTypeMapper extends BaseMapper<CesStockType> {
+
+}

+ 77 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesGoodsUnitServiceImpl.java

@@ -0,0 +1,77 @@
+package org.jeecg.modules.rooms.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.util.CommonUtils;
+import org.jeecg.modules.rooms.DTO.CesGoodsUnitDto;
+import org.jeecg.modules.rooms.DTO.CesGoodsUnitSearchDto;
+import org.jeecg.modules.rooms.entity.CesGoodsUnit;
+import org.jeecg.modules.rooms.mapper.CesGoodsUnitMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * <p>
+ * 商品单位 服务实现类
+ * </p>
+ *
+ * @author Claude
+ * @since 2023-03-08
+ */
+@Service
+public class CesGoodsUnitServiceImpl extends ServiceImpl<CesGoodsUnitMapper, CesGoodsUnit> implements IService<CesGoodsUnit> {
+    @Resource
+    private CesGoodsUnitMapper cesGoodsUnitMapper;
+
+    /**
+     * 查询接口
+     * @param searchDto
+     * @return
+     */
+    public Result list(CesGoodsUnitSearchDto  searchDto){
+        QueryWrapper<CesGoodsUnit> queryWrapper = new QueryWrapper<>();
+        if(StringUtils.isBlank(searchDto.getName())){
+            queryWrapper.like(CesGoodsUnit.NAME, CommonUtils.escapeChar(searchDto.getName()));
+        }
+        queryWrapper.eq(CesGoodsUnit.HOTEL_ID,searchDto.getHotelId());
+        queryWrapper.orderByDesc(CesGoodsUnit.CREATEAT);
+
+        IPage<CesGoodsUnit> dataPage = cesGoodsUnitMapper.selectPage(new Page<>(searchDto.getPageNo().intValue(),searchDto.getPageSize().intValue()),queryWrapper);
+        Map<String,Object> map = new HashedMap();
+        map.put("records",dataPage.getRecords());
+        map.put("total",dataPage.getTotal());
+        return Result.OK(map);
+    }
+
+    /**
+     * 查询接口
+     * @param dto
+     * @return
+     */
+    public Result create(CesGoodsUnitDto dto){
+       CesGoodsUnit unit =  cesGoodsUnitMapper.selectOne(Wrappers.<CesGoodsUnit>lambdaQuery().eq(CesGoodsUnit::getInvalid,false).eq(CesGoodsUnit::getName,dto.getName()));
+       if(!ObjectUtils.isEmpty(unit)) return Result.error("已存在相同名称的单位!");
+        CesGoodsUnit cesGoodsUnit = new CesGoodsUnit();
+        BeanUtil.copyProperties(dto,cesGoodsUnit);
+        cesGoodsUnit.setCreateAt(LocalDateTime.now());
+        cesGoodsUnit.setUpdateAt(LocalDateTime.now());
+        cesGoodsUnit.setInvalid(false);
+        cesGoodsUnitMapper.insert(cesGoodsUnit);
+        return Result.OK("保存成功!");
+    }
+
+
+}
+

+ 121 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesStockTypeServiceImpl.java

@@ -0,0 +1,121 @@
+package org.jeecg.modules.rooms.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.lang.tree.TreeNode;
+import cn.hutool.core.lang.tree.TreeUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.rooms.DTO.CesStockTypeDto;
+import org.jeecg.modules.rooms.entity.CesStockType;
+import org.jeecg.modules.rooms.mapper.CesStockTypeMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 商品库存分类表 服务实现类
+ * </p>
+ *
+ * @author Claude
+ * @since 2023-03-08
+ */
+@Service
+public class CesStockTypeServiceImpl extends ServiceImpl<CesStockTypeMapper, CesStockType> implements IService<CesStockType> {
+
+    @Resource
+    private CesStockTypeMapper stockTypeMapper;
+    /**
+     * 获取商品库存分类
+     * @param hotelId
+     * @return
+     */
+    public Result tree(String hotelId){
+        List<TreeNode<String>> nodeList = CollUtil.newArrayList();
+        //查询数据
+        List<CesStockType> list = stockTypeMapper.selectList(Wrappers.<CesStockType>lambdaQuery()
+                .eq(CesStockType::getHotelId,hotelId)
+                .eq(CesStockType::getState,true)
+                .eq(CesStockType::getInvalid,false));
+        list.forEach(v -> {
+            nodeList.add(new TreeNode<>(v.getId(),v.getParentId(),v.getName(),0));
+        });
+        if(CollUtil.isEmpty(nodeList)) return Result.OK(new ArrayList<>());
+        List<Tree<String>> treeList = TreeUtil.build(nodeList, "0");
+        return Result.OK(treeList);
+    }
+
+
+    /**
+     * 创建分类
+     * @param stockTypeDto
+     * @return
+     */
+    public Result create(CesStockTypeDto stockTypeDto){
+        QueryWrapper<CesStockType> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(CesStockType.NAME,stockTypeDto.getName());
+        queryWrapper.eq(CesStockType.HOTEL_ID, stockTypeDto.getHotelId());
+        queryWrapper.eq(CesStockType.INVALID,false);
+
+        CesStockType cesStockType = stockTypeMapper.selectOne(queryWrapper);
+        if(!ObjectUtils.isEmpty(cesStockType)) return Result.error("已有相同名称的分类!");
+        CesStockType stockType = new CesStockType();
+        BeanUtil.copyProperties(stockTypeDto,stockType,CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
+        stockType.setCreateAt(LocalDateTime.now());
+        stockType.setUpdateAt(LocalDateTime.now());
+        stockType.setInvalid(false);
+        stockTypeMapper.insert(stockType);
+        return Result.OK("保存成功!");
+    }
+
+
+    /**
+     * 修改分类
+     * @param stockTypeDto
+     * @return
+     */
+    public Result modify(CesStockTypeDto stockTypeDto){
+        CesStockType cesStockType = stockTypeMapper.selectById(stockTypeDto.getId());
+        if(ObjectUtils.isEmpty(cesStockType)) return Result.error("数据未找到!");
+
+        QueryWrapper<CesStockType> queryWrapper = new QueryWrapper<>();
+        queryWrapper.ne(CesStockType.ID,cesStockType.getId());
+        queryWrapper.eq(CesStockType.NAME,stockTypeDto.getName());
+        queryWrapper.eq(CesStockType.HOTEL_ID, stockTypeDto.getHotelId());
+        queryWrapper.eq(CesStockType.INVALID,false);
+
+        CesStockType exit = stockTypeMapper.selectOne(queryWrapper);
+        if(!ObjectUtils.isEmpty(exit)) return Result.error("已有相同名称的分类!");
+
+        //忽略空值 不然会覆盖
+        BeanUtil.copyProperties(stockTypeDto, cesStockType,CopyOptions.create().setIgnoreProperties(CesStockType.ID).setIgnoreError(true));
+        cesStockType.setUpdateAt(LocalDateTime.now());
+        stockTypeMapper.updateById(cesStockType);
+        return Result.OK("修改成功!");
+    }
+
+
+    public Result delete(CesStockTypeDto stockTypeDto){
+        CesStockType cesStockType = stockTypeMapper.selectById(stockTypeDto.getId());
+        if(ObjectUtils.isEmpty(cesStockType)) return Result.error("数据未找到!");
+        cesStockType.setInvalid(true);
+        cesStockType.setUpdateAt(LocalDateTime.now());
+        stockTypeMapper.updateById(cesStockType);
+        return Result.OK("删除成功!");
+    }
+
+
+
+
+
+}