renkang
2025-01-06 e0b7b9effa5b69fbcc71362abd9cf500b2b99f45
客户资料 巡检任务业务
已添加5个文件
已修改19个文件
1276 ■■■■ 文件已修改
server/db/business.yw_outinbound_record.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWarehouseController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwMaterialMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwOutinboundMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwOutinboundRecordMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStockMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWarehouseMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWarehouse.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwOutinboundRecordService.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwOutinboundService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWarehouseService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundRecordServiceImpl.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java 347 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java 192 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.yw_outinbound_record.permissions.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinboundrecord:create', '新建运维出入库信息明细表', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinboundrecord:delete', '删除运维出入库信息明细表', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinboundrecord:update', '修改运维出入库信息明细表', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinboundrecord:query', '查询运维出入库信息明细表', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinboundrecord:exportExcel', '导出运维出入库信息明细表(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -514,6 +514,9 @@
        public static final long EXPIRE_TIME = 7200;
        public static final String INTERNAL_TOKEN ="INTERNAL_TOKEN";
        public static final String COM_OUTBOUND_OUT_KEY = "obout_";
        public static final String COM_OUTBOUND_IN_KEY = "obin_";
        public static final String COM_OUTBOUND_TAKING_KEY = "obtaking_";
        public static final String GOODSORDER_KEY = "ordercode_";
        public static final String ACTIVITY_SIGN_KEY = "actcode_";
@@ -641,6 +644,91 @@
    int otherUnPass = 6;//他人拒绝
}
    //类型 0采购入库 1领用退回 2库存调整入库 3其他入库 4盘盈入库 5领用出库 6仓库出库 7调整出库 8采购出库 9其他出库 10盘亏出库
    public  enum ywOutInType{
        BUY_IN(0, 0),
        USE_RETURN_IN(1, 0),
        STOCK_IN(2, 0),
        OTHER_IN(3, 0),
        TAKING_IN(4, 0),
        USE_OUT(5, 1),
        HOUSE_OUT(6, 1),
        STOCK_OUT(7, 1),
        OTHER_UN_PASS_OUT(8, 1),
        BUY_OUT(9, 1),
        TAKING_OUT(10, 1)
                ;
        // æˆå‘˜å˜é‡
        private int key;
        private int inOut;
        // æž„造方法
        ywOutInType(int key, int inOut) {
            this.inOut = inOut;
            this.key = key;
        }
        // æ™®é€šæ–¹æ³•
        public static Integer getInOutValue(int index) {
            for (ywOutInType c : ywOutInType.values()) {
                if (c.getKey() == index) {
                    return c.getInOut();
                }
            }
            return null;
        }
        // æ™®é€šæ–¹æ³•
        public static ywOutInType getYwOutInType(int index) {
            for (ywOutInType c : ywOutInType.values()) {
                if (c.getKey() == index) {
                    return c;
                }
            }
            return null;
        }
        /**
         * æ ¹æ®å‡ºå…¥åº“类型获取所有的具体类型
         * @param inOutType
         * @return
         */
        public static List<Integer> getAllTypeKey(int inOutType) {
            List<Integer> list = new ArrayList<>();
            for (ywOutInType c : ywOutInType.values()) {
                if (c.getInOut() == inOutType) {
                    list.add(c.getKey());
                }
            }
            return list;
        }
        // get set æ–¹æ³•
        public int getInOut() {
            return inOut;
        }
        public void setInOut(int inOut) {
            this.inOut = inOut;
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
    }
    /**
     * èŽ·å–è½¦ç‰Œç±»åž‹ä¿¡æ¯
     *
server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java
@@ -3,17 +3,19 @@
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.HttpsUtil;
import com.doumee.core.utils.redis.RedisUtil;
import com.doumee.core.wx.WXConstant;
import com.doumee.dao.business.model.YwContract;
import com.doumee.service.business.PlatformJobService;
import com.doumee.service.business.YwContractBillService;
import com.doumee.service.business.YwContractService;
import com.doumee.service.business.YwPatrolSchemeService;
import com.doumee.dao.business.model.YwOutinbound;
import com.doumee.service.business.*;
import com.doumee.service.business.impl.YwOutinboundServiceImpl;
import com.doumee.service.system.SystemDictDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -43,6 +45,12 @@
    @Autowired
    private YwPatrolSchemeService ywPatrolSchemeService;
    @Autowired
    private YwOutinboundService ywOutinboundService;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @ApiOperation("定时处理合同账单编码")
    @GetMapping("/ywDealContractBillCodeTimer")
@@ -67,7 +75,6 @@
    }
    @ApiOperation("定时生成今日巡检任务任务")
    @GetMapping("/ywPatrolSchemeTaskTimer")
    public ApiResponse ywPatrolSchemeTaskTimer() {
@@ -76,4 +83,17 @@
    }
    @ApiOperation("定时更新redis数据")
    @GetMapping("/ywUpdRedisDataTimer")
    public ApiResponse ywUpdRedisDataTimer() {
        //加入redis缓存,入库单总数量
        RedisUtil.addObject(redisTemplate, Constants.RedisKeys.COM_OUTBOUND_IN_KEY,0);
        //加入redis缓存,出库单总数量
        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_OUT_KEY,0);
        //加入redis缓存,盘点单总数量
        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_TAKING_KEY,0);
        return ApiResponse.success("定时更新redis数据");
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java
@@ -87,6 +87,6 @@
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:ywoutinbound:query")
    public ApiResponse findById(@PathVariable Integer id) {
        return ApiResponse.success(ywOutinboundService.findById(id));
        return ApiResponse.success(ywOutinboundService.getDetail(id));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWarehouseController.java
@@ -36,35 +36,36 @@
    @ApiOperation("新建")
    @PostMapping("/create")
    @CloudRequiredPermission("business:ywwarehouse:create")
    public ApiResponse create(@RequestBody YwWarehouse ywWarehouse) {
    public ApiResponse create(@RequestBody YwWarehouse ywWarehouse,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywWarehouse.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(ywWarehouseService.create(ywWarehouse));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:ywwarehouse:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        ywWarehouseService.deleteById(id);
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywWarehouseService.deleteById(id,this.getLoginUser(token));
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @CloudRequiredPermission("business:ywwarehouse:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        ywWarehouseService.deleteByIdInBatch(idList);
        return ApiResponse.success(null);
    }
//
//    @ApiOperation("批量删除")
//    @GetMapping("/delete/batch")
//    @CloudRequiredPermission("business:ywwarehouse:delete")
//    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
//        String [] idArray = ids.split(",");
//        List<Integer> idList = new ArrayList<>();
//        for (String id : idArray) {
//            idList.add(Integer.valueOf(id));
//        }
//        ywWarehouseService.deleteByIdInBatch(idList);
//        return ApiResponse.success(null);
//    }
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:ywwarehouse:update")
    public ApiResponse updateById(@RequestBody YwWarehouse ywWarehouse) {
    public ApiResponse updateById(@RequestBody YwWarehouse ywWarehouse,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywWarehouseService.updateById(ywWarehouse);
        return ApiResponse.success(null);
    }
@@ -72,21 +73,28 @@
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @CloudRequiredPermission("business:ywwarehouse:query")
    public ApiResponse<PageData<YwWarehouse>> findPage (@RequestBody PageWrap<YwWarehouse> pageWrap) {
    public ApiResponse<PageData<YwWarehouse>> findPage (@RequestBody PageWrap<YwWarehouse> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywWarehouseService.findPage(pageWrap));
    }
    @ApiOperation("列表查询")
    @PostMapping("/list")
    @CloudRequiredPermission("business:ywwarehouse:query")
    public ApiResponse<List<YwWarehouse>> findList (@RequestBody YwWarehouse model,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywWarehouseService.findList(model));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:ywwarehouse:exportExcel")
    public void exportExcel (@RequestBody PageWrap<YwWarehouse> pageWrap, HttpServletResponse response) {
    public void exportExcel (@RequestBody PageWrap<YwWarehouse> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ExcelExporter.build(YwWarehouse.class).export(ywWarehouseService.findPage(pageWrap).getRecords(), "运维仓库信息表", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:ywwarehouse:query")
    public ApiResponse findById(@PathVariable Integer id) {
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywWarehouseService.findById(id));
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwMaterialMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.YwMaterial;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 11:05
 */
public interface YwMaterialMapper extends BaseMapper<YwMaterial> {
public interface YwMaterialMapper extends MPJBaseMapper<YwMaterial> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwOutinboundMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.YwOutinbound;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 11:05
 */
public interface YwOutinboundMapper extends BaseMapper<YwOutinbound> {
public interface YwOutinboundMapper extends MPJBaseMapper<YwOutinbound> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwOutinboundRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.dao.business;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.YwOutinboundRecord;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 14:28
 */
public interface YwOutinboundRecordMapper extends MPJBaseMapper<YwOutinboundRecord> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStockMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.YwStock;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 11:05
 */
public interface YwStockMapper extends BaseMapper<YwStock> {
public interface YwStockMapper extends MPJBaseMapper<YwStock> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.YwStocktaking;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 11:05
 */
public interface YwStocktakingMapper extends BaseMapper<YwStocktaking> {
public interface YwStocktakingMapper extends MPJBaseMapper<YwStocktaking> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWarehouseMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.YwWarehouse;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 11:05
 */
public interface YwWarehouseMapper extends BaseMapper<YwWarehouse> {
public interface YwWarehouseMapper extends MPJBaseMapper<YwWarehouse> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
@@ -68,7 +68,7 @@
     //@ExcelColumn(name="图标")
    private String imgurl;
    @ApiModelProperty(value = "类型 0公司类型 1车辆类型 2运维-客户行业分类 3运维-工单分类 4运维-巡检区域 5运维-设备分类 6=客户行业" )
    @ApiModelProperty(value = "类型 0公司类型 1车辆类型 2运维-客户行业分类 3运维-工单分类 4运维-巡检区域 5运维-设备分类 6=客户行业 7=资产分类" )
     //@ExcelColumn(name="类型 0公司类型 1车辆类型")
    private Integer type;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
@@ -1,6 +1,8 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -10,6 +12,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.math.BigDecimal;
import java.util.List;
/**
 * è¿ç»´å‡ºå…¥åº“信息表
@@ -19,7 +22,7 @@
@Data
@ApiModel("运维出入库信息表")
@TableName("`yw_outinbound`")
public class YwOutinbound {
public class YwOutinbound extends LoginUserModel {
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键", example = "1")
@@ -54,7 +57,7 @@
    @ApiModelProperty(value = "仓库编码(关联yw_warehouse)")
    @ExcelColumn(name="仓库编码(关联yw_warehouse)")
    private String warehouseId;
    private Integer warehouseId;
    @ApiModelProperty(value = "物资编码(关联yw_material)", example = "1")
    @ExcelColumn(name="物资编码(关联yw_material)")
@@ -64,8 +67,8 @@
    @ExcelColumn(name="数量")
    private BigDecimal stock;
    @ApiModelProperty(value = "类型 0采购入库 1领用退回 2库存调整 3其他入库 4盘盈入库 5领用出库 6仓库出库 7调整出库 8采购出库 9其他出库 10盘亏出库", example = "1")
    @ExcelColumn(name="类型 0采购入库 1领用退回 2库存调整 3其他入库 4盘盈入库 5领用出库 6仓库出库 7调整出库 8采购出库 9其他出库 10盘亏出库")
    @ApiModelProperty(value = "类型 0采购入库 1领用退回 2调整入库 3其他入库 4盘盈入库 5领用出库 6仓库出库 7调整出库 8采购出库 9其他出库 10盘亏出库", example = "1")
    @ExcelColumn(name="类型 0采购入库 1领用退回 2调整入库 3其他入库 4盘盈入库 5领用出库 6仓库出库 7调整出库 8采购出库 9其他出库 10盘亏出库")
    private Integer type;
    @ApiModelProperty(value = "来源 0手动录入 1系统生成", example = "1")
@@ -85,4 +88,24 @@
    @ExcelColumn(name="状态 0正常")
    private Integer status;
    @ApiModelProperty(value = "单据编号")
    @ExcelColumn(name="单据编号")
    private String code;
    @ApiModelProperty(value = "出入库数据明细", example = "1")
    @TableField(exist = false)
    private List<YwOutinboundRecord> recordList;
    @ApiModelProperty(value = "操作类型:1=出库;0=入库(分页列表查询使用)", example = "1")
    @TableField(exist = false)
    private Integer inOut;
    @ApiModelProperty(value = "仓库名称", example = "1")
    @TableField(exist = false)
    private String warehouseName;
    @ApiModelProperty(value = "操作人名称", example = "1")
    @TableField(exist = false)
    private String createUserName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,138 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.math.BigDecimal;
/**
 * è¿ç»´å‡ºå…¥åº“信息明细表
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 14:28
 */
@Data
@ApiModel("运维出入库信息明细表")
@TableName("`yw_outinbound_record`")
public class YwOutinboundRecord {
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键", example = "1")
    @ExcelColumn(name="主键")
    private Integer id;
    @ApiModelProperty(value = "创建人编码", example = "1")
    @ExcelColumn(name="创建人编码")
    private Integer creator;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
    @ExcelColumn(name="更新人编码")
    private Integer editor;
    @ApiModelProperty(value = "更新时间")
    @ExcelColumn(name="更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date editDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
    @ExcelColumn(name="是否删除0否 1是")
    private Integer isdeleted;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
    private String remark;
    @ApiModelProperty(value = "出入库记录主键", example = "1")
    @ExcelColumn(name="出入库记录主键")
    private Integer outInBoundId;
    @ApiModelProperty(value = "物资编码(关联yw_material)", example = "1")
    @ExcelColumn(name="物资编码(关联yw_material)")
    private Integer materialId;
    @ApiModelProperty(value = "数量", example = "1")
    @ExcelColumn(name="数量")
    private BigDecimal stock;
    @ApiModelProperty(value = "资产编码")
    @TableField(exist = false)
    private String materialCode;
    @ApiModelProperty(value = "资产名称")
    @TableField(exist = false)
    private String materialName;
    @ApiModelProperty(value = "资产条形码")
    @TableField(exist = false)
    private String materialQrcode;
    @ApiModelProperty(value = "资产品牌")
    @TableField(exist = false)
    private String materialBrand;
    @ApiModelProperty(value = "资产单位")
    @TableField(exist = false)
    private String materialUnitName;
    @ApiModelProperty(value = "操作类型:1=出库;0=入库(分页列表查询使用)", example = "1")
    @TableField(exist = false)
    private Integer inOut;
    @ApiModelProperty(value = "仓库主键")
    @TableField(exist = false)
    private Integer warehouseId;
    @ApiModelProperty(value = "仓库名称")
    @TableField(exist = false)
    private String warehouseName;
    @ApiModelProperty(value = "单据日期")
    @TableField(exist = false)
    private Date doneDate;
    @ApiModelProperty(value = "一级分类名称")
    @TableField(exist = false)
    private String categoryParentName;
    @ApiModelProperty(value = "二级分类名称")
    @TableField(exist = false)
    private String categoryName;
    @ApiModelProperty(value = "操作人名称", example = "1")
    @TableField(exist = false)
    private String createUserName;
    @ApiModelProperty(value = "单据编号", example = "1")
    @TableField(exist = false)
    private String code;
    @ApiModelProperty(value = "单据日期 å¼€å§‹ yyyy-MM-dd", example = "1")
    @TableField(exist = false)
    private String doneDateStart;
    @ApiModelProperty(value = "单据日期 ç»“束 yyyy-MM-dd", example = "1")
    @TableField(exist = false)
    private String doneDateEnd;
    @ApiModelProperty(value = "创建日期 å¼€å§‹ yyyy-MM-dd", example = "1")
    @TableField(exist = false)
    private String createDateStart;
    @ApiModelProperty(value = "创建日期 ç»“束 yyyy-MM-dd", example = "1")
    @TableField(exist = false)
    private String createDateEnd;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -54,7 +55,7 @@
    @ApiModelProperty(value = "仓库编码(关联yw_warehouse)")
    @ExcelColumn(name="仓库编码(关联yw_warehouse)")
    private String warehouseId;
    private Integer warehouseId;
    @ApiModelProperty(value = "物资编码(关联yw_material)", example = "1")
    @ExcelColumn(name="物资编码(关联yw_material)")
@@ -64,4 +65,33 @@
    @ExcelColumn(name="数量")
    private BigDecimal stock;
    @ApiModelProperty(value = "资产编码")
    @TableField(exist = false)
    private String materialCode;
    @ApiModelProperty(value = "资产名称")
    @TableField(exist = false)
    private String materialName;
    @ApiModelProperty(value = "资产条形码")
    @TableField(exist = false)
    private String materialQrcode;
    @ApiModelProperty(value = "资产品牌")
    @TableField(exist = false)
    private String materialBrand;
    @ApiModelProperty(value = "资产单位")
    @TableField(exist = false)
    private String materialUnitName;
    @ApiModelProperty(value = "资产规格型号")
    @TableField(exist = false)
    private String materialAttr;
    @ApiModelProperty(value = "仓库名称")
    @TableField(exist = false)
    private String warehouseName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java
@@ -72,6 +72,10 @@
    @ExcelColumn(name="编号")
    private String code;
    @ApiModelProperty(value = "仓库编码(关联yw_warehouse)")
    @ExcelColumn(name="仓库编码(关联yw_warehouse)")
    private Integer warehouseId;
    @ApiModelProperty(value = "开始处理人(关联system_user)", example = "1")
    @ExcelColumn(name="开始处理人(关联system_user)")
    private Integer dealUserId;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWarehouse.java
@@ -1,6 +1,8 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -18,7 +20,7 @@
@Data
@ApiModel("运维仓库信息表")
@TableName("`yw_warehouse`")
public class YwWarehouse {
public class YwWarehouse  extends LoginUserModel {
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键", example = "1")
@@ -57,8 +59,7 @@
    @ApiModelProperty(value = "名称")
    @ExcelColumn(name="名称")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date name;
    private String name;
    @ApiModelProperty(value = "位置")
    @ExcelColumn(name="位置")
@@ -76,4 +77,9 @@
    @ExcelColumn(name="排序码")
    private Integer sortnum;
    @ApiModelProperty(value = "负责人名称", example = "1")
    @TableField(exist = false)
    private String userName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwOutinboundRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.doumee.service.business;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwOutinboundRecord;
import java.util.List;
/**
 * è¿ç»´å‡ºå…¥åº“信息明细表Service定义
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 14:28
 */
public interface YwOutinboundRecordService {
    /**
     * åˆ›å»º
     *
     * @param ywOutinboundRecord å®žä½“对象
     * @return Integer
     */
    Integer create(YwOutinboundRecord ywOutinboundRecord);
    /**
     * ä¸»é”®åˆ é™¤
     *
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    /**
     * åˆ é™¤
     *
     * @param ywOutinboundRecord å®žä½“对象
     */
    void delete(YwOutinboundRecord ywOutinboundRecord);
    /**
     * æ‰¹é‡ä¸»é”®åˆ é™¤
     *
     * @param ids ä¸»é”®é›†
     */
    void deleteByIdInBatch(List<Integer> ids);
    /**
     * ä¸»é”®æ›´æ–°
     *
     * @param ywOutinboundRecord å®žä½“对象
     */
    void updateById(YwOutinboundRecord ywOutinboundRecord);
    /**
     * æ‰¹é‡ä¸»é”®æ›´æ–°
     *
     * @param ywOutinboundRecords å®žä½“集
     */
    void updateByIdInBatch(List<YwOutinboundRecord> ywOutinboundRecords);
    /**
     * ä¸»é”®æŸ¥è¯¢
     *
     * @param id ä¸»é”®
     * @return YwOutinboundRecord
     */
    YwOutinboundRecord findById(Integer id);
    /**
     * æ¡ä»¶æŸ¥è¯¢å•条记录
     *
     * @param ywOutinboundRecord å®žä½“对象
     * @return YwOutinboundRecord
     */
    YwOutinboundRecord findOne(YwOutinboundRecord ywOutinboundRecord);
    /**
     * æ¡ä»¶æŸ¥è¯¢
     *
     * @param ywOutinboundRecord å®žä½“对象
     * @return List<YwOutinboundRecord>
     */
    List<YwOutinboundRecord> findList(YwOutinboundRecord ywOutinboundRecord);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<YwOutinboundRecord>
     */
    PageData<YwOutinboundRecord> findPage(PageWrap<YwOutinboundRecord> pageWrap);
    /**
     * æ¡ä»¶ç»Ÿè®¡
     *
     * @param ywOutinboundRecord å®žä½“对象
     * @return long
     */
    long count(YwOutinboundRecord ywOutinboundRecord);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwOutinboundService.java
@@ -94,4 +94,6 @@
     * @return long
     */
    long count(YwOutinbound ywOutinbound);
    YwOutinbound getDetail(Integer id);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWarehouseService.java
@@ -1,5 +1,6 @@
package com.doumee.service.business;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwWarehouse;
@@ -25,7 +26,7 @@
     *
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    void deleteById(Integer id, LoginUserInfo loginUserInfo);
    /**
     * åˆ é™¤
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
package com.doumee.service.business.impl;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwOutinboundRecordMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwOutinboundRecordService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
/**
 * è¿ç»´å‡ºå…¥åº“信息明细表Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 14:28
 */
@Service
public class YwOutinboundRecordServiceImpl implements YwOutinboundRecordService {
    @Autowired
    private YwOutinboundRecordMapper ywOutinboundRecordMapper;
    @Override
    public Integer create(YwOutinboundRecord ywOutinboundRecord) {
        ywOutinboundRecordMapper.insert(ywOutinboundRecord);
        return ywOutinboundRecord.getId();
    }
    @Override
    public void deleteById(Integer id) {
        ywOutinboundRecordMapper.deleteById(id);
    }
    @Override
    public void delete(YwOutinboundRecord ywOutinboundRecord) {
        UpdateWrapper<YwOutinboundRecord> deleteWrapper = new UpdateWrapper<>(ywOutinboundRecord);
        ywOutinboundRecordMapper.delete(deleteWrapper);
    }
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        ywOutinboundRecordMapper.deleteBatchIds(ids);
    }
    @Override
    public void updateById(YwOutinboundRecord ywOutinboundRecord) {
        ywOutinboundRecordMapper.updateById(ywOutinboundRecord);
    }
    @Override
    public void updateByIdInBatch(List<YwOutinboundRecord> ywOutinboundRecords) {
        if (CollectionUtils.isEmpty(ywOutinboundRecords)) {
            return;
        }
        for (YwOutinboundRecord ywOutinboundRecord: ywOutinboundRecords) {
            this.updateById(ywOutinboundRecord);
        }
    }
    @Override
    public YwOutinboundRecord findById(Integer id) {
        return ywOutinboundRecordMapper.selectById(id);
    }
    @Override
    public YwOutinboundRecord findOne(YwOutinboundRecord ywOutinboundRecord) {
        QueryWrapper<YwOutinboundRecord> wrapper = new QueryWrapper<>(ywOutinboundRecord);
        return ywOutinboundRecordMapper.selectOne(wrapper);
    }
    @Override
    public List<YwOutinboundRecord> findList(YwOutinboundRecord ywOutinboundRecord) {
        QueryWrapper<YwOutinboundRecord> wrapper = new QueryWrapper<>(ywOutinboundRecord);
        return ywOutinboundRecordMapper.selectList(wrapper);
    }
    @Override
    public PageData<YwOutinboundRecord> findPage(PageWrap<YwOutinboundRecord> pageWrap) {
        IPage<YwOutinboundRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<YwOutinboundRecord> queryWrapper = new MPJLambdaWrapper<YwOutinboundRecord>();
        Utils.MP.blankToNull(pageWrap.getModel());
        YwOutinboundRecord model = pageWrap.getModel();
        if(Objects.isNull(model)||Objects.isNull(model.getInOut())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        List<Integer> typeList  = Constants.ywOutInType.getAllTypeKey(model.getInOut());
        queryWrapper.selectAll(YwOutinboundRecord.class)
                .selectAs(SystemUser::getRealname,YwOutinboundRecord::getCreateUserName)
                .selectAs(YwOutinbound::getCode,YwOutinboundRecord::getCode)
                .selectAs(YwWarehouse::getName,YwOutinboundRecord::getWarehouseName)
                .selectAs(YwMaterial::getCode,YwOutinboundRecord::getMaterialCode)
                .selectAs(YwMaterial::getName,YwOutinboundRecord::getMaterialName)
                .selectAs(YwMaterial::getQrcode,YwOutinboundRecord::getMaterialQrcode)
                .selectAs(YwMaterial::getBrand,YwOutinboundRecord::getMaterialBrand)
                .selectAs(YwMaterial::getUnitName,YwOutinboundRecord::getMaterialUnitName)
                .select(" c.name ",YwOutinboundRecord::getCategoryParentName)
                .select(" c1.name ",YwOutinboundRecord::getCategoryName)
                .leftJoin(YwOutinbound.class,YwOutinbound::getId,YwOutinboundRecord::getOutInBoundId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwOutinbound::getCreator)
                .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwOutinbound::getWarehouseId)
                .leftJoin(YwMaterial.class,YwMaterial::getId,YwOutinboundRecord::getMaterialId)
                .leftJoin("category c on t4.PARENT_CATE_ID = c.id")
                .leftJoin("category c1 on t4.CATE_ID = c1.id")
                .like(StringUtils.isNotBlank(model.getCode()),YwOutinbound::getCode,model.getCode())
                .like(StringUtils.isNotBlank(model.getMaterialCode()),YwMaterial::getCode,model.getMaterialCode())
                .eq(Objects.nonNull(model.getWarehouseId()),YwOutinbound::getWarehouseId,model.getWarehouseId())
                .in(Objects.nonNull(model.getInOut()),YwOutinbound::getType,typeList)
                .ge(StringUtils.isNotBlank(model.getDoneDateStart()),YwOutinbound::getDoneDate,model.getDoneDateStart()+" 00:00:00")
                .le(StringUtils.isNotBlank(model.getDoneDateEnd()),YwOutinbound::getDoneDate,model.getDoneDateEnd()+" 23:59:59")
                .ge(StringUtils.isNotBlank(model.getCreateDateStart()),YwOutinbound::getCreateDate,model.getCreateDateStart()+" 00:00:00")
                .le(StringUtils.isNotBlank(model.getCreateDateEnd()),YwOutinbound::getCreateDate,model.getCreateDateEnd()+" 23:59:59")
                .orderByDesc(YwOutinbound::getCreateDate)
        ;
        IPage iPage = ywOutinboundRecordMapper.selectJoinPage(page,YwOutinboundRecord.class,queryWrapper);
        return PageData.from(iPage);
    }
    @Override
    public long count(YwOutinboundRecord ywOutinboundRecord) {
        QueryWrapper<YwOutinboundRecord> wrapper = new QueryWrapper<>(ywOutinboundRecord);
        return ywOutinboundRecordMapper.selectCount(wrapper);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
@@ -1,20 +1,34 @@
package com.doumee.service.business.impl;
import com.alibaba.druid.sql.visitor.functions.Concat;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwOutinboundMapper;
import com.doumee.dao.business.model.YwOutinbound;
import com.doumee.core.utils.redis.RedisUtil;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwOutinboundService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
 * è¿ç»´å‡ºå…¥åº“信息表Service实现
@@ -27,11 +41,136 @@
    @Autowired
    private YwOutinboundMapper ywOutinboundMapper;
    @Autowired
    private YwMaterialMapper ywMaterialMapper;
    @Autowired
    private YwOutinboundRecordMapper ywOutinboundRecordMapper;
    @Autowired
    private YwStockMapper ywStockMapper;
    @Autowired
    private YwWarehouseMapper ywWarehouseMapper;
    @Autowired
    private YwStocktakingMapper ywStocktakingMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Override
    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
    public Integer create(YwOutinbound ywOutinbound) {
        List<YwOutinboundRecord> recordList = this.verifyData(ywOutinbound);
        YwWarehouse ywWarehouse = ywWarehouseMapper.selectById(ywOutinbound.getWarehouseId());
        if(Objects.isNull(ywWarehouse)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到仓库信息");
        }
        LoginUserInfo loginUserInfo = ywOutinbound.getLoginUserInfo();
        //根据操作类型进行判断是入库/出库
        Constants.ywOutInType ywOutInType = Constants.ywOutInType.getYwOutInType(ywOutinbound.getType());
        if(Objects.isNull(ywOutInType)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未匹配到出入库类型");
        }
        //生成出入库单据编号
        ywOutinbound.setCode(getNextInOutCode(ywOutInType.getInOut()));
        ywOutinbound.setCreator(loginUserInfo.getId());
        ywOutinbound.setCreateDate(new Date());
        ywOutinbound.setOrigin(Constants.ZERO);
        ywOutinboundMapper.insert(ywOutinbound);
        for (YwOutinboundRecord ywOutinboundRecord:recordList) {
            ywOutinboundRecord.setCreator(loginUserInfo.getId());
            ywOutinboundRecord.setCreateDate(new Date());
            ywOutinboundRecord.setIsdeleted(Constants.ZERO);
        }
        ywOutinboundRecordMapper.insert(recordList);
        //更新库存信息
        this.dealStockData(ywOutinbound,recordList,ywOutInType.getInOut());
        return ywOutinbound.getId();
    }
    public List<YwOutinboundRecord> verifyData(YwOutinbound ywOutinbound){
        if(Objects.isNull(ywOutinbound)
                || Objects.isNull(ywOutinbound.getType())
                || (Objects.nonNull(ywOutinbound.getType()) && (!(ywOutinbound.getType() == Constants.ZERO || ywOutinbound.getType() == Constants.ONE)))
                || Objects.isNull(ywOutinbound.getWarehouseId())
                || Objects.isNull(ywOutinbound.getDoneDate())
                || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywOutinbound.getRecordList())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        List<YwOutinboundRecord> recordList = ywOutinbound.getRecordList();
        for (YwOutinboundRecord ywOutinboundRecord:recordList) {
            if(Objects.isNull(ywOutinboundRecord)
                    ||Objects.isNull(ywOutinboundRecord.getMaterialId())
                    ||Objects.isNull(ywOutinboundRecord.getStock())
                    ||ywOutinboundRecord.getStock().compareTo(BigDecimal.ZERO)<=Constants.ZERO
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
        }
        //判断当前是否存在进行中的盘点单
        if(ywStocktakingMapper.selectCount(new QueryWrapper<YwStocktaking>().lambda().eq(YwStocktaking::getIsdeleted,Constants.ZERO)
                        .eq(YwStocktaking::getWarehouseId,ywOutinbound.getWarehouseId())
                .eq(YwStocktaking::getStatus,Constants.ONE))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在进行中的盘点单,无法进行出入库操作");
        };
        //判断是否存在相同数据
        Set<Integer> materialIds = new HashSet<Integer>(recordList.stream().map(i->i.getMaterialId()).collect(Collectors.toList()));
        if(materialIds.size() != recordList.size()){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在相同资产信息,请检查数据!");
        }
        if(ywMaterialMapper.selectCount(new QueryWrapper<YwMaterial>().lambda().in(YwMaterial::getId,materialIds))!=recordList.size()){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"资产信息存在异常,请检查数据!");
        }
        return recordList;
    }
    public void dealStockData(YwOutinbound ywOutinbound,List<YwOutinboundRecord> recordList,Integer inOut){
        for (YwOutinboundRecord ywOutinboundRecord:recordList) {
            YwStock ywStock = ywStockMapper.selectOne(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO).eq(YwStock::getWarehouseId,ywOutinbound.getWarehouseId()).eq(YwStock::getMaterialId,ywOutinboundRecord.getMaterialId()));
            if(Constants.equalsInteger(inOut,Constants.ZERO)){
                //入库
                if(Objects.isNull(ywStock)){
                    ywStock.setStock(ywOutinboundRecord.getStock());
                    ywStock.setWarehouseId(ywOutinbound.getWarehouseId());
                    ywStock.setMaterialId(ywOutinboundRecord.getMaterialId());
                    ywStock.setCreateDate(new Date());
                    ywStock.setCreator(ywOutinbound.getCreator());
                    ywStockMapper.insert(ywStock);
                }else{
                    ywStockMapper.update(new UpdateWrapper<YwStock>().lambda()
                            .set(YwStock::getStock," ( stock + " + ywStock.getStock() + " )")
                            .set(YwStock::getEditDate, DateUtil.getCurrDateTime())
                            .set(YwStock::getEditor, ywOutinbound.getCreator())
                            .eq(YwStock::getId,ywStock.getId())
                    );
                }
            }else{
                YwMaterial ywMaterial = ywMaterialMapper.selectById(ywOutinboundRecord.getMaterialId());
                //出库
                if(Objects.isNull(ywStock) || ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) < Constants.ZERO){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ywMaterial.getName() + "库存不足,请刷新重试");
                }else if(ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) == Constants.ZERO){
                    ywStockMapper.deleteById(ywStock.getId());
                }else{
                    ywStockMapper.update(new UpdateWrapper<YwStock>().lambda()
                            .set(YwStock::getStock," ( stock  - " + ywStock.getStock() + " )")
                            .set(YwStock::getEditDate, DateUtil.getCurrDateTime())
                            .set(YwStock::getEditor, ywOutinbound.getCreator())
                            .eq(YwStock::getId,ywStock.getId())
                    );
                }
            }
        }
    }
    @Override
    public void deleteById(Integer id) {
@@ -83,60 +222,45 @@
        QueryWrapper<YwOutinbound> wrapper = new QueryWrapper<>(ywOutinbound);
        return ywOutinboundMapper.selectList(wrapper);
    }
    @Override
    public YwOutinbound getDetail(Integer id) {
        MPJLambdaWrapper<YwOutinbound> queryWrapper = new MPJLambdaWrapper<YwOutinbound>();
        queryWrapper.selectAll(YwOutinbound.class)
                .selectAs(SystemUser::getRealname,YwOutinbound::getCreateUserName)
                .selectAs(YwWarehouse::getName,YwOutinbound::getWarehouseName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwOutinbound::getCreator)
                .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwOutinbound::getWarehouseId)
                .eq(YwOutinbound::getId,id)
                .last(" limit 1");
        YwOutinbound ywOutinbound = ywOutinboundMapper.selectJoinOne(YwOutinbound.class,queryWrapper);
        List<Integer> idList = new ArrayList<>();
        idList.add(id);
        ywOutinbound.setRecordList(this.getRecordDetailData(idList));
        return ywOutinbound;
    }
    @Override
    public PageData<YwOutinbound> findPage(PageWrap<YwOutinbound> pageWrap) {
        IPage<YwOutinbound> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<YwOutinbound> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<YwOutinbound> queryWrapper = new MPJLambdaWrapper<YwOutinbound>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getId, pageWrap.getModel().getId());
        YwOutinbound model = pageWrap.getModel();
        if(Objects.isNull(model)||Objects.isNull(model.getInOut())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(YwOutinbound::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(YwOutinbound::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(YwOutinbound::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(YwOutinbound::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getWarehouseId() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getWarehouseId, pageWrap.getModel().getWarehouseId());
        }
        if (pageWrap.getModel().getMaterialId() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getMaterialId, pageWrap.getModel().getMaterialId());
        }
        if (pageWrap.getModel().getStock() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getStock, pageWrap.getModel().getStock());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getOrigin() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getOrigin, pageWrap.getModel().getOrigin());
        }
        if (pageWrap.getModel().getContent() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getContent, pageWrap.getModel().getContent());
        }
        if (pageWrap.getModel().getDoneDate() != null) {
            queryWrapper.lambda().ge(YwOutinbound::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getDoneDate()));
            queryWrapper.lambda().le(YwOutinbound::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getDoneDate()));
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(YwOutinbound::getStatus, pageWrap.getModel().getStatus());
        }
        List<Integer> typeList  = Constants.ywOutInType.getAllTypeKey(model.getInOut());
        queryWrapper.selectAll(YwOutinbound.class)
                .selectAs(SystemUser::getRealname,YwOutinbound::getCreateUserName)
                .selectAs(YwWarehouse::getName,YwOutinbound::getWarehouseName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwOutinbound::getCreator)
                .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwOutinbound::getWarehouseId)
                .like(StringUtils.isNotBlank(model.getCode()),YwOutinbound::getCode,model.getCode())
                .eq(Objects.nonNull(model.getType()),YwOutinbound::getType,model.getType())
                .eq(Objects.nonNull(model.getWarehouseId()),YwOutinbound::getWarehouseId,model.getWarehouseId())
                .in(Objects.nonNull(model.getInOut()),YwOutinbound::getType,typeList)
        ;
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
@@ -144,12 +268,129 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(ywOutinboundMapper.selectPage(page, queryWrapper));
        IPage iPage = ywOutinboundMapper.selectJoinPage(page,YwOutinbound.class,queryWrapper);
        if(Objects.nonNull(iPage.getRecords())){
            iPage.setRecords(this.getDetailData(iPage.getRecords()));
        }
        return PageData.from(iPage);
    }
    public List<YwOutinbound> getDetailData(List<YwOutinbound> ywOutinboundList){
        List<Integer> idList = ywOutinboundList.stream().map(i->i.getId()).collect(Collectors.toList());
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(idList)){
           List<YwOutinboundRecord> ywOutinboundRecordList =  this.getRecordDetailData(idList);
           if(CollectionUtils.isEmpty(ywOutinboundRecordList)){
               return ywOutinboundList;
           }
           for (YwOutinbound ywOutinbound:ywOutinboundList) {
                ywOutinbound.setRecordList(
                        ywOutinboundRecordList.stream().filter(i->Constants.equalsInteger(i.getOutInBoundId(),ywOutinbound.getId())).collect(Collectors.toList())
                );
            }
        }
        return ywOutinboundList;
    }
    public List<YwOutinboundRecord> getRecordDetailData(List<Integer> outinBoundIdList){
        List<YwOutinboundRecord> ywOutinboundRecordList =  ywOutinboundRecordMapper.selectJoinList(YwOutinboundRecord.class,
                new MPJLambdaWrapper<YwOutinboundRecord>()
                        .selectAll(YwOutinboundRecord.class)
                        .selectAs(YwMaterial::getCode,YwOutinboundRecord::getMaterialCode)
                        .selectAs(YwMaterial::getName,YwOutinboundRecord::getMaterialName)
                        .selectAs(YwMaterial::getQrcode,YwOutinboundRecord::getMaterialQrcode)
                        .selectAs(YwMaterial::getBrand,YwOutinboundRecord::getMaterialBrand)
                        .selectAs(YwMaterial::getUnitName,YwOutinboundRecord::getMaterialUnitName)
                        .leftJoin(YwMaterial.class,YwMaterial::getId,YwOutinboundRecord::getMaterialId)
                        .eq(YwOutinboundRecord::getIsdeleted,Constants.ZERO)
                        .in(YwOutinboundRecord::getOutInBoundId,outinBoundIdList)
        );
        return ywOutinboundRecordList;
    }
//    @Override
//    public PageData<YwOutinbound> findPage(PageWrap<YwOutinbound> pageWrap) {
//        IPage<YwOutinbound> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
//
//        QueryWrapper<YwOutinbound> queryWrapper = new QueryWrapper<>();
//        Utils.MP.blankToNull(pageWrap.getModel());
//        if (pageWrap.getModel().getId() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getId, pageWrap.getModel().getId());
//        }
//        if (pageWrap.getModel().getCreator() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getCreator, pageWrap.getModel().getCreator());
//        }
//        if (pageWrap.getModel().getCreateDate() != null) {
//            queryWrapper.lambda().ge(YwOutinbound::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
//            queryWrapper.lambda().le(YwOutinbound::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
//        }
//        if (pageWrap.getModel().getEditor() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getEditor, pageWrap.getModel().getEditor());
//        }
//        if (pageWrap.getModel().getEditDate() != null) {
//            queryWrapper.lambda().ge(YwOutinbound::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
//            queryWrapper.lambda().le(YwOutinbound::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
//        }
//        if (pageWrap.getModel().getIsdeleted() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getIsdeleted, pageWrap.getModel().getIsdeleted());
//        }
//        if (pageWrap.getModel().getRemark() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getRemark, pageWrap.getModel().getRemark());
//        }
//        if (pageWrap.getModel().getWarehouseId() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getWarehouseId, pageWrap.getModel().getWarehouseId());
//        }
//        if (pageWrap.getModel().getMaterialId() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getMaterialId, pageWrap.getModel().getMaterialId());
//        }
//        if (pageWrap.getModel().getStock() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getStock, pageWrap.getModel().getStock());
//        }
//        if (pageWrap.getModel().getType() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getType, pageWrap.getModel().getType());
//        }
//        if (pageWrap.getModel().getOrigin() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getOrigin, pageWrap.getModel().getOrigin());
//        }
//        if (pageWrap.getModel().getContent() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getContent, pageWrap.getModel().getContent());
//        }
//        if (pageWrap.getModel().getDoneDate() != null) {
//            queryWrapper.lambda().ge(YwOutinbound::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getDoneDate()));
//            queryWrapper.lambda().le(YwOutinbound::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getDoneDate()));
//        }
//        if (pageWrap.getModel().getStatus() != null) {
//            queryWrapper.lambda().eq(YwOutinbound::getStatus, pageWrap.getModel().getStatus());
//        }
//        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
//            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
//                queryWrapper.orderByDesc(sortData.getProperty());
//            } else {
//                queryWrapper.orderByAsc(sortData.getProperty());
//            }
//        }
//        return PageData.from(ywOutinboundMapper.selectPage(page, queryWrapper));
//    }
    @Override
    public long count(YwOutinbound ywOutinbound) {
        QueryWrapper<YwOutinbound> wrapper = new QueryWrapper<>(ywOutinbound);
        return ywOutinboundMapper.selectCount(wrapper);
    }
    public synchronized String  getNextInOutCode(Integer inOut){
        String prefix =  Constants.equalsInteger(inOut,0)?"RK-":"CK-" + DateUtil.getDate(new Date(),"yyyyMMdd") +"-";
        Integer countNum  = RedisUtil.getObject(redisTemplate,
                Constants.equalsInteger(inOut,0)?Constants.RedisKeys.COM_OUTBOUND_OUT_KEY:Constants.RedisKeys.COM_OUTBOUND_IN_KEY,
                Integer.class);
        countNum = Constants.formatIntegerNum(countNum)+1;
        //更新缓存
        RedisUtil.addObject(redisTemplate,Constants.equalsInteger(inOut,0)?Constants.RedisKeys.COM_OUTBOUND_OUT_KEY:Constants.RedisKeys.COM_OUTBOUND_IN_KEY,countNum);
        String nextIndex =Integer.toString( countNum );
        return prefix + StringUtils.leftPad(nextIndex,4,"0");
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java
@@ -4,17 +4,21 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwStockMapper;
import com.doumee.dao.business.model.YwStock;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwStockService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
/**
 * è¿ç»´åº“存信息表Service实现
@@ -87,50 +91,36 @@
    @Override
    public PageData<YwStock> findPage(PageWrap<YwStock> pageWrap) {
        IPage<YwStock> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<YwStock> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<YwStock> queryWrapper = new MPJLambdaWrapper<YwStock>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(YwStock::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(YwStock::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(YwStock::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(YwStock::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(YwStock::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(YwStock::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(YwStock::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(YwStock::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(YwStock::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getWarehouseId() != null) {
            queryWrapper.lambda().eq(YwStock::getWarehouseId, pageWrap.getModel().getWarehouseId());
        }
        if (pageWrap.getModel().getMaterialId() != null) {
            queryWrapper.lambda().eq(YwStock::getMaterialId, pageWrap.getModel().getMaterialId());
        }
        if (pageWrap.getModel().getStock() != null) {
            queryWrapper.lambda().eq(YwStock::getStock, pageWrap.getModel().getStock());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(ywStockMapper.selectPage(page, queryWrapper));
        YwStock model = pageWrap.getModel();
        queryWrapper.selectAll(YwStock.class)
                .selectAs(YwWarehouse::getName,YwStock::getWarehouseName)
                .selectAs(YwMaterial::getCode,YwStock::getMaterialCode)
                .selectAs(YwMaterial::getName,YwStock::getMaterialName)
                .selectAs(YwMaterial::getQrcode,YwStock::getMaterialQrcode)
                .selectAs(YwMaterial::getBrand,YwStock::getMaterialBrand)
                .selectAs(YwMaterial::getUnitName,YwStock::getMaterialUnitName)
                .selectAs(YwMaterial::getAttr,YwStock::getMaterialAttr)
                .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwStock::getWarehouseId)
                .leftJoin(YwMaterial.class,YwMaterial::getId,YwStock::getMaterialId)
                .eq(Objects.nonNull(model.getWarehouseId()),YwOutinbound::getWarehouseId,model.getWarehouseId())
                .and(StringUtils.isNotBlank(model.getMaterialCode()),i->i.like(YwMaterial::getName,model.getMaterialCode()).or().like(YwMaterial::getName,model.getMaterialCode()))
                .like(StringUtils.isNotBlank(model.getMaterialCode()),YwMaterial::getCode,model.getMaterialCode())
                .like(StringUtils.isNotBlank(model.getMaterialAttr()),YwMaterial::getAttr,model.getMaterialAttr())
                .orderByAsc(YwMaterial::getCode)
        ;
        IPage iPage = ywStockMapper.selectJoinPage(page,YwStock.class,queryWrapper);
        return PageData.from(iPage);
    }
    @Override
    public long count(YwStock ywStock) {
        QueryWrapper<YwStock> wrapper = new QueryWrapper<>(ywStock);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
@@ -1,20 +1,34 @@
package com.doumee.service.business.impl;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwStockMapper;
import com.doumee.dao.business.YwWarehouseMapper;
import com.doumee.dao.business.model.YwWarehouse;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwWarehouseService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.java.Log;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * è¿ç»´ä»“库信息表Service实现
@@ -27,15 +41,47 @@
    @Autowired
    private YwWarehouseMapper ywWarehouseMapper;
    @Autowired
    private YwStockMapper ywStockMapper;
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer create(YwWarehouse ywWarehouse) {
        if(Objects.isNull(ywWarehouse)
            || StringUtils.isBlank(ywWarehouse.getName())
            || Objects.isNull(ywWarehouse.getUserId())
            || Objects.isNull(ywWarehouse.getStatus())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(ywWarehouseMapper.selectCount(new QueryWrapper<YwWarehouse>().lambda().eq(YwWarehouse::getIsdeleted,Constants.ZERO).eq(YwWarehouse::getName,ywWarehouse.getName())) > Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"仓库名称已存在!");
        }
        LoginUserInfo loginUserInfo = ywWarehouse.getLoginUserInfo();
        ywWarehouse.setCreator(loginUserInfo.getId());
        ywWarehouse.setCreateDate(new Date());
        ywWarehouse.setIsdeleted(Constants.ZERO);
        ywWarehouseMapper.insert(ywWarehouse);
        return ywWarehouse.getId();
    }
    @Override
    public void deleteById(Integer id) {
        ywWarehouseMapper.deleteById(id);
    public void deleteById(Integer id, LoginUserInfo loginUserInfo) {
        YwWarehouse ywWarehouse = ywWarehouseMapper.selectById(id);
        if(Objects.isNull(ywWarehouse)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        //判断数据下是否存在资产数据
        if(ywStockMapper.selectCount(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO)
                .gt(YwStock::getStock,Constants.ZERO)
                .eq(YwStock::getWarehouseId,ywWarehouse.getId()))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前仓库内有库存的资产,不可删除");
        };
        ywWarehouseMapper.update(new UpdateWrapper<YwWarehouse>().lambda()
                .set(YwWarehouse::getEditDate, DateUtil.getCurrDateTime())
                .set(YwWarehouse::getEditor, loginUserInfo.getId())
                .set(YwWarehouse::getIsdeleted,Constants.ONE)
                .eq(YwWarehouse::getId,ywWarehouse.getId()));
    }
    @Override
@@ -53,7 +99,23 @@
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void updateById(YwWarehouse ywWarehouse) {
        if(Objects.isNull(ywWarehouse)
                || StringUtils.isBlank(ywWarehouse.getName())
                || Objects.isNull(ywWarehouse.getUserId())
                || Objects.isNull(ywWarehouse.getStatus())
                || Objects.isNull(ywWarehouse.getId())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(ywWarehouseMapper.selectCount(new QueryWrapper<YwWarehouse>().lambda().ne(YwWarehouse::getId,ywWarehouse.getId()).eq(YwWarehouse::getIsdeleted,Constants.ZERO).eq(YwWarehouse::getName,ywWarehouse.getName())) > Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"仓库名称已存在!");
        }
        LoginUserInfo loginUserInfo = ywWarehouse.getLoginUserInfo();
        ywWarehouse.setEditor(loginUserInfo.getId());
        ywWarehouse.setEditDate(new Date());
        ywWarehouse.setIsdeleted(Constants.ZERO);
        ywWarehouseMapper.updateById(ywWarehouse);
    }
@@ -79,58 +141,30 @@
    }
    @Override
    public List<YwWarehouse> findList(YwWarehouse ywWarehouse) {
        QueryWrapper<YwWarehouse> wrapper = new QueryWrapper<>(ywWarehouse);
        return ywWarehouseMapper.selectList(wrapper);
    public List<YwWarehouse> findList(YwWarehouse model) {
        MPJLambdaWrapper<YwWarehouse> queryWrapper = new MPJLambdaWrapper<YwWarehouse>();
        queryWrapper.selectAll(YwWarehouse.class)
                .eq(Objects.nonNull(model.getStatus()),YwWarehouse::getStatus,model.getStatus())
                .eq(YwWarehouse::getIsdeleted,Constants.ZERO)
                .eq(YwWarehouse::getStatus,Constants.ZERO)
                .orderByAsc(YwWarehouse::getSortnum)
        ;
        return ywWarehouseMapper.selectList(queryWrapper);
    }
    @Override
    public PageData<YwWarehouse> findPage(PageWrap<YwWarehouse> pageWrap) {
        IPage<YwWarehouse> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<YwWarehouse> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<YwWarehouse> queryWrapper = new MPJLambdaWrapper<YwWarehouse>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(YwWarehouse::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(YwWarehouse::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(YwWarehouse::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(YwWarehouse::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().ge(YwWarehouse::getName, Utils.Date.getStart(pageWrap.getModel().getName()));
            queryWrapper.lambda().le(YwWarehouse::getName, Utils.Date.getEnd(pageWrap.getModel().getName()));
        }
        if (pageWrap.getModel().getPosition() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getPosition, pageWrap.getModel().getPosition());
        }
        if (pageWrap.getModel().getCode() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getCode, pageWrap.getModel().getCode());
        }
        if (pageWrap.getModel().getUserId() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getUserId, pageWrap.getModel().getUserId());
        }
        if (pageWrap.getModel().getSortnum() != null) {
            queryWrapper.lambda().eq(YwWarehouse::getSortnum, pageWrap.getModel().getSortnum());
        }
        YwWarehouse model = pageWrap.getModel();
        queryWrapper.selectAll(YwWarehouse.class)
                .selectAs(SystemUser::getRealname, YwWarehouse::getUserName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwWarehouse::getUserId)
                .eq(Objects.nonNull(model.getStatus()),YwWarehouse::getStatus,model.getStatus())
                .like(StringUtils.isNotBlank(model.getName()),YwWarehouse::getName,model.getName())
                .eq(YwWarehouse::getIsdeleted,Constants.ZERO)
        ;
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
@@ -138,9 +172,65 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(ywWarehouseMapper.selectPage(page, queryWrapper));
        IPage iPage = ywWarehouseMapper.selectJoinPage(page,YwWarehouse.class,queryWrapper);
        return PageData.from(iPage);
    }
//    @Override
//    public PageData<YwWarehouse> findPage(PageWrap<YwWarehouse> pageWrap) {
//        IPage<YwWarehouse> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
//        QueryWrapper<YwWarehouse> queryWrapper = new QueryWrapper<>();
//        Utils.MP.blankToNull(pageWrap.getModel());
//
//        if (pageWrap.getModel().getId() != null) {
//            queryWrapper.lambda().eq(YwWarehouse::getId, pageWrap.getModel().getId());
//        }
//        if (pageWrap.getModel().getCreator() != null) {
//            queryWrapper.lambda().eq(YwWarehouse::getCreator, pageWrap.getModel().getCreator());
//        }
//        if (pageWrap.getModel().getCreateDate() != null) {
//            queryWrapper.lambda().ge(YwWarehouse::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
//            queryWrapper.lambda().le(YwWarehouse::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
//        }
//        if (pageWrap.getModel().getEditor() != null) {
//            queryWrapper.lambda().eq(YwWarehouse::getEditor, pageWrap.getModel().getEditor());
//        }
//        if (pageWrap.getModel().getEditDate() != null) {
//            queryWrapper.lambda().ge(YwWarehouse::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
//            queryWrapper.lambda().le(YwWarehouse::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
//        }
//        if (pageWrap.getModel().getRemark() != null) {
//            queryWrapper.lambda().eq(YwWarehouse::getRemark, pageWrap.getModel().getRemark());
//        }
//        if (pageWrap.getModel().getStatus() != null) {
//            queryWrapper.lambda().eq(YwWarehouse::getStatus, pageWrap.getModel().getStatus());
//        }
//        if (pageWrap.getModel().getName() != null) {
//            queryWrapper.lambda().like(YwWarehouse::getName, pageWrap.getModel().getName());
//        }
//        if (pageWrap.getModel().getPosition() != null) {
//            queryWrapper.lambda().eq(YwWarehouse::getPosition, pageWrap.getModel().getPosition());
//        }
//        if (pageWrap.getModel().getCode() != null) {
//            queryWrapper.lambda().eq(YwWarehouse::getCode, pageWrap.getModel().getCode());
//        }
//        if (pageWrap.getModel().getUserId() != null) {
//            queryWrapper.lambda().eq(YwWarehouse::getUserId, pageWrap.getModel().getUserId());
//        }
//        if (pageWrap.getModel().getSortnum() != null) {
//            queryWrapper.lambda().eq(YwWarehouse::getSortnum, pageWrap.getModel().getSortnum());
//        }
//        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
//            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
//                queryWrapper.orderByDesc(sortData.getProperty());
//            } else {
//                queryWrapper.orderByAsc(sortData.getProperty());
//            }
//        }
//        return PageData.from(ywWarehouseMapper.selectPage(page, queryWrapper));
//    }
    @Override
    public long count(YwWarehouse ywWarehouse) {
        QueryWrapper<YwWarehouse> wrapper = new QueryWrapper<>(ywWarehouse);