home 2 жил өмнө
parent
commit
81419007c3
25 өөрчлөгдсөн 826 нэмэгдсэн , 62 устгасан
  1. 1 1
      hx-common/code-generator/src/main/java/com/fjhx/modular/Storage.java
  2. 5 0
      hx-service-api/storage-api/src/main/java/com/fjhx/entity/stock/StockBack.java
  3. 111 0
      hx-service-api/storage-api/src/main/java/com/fjhx/entity/stock/StockCheckrecord.java
  4. 131 0
      hx-service-api/storage-api/src/main/java/com/fjhx/entity/stock/StockCheckrecorddetail.java
  5. 17 0
      hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/StockCheckrecordEx.java
  6. 17 0
      hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/StockCheckrecordVo.java
  7. 17 0
      hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/StockCheckrecorddetailEx.java
  8. 17 0
      hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/StockCheckrecorddetailVo.java
  9. 11 0
      hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/SubmitBackVo.java
  10. 14 6
      hx-service/storage/src/main/java/com/fjhx/listener/WebSocketEventListener.java
  11. 19 0
      hx-service/storage/src/main/java/com/fjhx/stock/controller/StockCheckrecordController.java
  12. 32 0
      hx-service/storage/src/main/java/com/fjhx/stock/controller/StockCheckrecorddetailController.java
  13. 1 0
      hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockBackMapper.xml
  14. 21 0
      hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockCheckrecordMapper.java
  15. 9 0
      hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockCheckrecordMapper.xml
  16. 16 0
      hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockCheckrecorddetailMapper.java
  17. 5 0
      hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockCheckrecorddetailMapper.xml
  18. 38 0
      hx-service/storage/src/main/java/com/fjhx/stock/service/StockCheckrecordService.java
  19. 28 0
      hx-service/storage/src/main/java/com/fjhx/stock/service/StockCheckrecorddetailService.java
  20. 2 1
      hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackServiceImpl.java
  21. 242 0
      hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockCheckrecordServiceImpl.java
  22. 48 0
      hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockCheckrecorddetailServiceImpl.java
  23. 24 2
      hx-service/storage/src/main/java/com/fjhx/task/controller/ScheduleTaskController.java
  24. 0 9
      hx-service/victoriatourist/src/main/java/com/fjhx/controller/stock/StockController.java
  25. 0 43
      hx-service/victoriatourist/src/main/java/com/fjhx/service/stock/impl/StockServiceImpl.java

+ 1 - 1
hx-common/code-generator/src/main/java/com/fjhx/modular/Storage.java

@@ -37,7 +37,7 @@ public class Storage {
     public static String MODULAR_NAME = "storage";
 
     // 需要生成的表名称,多表用,隔开
-    public static String INCLUDE = "u_user";
+    public static String INCLUDE = "stock_checkrecorddetail";
 
     // mysql连接
     public static String MYSQL_URL = "rm-wz9f1jcr5466b42415o.mysql.rds.aliyuncs.com:3306";

+ 5 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/entity/stock/StockBack.java

@@ -29,6 +29,11 @@ public class StockBack implements Serializable {
     private Long id;
 
     /**
+     * 退仓类型
+     */
+    private Integer type;
+
+    /**
      * 操作人id
      */
     private String operatorId;

+ 111 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/entity/stock/StockCheckrecord.java

@@ -0,0 +1,111 @@
+package com.fjhx.entity.stock;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fjhx.base.BasicEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 盘点记录
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("stock_checkrecord_copy1")
+public class StockCheckrecord extends BasicEntity {
+
+    /**
+     * 软删除
+     */
+    @TableLogic
+    @TableField("IsDelete")
+    private Integer IsDelete;
+
+    /**
+     * 全仓扫描结果 (枚举定义:0=异常,1=正常)
+     */
+    @TableField("StockCheckResult")
+    private Integer StockCheckResult;
+
+    /**
+     * 盘点类型 (枚举定义:3=自动盘点,4=指定用户盘点)
+     */
+    @TableField("Type")
+    private Integer Type;
+
+    /**
+     * 开始盘点时间
+     */
+    @TableField("BeginTime")
+    private Date BeginTime;
+
+    /**
+     * 结束盘点时间
+     */
+    @TableField("EndTime")
+    private Date EndTime;
+
+    /**
+     * 操作人
+     */
+    @TableField("OperUserId")
+    private String OperUserId;
+
+    /**
+     * 仓库ID
+     */
+    @TableField("StockHouseId")
+    private String StockHouseId;
+
+    /**
+     * 审批状态 (枚举定义:0=待审批,1=审批中,2=已审批,3=已驳回,4=已撤回)
+     */
+    @TableField("ApproveBillState")
+    private Integer ApproveBillState;
+
+    /**
+     * 创建人ID
+     */
+    @TableField("CreateUserID")
+    private String CreateUserID;
+
+    /**
+     * 审核时间
+     */
+    @TableField("ApprovalTime")
+    private Date ApprovalTime;
+
+    /**
+     * 任务执行最小时间
+     */
+    @TableField("TaskRunMinTime")
+    private Date TaskRunMinTime;
+
+    /**
+     * 发起人
+     */
+    @TableField("TaskCreateUserId")
+    private String TaskCreateUserId;
+
+    /**
+     * 盘点状态 (枚举定义:0=已发起,1=部分盘点,2=已盘点)
+     */
+    @TableField("CheckState")
+    private Integer CheckState;
+
+    /**
+     * 人工盘点结果 (枚举定义:0=异常,1=正常)
+     */
+    @TableField("PeopleCheckResut")
+    private Integer PeopleCheckResut;
+
+
+}

+ 131 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/entity/stock/StockCheckrecorddetail.java

@@ -0,0 +1,131 @@
+package com.fjhx.entity.stock;
+
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import com.fjhx.base.BasicEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 盘点记录明细
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("stock_checkrecorddetail_copy1")
+public class StockCheckrecorddetail extends BasicEntity {
+
+
+    /**
+     * 软删除
+     */
+    @TableLogic
+    @TableField("IsDelete")
+    private Integer IsDelete;
+
+    /**
+     * 盘点记录编号
+     */
+    @TableField("RecordId")
+    private String RecordId;
+
+    /**
+     * 库存数量
+     */
+    @TableField("Quantity")
+    private BigDecimal Quantity;
+
+    /**
+     * 全仓扫描盘点数量 RealQuantity
+     */
+    @TableField("AllStockScanQty")
+    private BigDecimal AllStockScanQty;
+
+    /**
+     * 物料编号
+     */
+    @TableField("MaterialCode")
+    private String MaterialCode;
+
+    /**
+     * 放置区域
+     */
+    @TableField("PlaceAreaId")
+    private String PlaceAreaId;
+
+    /**
+     * 手动输入数量
+     */
+    @TableField("HandTagCount")
+    private Integer HandTagCount;
+
+    /**
+     * 库存卷数
+     */
+    @TableField("TagQuantity")
+    private Integer TagQuantity;
+
+    /**
+     * 人工盘点数量
+     */
+    @TableField("CheckTagCount")
+    private Integer CheckTagCount;
+
+    /**
+     * 是否完成人工盘点
+     */
+    @TableField("IsCompleteCheck")
+    private Integer IsCompleteCheck;
+
+    /**
+     * 创建人ID
+     */
+    @TableField("CreateUserID")
+    private String CreateUserID;
+
+    /**
+     * 审批状态 (枚举定义:0=待审批,1=审批中,2=已审批,3=已驳回,4=已撤回)
+     */
+    @TableField("ApproveBillState")
+    private Integer ApproveBillState;
+
+    /**
+     * 仓库ID
+     */
+    @TableField("StockHouseId")
+    private String StockHouseId;
+
+    /**
+     * 审核时间
+     */
+    @TableField("ApprovalTime")
+    private Date ApprovalTime;
+
+    /**
+     * 人工盘点长度
+     */
+    @TableField("CheckQty")
+    private BigDecimal CheckQty;
+
+    /**
+     * 全仓扫描机器盘点卷数
+     */
+    @TableField("AllStockScanCount")
+    private Integer AllStockScanCount;
+
+    /**
+     * 盘点时间
+     */
+    @TableField("CheckTime")
+    private Date CheckTime;
+
+
+}

+ 17 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/StockCheckrecordEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.stock;
+
+import com.fjhx.entity.stock.StockCheckrecord;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 盘点记录
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class StockCheckrecordEx extends StockCheckrecord {
+
+}

+ 17 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/StockCheckrecordVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.stock;
+
+import com.fjhx.entity.stock.StockCheckrecord;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 盘点记录
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class StockCheckrecordVo extends StockCheckrecord {
+
+}

+ 17 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/StockCheckrecorddetailEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.stock;
+
+import com.fjhx.entity.stock.StockCheckrecorddetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 盘点记录明细
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class StockCheckrecorddetailEx extends StockCheckrecorddetail {
+
+}

+ 17 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/StockCheckrecorddetailVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.stock;
+
+import com.fjhx.entity.stock.StockCheckrecorddetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 盘点记录明细
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class StockCheckrecorddetailVo extends StockCheckrecorddetail {
+
+}

+ 11 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/params/stock/SubmitBackVo.java

@@ -2,6 +2,7 @@ package com.fjhx.params.stock;
 
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 @Data
@@ -17,5 +18,15 @@ public class SubmitBackVo {
      */
     private List<BackDetail> backDetailList;
 
+    /**
+     * 退仓时间
+     */
+    private Date operationTime;
+
+    /**
+     * 退仓类型
+     */
+    private Integer type;
+
 }
 

+ 14 - 6
hx-service/storage/src/main/java/com/fjhx/listener/WebSocketEventListener.java

@@ -9,6 +9,7 @@ import com.fjhx.event.WebSocketOnMessageEvent;
 import com.fjhx.event.WebSocketOnOpenEvent;
 import com.fjhx.material.service.MaterialService;
 import com.fjhx.service.WebSocketServer;
+import com.fjhx.stock.service.StockCheckrecordService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.event.EventListener;
@@ -27,35 +28,39 @@ public class WebSocketEventListener {
     @Autowired
     private MaterialService materialService;
 
+    @Autowired
+    private StockCheckrecordService stockCheckrecordService;
+
     /**
      * 上位机userId
      */
-    String WEB_STOCK_PROGRAM = "webStockProgram";
+    public static final String WEB_STOCK_PROGRAM = "webStockProgram";
 
     /**
      * 转发userId key
      */
-    String FORWARD_USER_ID = "forwardUserId";
+    public static final String FORWARD_USER_ID = "forwardUserId";
 
     /**
      * 转发sessionId key
      */
-    String FORWARD_SESSION_ID = "forwardSessionId";
+    public static final String FORWARD_SESSION_ID = "forwardSessionId";
 
     /**
      * 初始化返回
      */
-    final int ON_OPEN_TYPE = 1;
+    public static final int ON_OPEN_TYPE = 1;
 
     /**
      * 操作上位机
      */
-    final int OPERATING_UPPER_COMPUTER = 2;
+    public static final int OPERATING_UPPER_COMPUTER = 2;
 
     /**
      * 推送rfid
      */
-    final int PUSH_RFID = 3;
+    public static final int PUSH_RFID = 3;
+
 
     private final Map<String, MessageEntity> map = new ConcurrentHashMap<>();
 
@@ -122,6 +127,9 @@ public class WebSocketEventListener {
             case 2:  // 出库
                 warehousingAndIssue(sendEntity, businessType);
                 break;
+            case 3:
+                stockCheckrecordService.checkCallBack(data);
+                break;
         }
     }
 

+ 19 - 0
hx-service/storage/src/main/java/com/fjhx/stock/controller/StockCheckrecordController.java

@@ -0,0 +1,19 @@
+package com.fjhx.stock.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 盘点记录 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@RestController
+@RequestMapping("/stockCheckrecord")
+public class StockCheckrecordController {
+
+}
+

+ 32 - 0
hx-service/storage/src/main/java/com/fjhx/stock/controller/StockCheckrecorddetailController.java

@@ -0,0 +1,32 @@
+package com.fjhx.stock.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springblade.core.tool.api.R;
+import com.fjhx.entity.stock.StockCheckrecorddetail;
+import com.fjhx.params.stock.StockCheckrecorddetailVo;
+import com.fjhx.stock.service.StockCheckrecorddetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 盘点记录明细 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@RestController
+@RequestMapping("/stockCheckrecorddetail")
+public class StockCheckrecorddetailController {
+
+    @Autowired
+    private StockCheckrecorddetailService stockCheckrecorddetailService;
+
+}
+

+ 1 - 0
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockBackMapper.xml

@@ -27,6 +27,7 @@
                sb.operation_num    operationNum,
                sb.operation_meters operationMeters,
                sb.operation_time   operationTime,
+               sb.type,
                uu.RealName         realName
         from stock_back sb
                  left join acc_account aa on aa.AccountNo = sb.operator_id

+ 21 - 0
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockCheckrecordMapper.java

@@ -0,0 +1,21 @@
+package com.fjhx.stock.mapper;
+
+import com.fjhx.entity.stock.StockCheckrecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.utils.wrapperUtil.IWrapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 盘点记录 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+public interface StockCheckrecordMapper extends BaseMapper<StockCheckrecord> {
+
+    List<String> selectErrorMaterialCode(IWrapper<Object> wrapper);
+
+}

+ 9 - 0
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockCheckrecordMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.stock.mapper.StockCheckrecordMapper">
+
+    <select id="selectErrorMaterialCode" resultType="java.lang.String">
+        
+    </select>
+
+</mapper>

+ 16 - 0
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockCheckrecorddetailMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.stock.mapper;
+
+import com.fjhx.entity.stock.StockCheckrecorddetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 盘点记录明细 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+public interface StockCheckrecorddetailMapper extends BaseMapper<StockCheckrecorddetail> {
+
+}

+ 5 - 0
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockCheckrecorddetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.stock.mapper.StockCheckrecorddetailMapper">
+
+</mapper>

+ 38 - 0
hx-service/storage/src/main/java/com/fjhx/stock/service/StockCheckrecordService.java

@@ -0,0 +1,38 @@
+package com.fjhx.stock.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fjhx.base.BaseService;
+import com.fjhx.entity.stock.StockCheckrecord;
+
+/**
+ * <p>
+ * 盘点记录 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+public interface StockCheckrecordService extends BaseService<StockCheckrecord> {
+
+    /**
+     * 开启盘点
+     *
+     * @param instructions 指令
+     * @param stockHouseId 盘点仓库id
+     */
+    void startCheck(String instructions, String stockHouseId);
+
+    /**
+     * 盘点回调
+     */
+    void checkCallBack(JSONObject data);
+
+    /**
+     * 关闭盘点
+     *
+     * @param instructions 指令
+     * @param stockHouseId 盘点仓库id
+     */
+    void closeCheck(String instructions, String stockHouseId);
+
+}

+ 28 - 0
hx-service/storage/src/main/java/com/fjhx/stock/service/StockCheckrecorddetailService.java

@@ -0,0 +1,28 @@
+package com.fjhx.stock.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.stock.StockCheckrecorddetail;
+import com.fjhx.params.stock.StockCheckrecorddetailVo;
+import com.fjhx.base.BaseService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 盘点记录明细 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+public interface StockCheckrecorddetailService extends BaseService<StockCheckrecorddetail> {
+
+    Page<StockCheckrecorddetail> getPage(Map<String, Object> condition);
+
+    void add(StockCheckrecorddetailVo stockCheckrecorddetailVo);
+
+    void edit(StockCheckrecorddetailVo stockCheckrecorddetailVo);
+
+    void delete(StockCheckrecorddetailVo stockCheckrecorddetailVo);
+
+}

+ 2 - 1
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackServiceImpl.java

@@ -131,8 +131,9 @@ public class StockBackServiceImpl extends ServiceImpl<StockBackMapper, StockBack
 
             // 面料退仓
             StockBack stockBack = new StockBack();
+            stockBack.setType(submitBackVo.getType());
             stockBack.setOperatorId(operatorId);
-            stockBack.setOperationTime(date);
+            stockBack.setOperationTime(ObjectUtil.defaultIfNull(submitBackVo.getOperationTime(), date));
             stockBack.setOperationNum(materialMetersList.size());
             stockBack.setOperationMeters(materialMetersList.stream().reduce(BigDecimal.ZERO, BigDecimal::add));
             stockBack.setStatus(StatusConstant.NO);

+ 242 - 0
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockCheckrecordServiceImpl.java

@@ -0,0 +1,242 @@
+package com.fjhx.stock.service.impl;
+
+import cn.hutool.core.convert.Convert;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.entity.stock.StockCheckrecord;
+import com.fjhx.entity.stock.StockCheckrecorddetail;
+import com.fjhx.entity.stock.StockDetail;
+import com.fjhx.entity.stock.StockTag;
+import com.fjhx.listener.WebSocketEventListener;
+import com.fjhx.service.WebSocketServer;
+import com.fjhx.stock.mapper.StockCheckrecordMapper;
+import com.fjhx.stock.service.StockCheckrecordService;
+import com.fjhx.stock.service.StockCheckrecorddetailService;
+import com.fjhx.stock.service.StockDetailService;
+import com.fjhx.stock.service.StockTagService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 盘点记录 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@Service
+public class StockCheckrecordServiceImpl extends ServiceImpl<StockCheckrecordMapper, StockCheckrecord> implements StockCheckrecordService {
+
+    /**
+     * 记录盘点数据
+     * key:仓库id
+     * value:rfidList
+     */
+    public static final Map<String, List<String>> map = new ConcurrentHashMap<>();
+
+    @Autowired
+    private StockDetailService stockDetailService;
+
+    @Autowired
+    private StockTagService stockTagService;
+
+    @Autowired
+    private StockCheckrecorddetailService stockCheckrecorddetailService;
+
+    @Override
+    public void startCheck(String instructions, String stockHouseId) {
+        JSONObject data = new JSONObject();
+        // 盘点指令
+        data.put("instructions", instructions);
+        // 开启rfid扫描type
+        data.put("type", "2");
+        // 盘点
+        data.put("businessType", "3");
+        // 盘点仓库id  一楼仓库'c185883dba22478cb593d33f6b66cc53' 四楼仓库'0b8f584250bb4b40b72d641ce4849d15'
+        data.put("stockHouseId", stockHouseId);
+
+        // 创建记录rfid的list
+        map.put(stockHouseId, Collections.synchronizedList(new ArrayList<>()));
+
+        // 开启扫描
+        WebSocketServer.sendInfo(WebSocketEventListener.WEB_STOCK_PROGRAM, WebSocketEventListener.OPERATING_UPPER_COMPUTER, data);
+    }
+
+    @Override
+    public void checkCallBack(JSONObject data) {
+
+        String stockHouseId = data.getString("stockHouseId");
+        String rfid = data.getString("rfid");
+
+        map.get(stockHouseId).add(rfid);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void closeCheck(String instructions, String stockHouseId) {
+
+        JSONObject data = new JSONObject();
+        // 盘点指令
+        data.put("instructions", instructions);
+        // 关闭rfid扫描type
+        data.put("type", "9");
+        // 关闭扫描
+        WebSocketServer.sendInfo(WebSocketEventListener.WEB_STOCK_PROGRAM, WebSocketEventListener.OPERATING_UPPER_COMPUTER, data);
+
+        List<String> rfidList = map.remove(stockHouseId);
+
+        Date date = new Date();
+
+        // 添加盘点记录
+        StockCheckrecord stockCheckrecord = new StockCheckrecord();
+        stockCheckrecord.setIsDelete(0);
+        stockCheckrecord.setCreatedTime(date);
+        stockCheckrecord.setUpdatedTime(date);
+        stockCheckrecord.setStockCheckResult(0);
+        stockCheckrecord.setType(3);
+        stockCheckrecord.setStockHouseId(stockHouseId);
+        stockCheckrecord.setApproveBillState(0);
+        stockCheckrecord.setCheckState(0);
+        stockCheckrecord.setPeopleCheckResut(1);
+        save(stockCheckrecord);
+
+        String recordId = stockCheckrecord.getId();
+
+
+        // 获取所有在库物料
+        List<Map<String, Object>> stockList = stockDetailService.listMaps(Wrappers.<StockDetail>query()
+                .select(
+                        "count(id) count", // 库存卷数
+                        "MaterialCode materialCode", // 对应物料编码
+                        "sum(Quantity) quantity" // 库存数量
+                )
+                .eq("StockHouseId", stockHouseId) // 对应仓库id
+                .eq("IsDelete", "0") // 未删除
+                .groupBy("MaterialCode") // 物料编码分组
+        );
+
+        List<Map<String, Object>> checkList;
+
+        if (rfidList.size() == 0) {
+            checkList = new ArrayList<>();
+        } else {
+            // 扫描出的rfid数量
+            checkList = stockTagService.listMaps(Wrappers.<StockTag>query()
+                    .select(
+                            "count(id) count", // 盘点卷数
+                            "MaterialCode materialCode", // 对应物料编码
+                            "sum(Quantity) quantity" // 盘点数量
+                    )
+                    .eq("IsDelete", 0) // 未删除
+                    .in("RfidCode", rfidList) // 扫描出的rfid
+                    .groupBy("MaterialCode") // 物料编码分组
+            );
+        }
+
+        // 记录异常物料
+        List<StockCheckrecorddetail> list = new ArrayList<>();
+
+        // 库存信息按物料编码转map
+        Map<String, Map<String, Object>> stockMap = stockList.stream().collect(Collectors.toMap(
+                item -> item.get("materialCode").toString(),
+                item -> item
+        ));
+
+        // 循环扫描出的RFID
+        for (Map<String, Object> map : checkList) {
+            // 物料编码
+            String materialCode = map.get("materialCode").toString();
+            // 扫描卷数
+            Integer count = Convert.toInt(map.get("count"), 0);
+            // 扫描数量
+            BigDecimal quantity = Convert.toBigDecimal(map.get("quantity"), BigDecimal.ZERO);
+
+            // 获取此物料库存信息,并删除map中的物料信息
+            Map<String, Object> stock = stockMap.remove(materialCode);
+
+            // 无库存信息
+            if (stock == null) {
+                // 添加异常,扫描出rfid,但库存没有
+                list.add(createStockCheckrecorddetail(
+                        date, recordId, stockHouseId, materialCode, BigDecimal.ZERO, quantity, 0, count));
+            } else {
+                // 库存卷数
+                int stockCount = Convert.toInt(stock.get("count"), 0);
+                // 库存数量
+                BigDecimal stockQuantity = Convert.toBigDecimal(stock.get("quantity"), BigDecimal.ZERO);
+
+                // 卷数不匹配
+                if (stockCount != count) {
+                    list.add(createStockCheckrecorddetail(
+                            date, recordId, stockHouseId, materialCode, stockQuantity, quantity, stockCount, count));
+                }
+
+            }
+        }
+
+        // 如果map还有值,表示没扫描出这个物料,但库存中有这个物料
+        if (stockMap.size() > 0) {
+            stockMap.forEach((k, v) -> {
+                // 物料编码
+                String materialCode = v.get("materialCode").toString();
+                // 库存卷数
+                int stockCount = Convert.toInt(v.get("count"), 0);
+                // 库存数量
+                BigDecimal stockQuantity = Convert.toBigDecimal(v.get("quantity"), BigDecimal.ZERO);
+
+                list.add(createStockCheckrecorddetail(
+                        date, recordId, stockHouseId, materialCode, stockQuantity, BigDecimal.ZERO, stockCount, 0));
+
+            });
+        }
+
+        // 添加异常物料信息
+        stockCheckrecorddetailService.saveBatch(list);
+    }
+
+    /**
+     * @param date              完成时间
+     * @param recordId          盘点主表id
+     * @param stockHouseId      仓库id
+     * @param materialCode      物料编码
+     * @param quantity          库存数量
+     * @param allStockScanQty   盘点数量
+     * @param TagQuantity       库存卷数
+     * @param AllStockScanCount 盘点卷数
+     */
+    private StockCheckrecorddetail createStockCheckrecorddetail(
+            Date date, String recordId, String stockHouseId, String materialCode, BigDecimal quantity,
+            BigDecimal allStockScanQty, Integer TagQuantity, Integer AllStockScanCount) {
+
+        StockCheckrecorddetail stockCheckrecorddetail = new StockCheckrecorddetail();
+        stockCheckrecorddetail.setIsDelete(0);
+        stockCheckrecorddetail.setCreatedTime(date);
+        stockCheckrecorddetail.setUpdatedTime(date);
+        stockCheckrecorddetail.setRecordId(recordId);
+        stockCheckrecorddetail.setHandTagCount(0);
+        stockCheckrecorddetail.setCheckTagCount(0);
+        stockCheckrecorddetail.setIsCompleteCheck(0);
+        stockCheckrecorddetail.setApproveBillState(0);
+        stockCheckrecorddetail.setStockHouseId(stockHouseId);
+        stockCheckrecorddetail.setCheckQty(BigDecimal.ZERO);
+        stockCheckrecorddetail.setPlaceAreaId("");
+
+        stockCheckrecorddetail.setMaterialCode(materialCode);
+        stockCheckrecorddetail.setQuantity(quantity);
+        stockCheckrecorddetail.setAllStockScanQty(allStockScanQty);
+        stockCheckrecorddetail.setTagQuantity(TagQuantity);
+        stockCheckrecorddetail.setAllStockScanCount(AllStockScanCount);
+
+        return stockCheckrecorddetail;
+    }
+
+
+}

+ 48 - 0
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockCheckrecorddetailServiceImpl.java

@@ -0,0 +1,48 @@
+package com.fjhx.stock.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.stock.StockCheckrecorddetail;
+import com.fjhx.params.stock.StockCheckrecorddetailVo;
+import com.fjhx.stock.mapper.StockCheckrecorddetailMapper;
+import com.fjhx.stock.service.StockCheckrecorddetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.utils.wrapperUtil.IWrapper;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 盘点记录明细 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-12-05
+ */
+@Service
+public class StockCheckrecorddetailServiceImpl extends ServiceImpl<StockCheckrecorddetailMapper, StockCheckrecorddetail> implements StockCheckrecorddetailService {
+
+    @Override
+    public Page<StockCheckrecorddetail> getPage(Map<String, Object> condition) {
+
+        IWrapper<StockCheckrecorddetail> wrapper = IWrapper.getWrapper(condition);
+
+        return page(condition, wrapper);
+    }
+
+    @Override
+    public void add(StockCheckrecorddetailVo stockCheckrecorddetailVo) {
+        save(stockCheckrecorddetailVo);
+    }
+
+    @Override
+    public void edit(StockCheckrecorddetailVo stockCheckrecorddetailVo) {
+        updateById(stockCheckrecorddetailVo);
+    }
+
+    @Override
+    public void delete(StockCheckrecorddetailVo stockCheckrecorddetailVo) {
+        removeById(stockCheckrecorddetailVo.getId());
+    }
+
+}

+ 24 - 2
hx-service/storage/src/main/java/com/fjhx/task/controller/ScheduleTaskController.java

@@ -1,15 +1,15 @@
 package com.fjhx.task.controller;
 
 import com.fjhx.stock.service.StockBackPlanService;
+import com.fjhx.stock.service.StockCheckrecordService;
 import com.fjhx.task.service.ScheduleTaskService;
 import org.springblade.core.launch.BladeApplication;
+import org.springblade.core.tool.utils.ThreadUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 
-import javax.annotation.PostConstruct;
-
 @Configuration
 @EnableScheduling
 public class ScheduleTaskController {
@@ -20,6 +20,9 @@ public class ScheduleTaskController {
     @Autowired
     private StockBackPlanService stockBackPlanService;
 
+    @Autowired
+    private StockCheckrecordService stockCheckrecordService;
+
     /**
      * 定时推送id与工号不一致的信息
      */
@@ -66,4 +69,23 @@ public class ScheduleTaskController {
         stockBackPlanService.statisticsScheduleDateTask(4);
     }
 
+    /**
+     * 盘点
+     */
+//    @Scheduled(cron = "0 10 1 * * ?")
+//    @PostConstruct
+//    private void check() {
+//        if (BladeApplication.isLocalDev()) {
+//            return;
+//        }
+//
+//        stockCheckrecordService.startCheck("check1", "c185883dba22478cb593d33f6b66cc53");
+//        stockCheckrecordService.startCheck("check4", "0b8f584250bb4b40b72d641ce4849d15");
+//
+//        ThreadUtil.sleep(1000 * 60 * 10);
+//
+//        stockCheckrecordService.closeCheck("check1", "c185883dba22478cb593d33f6b66cc53");
+//        stockCheckrecordService.closeCheck("check4", "0b8f584250bb4b40b72d641ce4849d15");
+//    }
+
 }

+ 0 - 9
hx-service/victoriatourist/src/main/java/com/fjhx/controller/stock/StockController.java

@@ -2,8 +2,6 @@ package com.fjhx.controller.stock;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.entity.stock.Stock;
-import com.fjhx.enums.stock.InTypeEnum;
-import com.fjhx.params.stock.StockChangeVo;
 import com.fjhx.params.stock.StockVo;
 import com.fjhx.service.stock.StockService;
 import org.springblade.core.tool.api.R;
@@ -54,12 +52,5 @@ public class StockController {
         return R.success();
     }
 
-    @PostMapping("/test")
-    public R test(@RequestBody StockChangeVo stockVo) {
-        stockVo.setTypeEnum(InTypeEnum.MANUAL);
-        stockService.changeQuantity(stockVo);
-        return R.success();
-    }
-
 }
 

+ 0 - 43
hx-service/victoriatourist/src/main/java/com/fjhx/service/stock/impl/StockServiceImpl.java

@@ -70,49 +70,6 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         removeById(stockVo.getId());
     }
 
-//    @Transactional(rollbackFor = Exception.class)
-//    @Override
-//    public void changeQuantity(Long goodsId, Long warehouseId, BigDecimal quantity, Integer detailsType, String remarks) {
-//        // 分布式锁,粒度为物品id + 仓库id
-//        Boolean flag = redisLockClient.lockFair(VLockConstant.STOCK_LOCK + goodsId + warehouseId,
-//                () -> {
-//                    Stock stock = getOne(q -> q.eq(Stock::getGoodsId, goodsId).eq(Stock::getWarehouseId, warehouseId));
-//
-//                    // 没有物料存储记录,则创建物料
-//                    if (stock == null) {
-//                        if (quantity.compareTo(BigDecimal.ZERO) < 0) {
-//                            throw new ServiceException("库存不足,出库失败");
-//                        }
-//
-//                        stock = new Stock();
-//                        stock.setGoodsId(goodsId);
-//                        stock.setQuantity(quantity);
-//                        stock.setWarehouseId(warehouseId);
-//                        return save(stock);
-//                    }
-//
-//                    BigDecimal newQuantity = stock.getQuantity().add(quantity);
-//                    if (newQuantity.compareTo(BigDecimal.ZERO) < 0) {
-//                        throw new ServiceException("库存不足,出库失败");
-//                    }
-//
-//                    stock.setQuantity(newQuantity);
-//                    return updateById(stock);
-//                });
-//
-//        Assert.eqTrue(flag, ErrorMsgConstant.SYSTEM_BUSY_ERROR);
-//
-//        // 添加出入库明细
-//        stockJournalService.add(
-//                quantity.compareTo(BigDecimal.ZERO) > 0 ? StockJournalTypeConstant.IN : StockJournalTypeConstant.OUT,
-//                detailsType,
-//                goodsId,
-//                warehouseId,
-//                quantity.compareTo(BigDecimal.ZERO) > 0 ? quantity : BigDecimal.ZERO.subtract(quantity),
-//                remarks
-//        );
-//    }
-
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void changeQuantity(StockChangeVo stockChangeVo) {