Forráskód Böngészése

杰生重构 质检

home 2 éve
szülő
commit
39642b3f34
42 módosított fájl, 943 hozzáadás és 119 törlés
  1. 0 10
      bladex-tool/blade-starter-auth/src/main/java/org/springblade/core/secure/utils/AuthUtil.java
  2. 7 0
      hx-common/common-tool/src/main/java/com/fjhx/utils/BigDecimalUtil.java
  3. 9 0
      hx-common/service-flow/src/main/java/com/fjhx/controller/example/ExampleInfoController.java
  4. 3 2
      hx-common/service-flow/src/main/java/com/fjhx/controller/process/ProcessTenantController.java
  5. 8 7
      hx-common/service-flow/src/main/java/com/fjhx/mapper/example/ExampleInfoMapper.xml
  6. 2 0
      hx-common/service-flow/src/main/java/com/fjhx/mapper/process/ProcessTenantMapper.java
  7. 11 0
      hx-common/service-flow/src/main/java/com/fjhx/mapper/process/ProcessTenantMapper.xml
  8. 2 0
      hx-common/service-flow/src/main/java/com/fjhx/service/example/ExampleInfoService.java
  9. 41 2
      hx-common/service-flow/src/main/java/com/fjhx/service/example/impl/ExampleInfoServiceImpl.java
  10. 3 1
      hx-common/service-flow/src/main/java/com/fjhx/service/process/ProcessNodeService.java
  11. 2 0
      hx-common/service-flow/src/main/java/com/fjhx/service/process/ProcessTenantService.java
  12. 16 2
      hx-common/service-flow/src/main/java/com/fjhx/service/process/impl/ProcessNodeServiceImpl.java
  13. 5 0
      hx-common/service-flow/src/main/java/com/fjhx/service/process/impl/ProcessTenantServiceImpl.java
  14. 5 0
      hx-service-api/storage-api/src/main/java/com/fjhx/entity/stock/StockBackPlanDetails.java
  15. 91 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/quality/QualityTesting.java
  16. 110 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/quality/QualityTestingDetails.java
  17. 5 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterTag.java
  18. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/quality/QualityTestingDetailsEx.java
  19. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/quality/QualityTestingDetailsVo.java
  20. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/quality/QualityTestingEx.java
  21. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/quality/QualityTestingVo.java
  22. 37 0
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/quality/QualityTestingController.java
  23. 56 0
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/quality/QualityTestingDetailsController.java
  24. 6 0
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/water/WaterController.java
  25. 16 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingDetailsMapper.java
  26. 5 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingDetailsMapper.xml
  27. 23 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingMapper.java
  28. 9 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingMapper.xml
  29. 5 2
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterTagMapper.xml
  30. 6 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/apply/impl/ApplyPurchaseServiceImpl.java
  31. 16 8
      hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/impl/ContractDetailsServiceImpl.java
  32. 28 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/QualityTestingDetailsService.java
  33. 26 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/QualityTestingService.java
  34. 54 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/impl/QualityTestingDetailsServiceImpl.java
  35. 132 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/impl/QualityTestingServiceImpl.java
  36. 2 4
      hx-service/storage-restructure/src/main/java/com/fjhx/service/stock/impl/StockServiceImpl.java
  37. 3 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterBatchService.java
  38. 10 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterBatchServiceImpl.java
  39. 11 1
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterServiceImpl.java
  40. 20 3
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterTagServiceImpl.java
  41. 88 75
      hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackPlanServiceImpl.java
  42. 2 2
      hx-service/storage/src/main/java/com/fjhx/task/controller/ScheduleTaskController.java

+ 0 - 10
bladex-tool/blade-starter-auth/src/main/java/org/springblade/core/secure/utils/AuthUtil.java

@@ -160,16 +160,6 @@ public class AuthUtil {
     /**
      * 获取用户id
      *
-     * @return
-     */
-    public static String getUserIdStr() {
-        BladeUser user = getUser();
-        return (null == user || user.getUserId() == null) ? null : user.getUserId().toString();
-    }
-
-    /**
-     * 获取用户id
-     *
      * @param request request
      * @return userId
      */

+ 7 - 0
hx-common/common-tool/src/main/java/com/fjhx/utils/BigDecimalUtil.java

@@ -62,6 +62,13 @@ public class BigDecimalUtil {
     }
 
     /**
+     * 乘法运算
+     */
+    public static BigDecimal multiply(Object v1, Object v2, int scale, RoundingMode roundingMode) {
+        return objToBigDecimal(v1).multiply(objToBigDecimal(v2).setScale(scale, roundingMode));
+    }
+
+    /**
      * 除法运算
      */
     public static BigDecimal divide(Object v1, Object v2, int scale) {

+ 9 - 0
hx-common/service-flow/src/main/java/com/fjhx/controller/example/ExampleInfoController.java

@@ -46,4 +46,13 @@ public class ExampleInfoController {
         return R.data(result);
     }
 
+    /**
+     * 展示流程
+     */
+    @PostMapping("/showFlow")
+    public R showFlow(@RequestBody Map<String, String> condition) {
+        List<Map<String, Object>> result = exampleInfoService.showFlow(condition.get("code"));
+        return R.data(result);
+    }
+
 }

+ 3 - 2
hx-common/service-flow/src/main/java/com/fjhx/controller/process/ProcessTenantController.java

@@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -64,8 +65,8 @@ public class ProcessTenantController {
      * 获取流程详情
      */
     @PostMapping("/getDetails")
-    public R getDetails(@RequestBody ProcessTenant processTenant) {
-        Map<String, Object> result = processNodeService.getDetails(processTenant.getId());
+    public R getDetails(@RequestBody HashMap<String, String> condition) {
+        Map<String, Object> result = processNodeService.getDetails(condition);
         return R.data(result);
     }
 

+ 8 - 7
hx-common/service-flow/src/main/java/com/fjhx/mapper/example/ExampleInfoMapper.xml

@@ -3,13 +3,14 @@
 <mapper namespace="com.fjhx.mapper.example.ExampleInfoMapper">
 
     <select id="getWaitingProcessingPage" resultType="java.util.Map">
-        SELECT pi.`code`       flowCode,
-               pi.module_name  moduleName,
-               ei.title        flowTitle,
-               ei.create_user  createUser,
-               ei.create_time  createTime,
-               ei.id           flowId,
-               ei.flow_link_no flowLinkNo
+        SELECT pi.`code`            flowCode,
+               pi.module_name       moduleName,
+               ei.title             flowTitle,
+               ei.create_user       createUser,
+               ei.create_time       createTime,
+               ei.id                flowId,
+               ei.flow_link_no      flowLinkNo,
+               ei.process_tenant_id processTenantId
         FROM example_info ei
                  LEFT JOIN process_info pi ON ei.process_info_id = pi.id
             ${ew.customSqlSegment}

+ 2 - 0
hx-common/service-flow/src/main/java/com/fjhx/mapper/process/ProcessTenantMapper.java

@@ -20,4 +20,6 @@ public interface ProcessTenantMapper extends BaseMapper<ProcessTenant> {
 
     Page<Map<String, Object>> getPage(@Param("page") Page<ProcessTenant> page, @Param("ew") QueryWrapper<?> wrapper);
 
+    ProcessTenant getProcessTenant(@Param("code") String code, @Param("tenantId") String tenantId);
+
 }

+ 11 - 0
hx-common/service-flow/src/main/java/com/fjhx/mapper/process/ProcessTenantMapper.xml

@@ -16,4 +16,15 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getProcessTenant" resultType="com.fjhx.entity.process.ProcessTenant">
+        select pt.id,
+               pt.node_object nodeObject,
+               pt.line_object lineObject
+        from process_tenant pt
+                 left join process_info pi on pt.process_info_id = pi.id
+        where pt.current_version = 1
+          and pt.binding_tenant_id = #{tenantId}
+          and pi.code = #{code}
+    </select>
+
 </mapper>

+ 2 - 0
hx-common/service-flow/src/main/java/com/fjhx/service/example/ExampleInfoService.java

@@ -21,4 +21,6 @@ public interface ExampleInfoService extends BaseService<ExampleInfo> {
 
     List<Map<String, Object>> record(Long flowLinkNo);
 
+    List<Map<String, Object>> showFlow(String code);
+
 }

+ 41 - 2
hx-common/service-flow/src/main/java/com/fjhx/service/example/impl/ExampleInfoServiceImpl.java

@@ -11,6 +11,7 @@ import com.fjhx.entity.example.ExampleDetails;
 import com.fjhx.entity.example.ExampleInfo;
 import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.entity.process.ProcessNodeButton;
+import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.enums.ButtonNameEnum;
 import com.fjhx.enums.ProcessNodeHandleObjectTypeEnum;
 import com.fjhx.enums.ProcessNodeTypeEnum;
@@ -19,6 +20,7 @@ import com.fjhx.service.example.ExampleDetailsService;
 import com.fjhx.service.example.ExampleInfoService;
 import com.fjhx.service.process.ProcessNodeButtonService;
 import com.fjhx.service.process.ProcessNodeService;
+import com.fjhx.service.process.ProcessTenantService;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.UserClientUtil;
 import org.springblade.core.secure.BladeUser;
@@ -26,6 +28,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -51,6 +54,9 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
     @Autowired
     private ProcessNodeButtonService processNodeButtonService;
 
+    @Autowired
+    private ProcessTenantService processTenantService;
+
     @Override
     public Page<Map<String, Object>> getWaitingProcessingPage(Map<String, String> condition) {
 
@@ -154,6 +160,41 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
             return result;
         }
 
+        next(result, nextNode, parentProcessNodeMap);
+
+        return result;
+    }
+
+    @Override
+    public List<Map<String, Object>> showFlow(String code) {
+        String tenantId = AuthUtil.getTenantId();
+        ProcessTenant processTenant = processTenantService.getProcessTenant(code, tenantId);
+        Assert.notEmpty(processTenant, "无法通过流程编码找到流程");
+
+        List<ProcessNode> processNodeList = processNodeService.list(ProcessNode::getProcessTenantId, processTenant.getId());
+
+        // 根据父节点id封装为map
+        Map<Long, List<ProcessNode>> parentProcessNodeMap = processNodeList.stream().collect(Collectors.groupingBy(ProcessNode::getParentId));
+
+        ProcessNode nextNode = new ProcessNode();
+        for (ProcessNode processNode : processNodeList) {
+            if (FlowConstant.START_CODE.equals(processNode.getCode())) {
+                nextNode = processNode;
+                break;
+            }
+        }
+
+        List<Map<String, Object>> result = new ArrayList<>();
+        next(result, nextNode, parentProcessNodeMap);
+        return result;
+    }
+
+
+    /**
+     * 寻找未开始节点
+     */
+    private void next(List<Map<String, Object>> result, ProcessNode nextNode, Map<Long, List<ProcessNode>> parentProcessNodeMap) {
+
         HashMap<String, Object> item = new HashMap<>();
         item.put("type", ButtonNameEnum.HAVE_IN_HAND.getType());
         item.put("typeName", ButtonNameEnum.HAVE_IN_HAND.getName());
@@ -195,8 +236,6 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
                 }
             }
         }
-
-        return result;
     }
 
 }

+ 3 - 1
hx-common/service-flow/src/main/java/com/fjhx/service/process/ProcessNodeService.java

@@ -2,8 +2,10 @@ package com.fjhx.service.process;
 
 import com.fjhx.base.BaseService;
 import com.fjhx.entity.process.ProcessNode;
+import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.params.ProcessNodeVo;
 
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -20,6 +22,6 @@ public interface ProcessNodeService extends BaseService<ProcessNode> {
 
     void edit(ProcessNodeVo processNodeVo);
 
-    Map<String, Object> getDetails(Long id);
+    Map<String, Object> getDetails(HashMap<String, String> condition);
 
 }

+ 2 - 0
hx-common/service-flow/src/main/java/com/fjhx/service/process/ProcessTenantService.java

@@ -28,4 +28,6 @@ public interface ProcessTenantService extends BaseService<ProcessTenant> {
 
     void editVersion(ProcessTenant processTenant);
 
+    ProcessTenant getProcessTenant(String code, String tenantId);
+
 }

+ 16 - 2
hx-common/service-flow/src/main/java/com/fjhx/service/process/impl/ProcessNodeServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.service.process.impl;
 
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.constants.FlowExplainConstant;
@@ -12,6 +13,7 @@ import com.fjhx.service.process.ProcessNodeService;
 import com.fjhx.service.process.ProcessTenantService;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.FileClientUtil;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -52,11 +54,23 @@ public class ProcessNodeServiceImpl extends ServiceImpl<ProcessNodeMapper, Proce
     }
 
     @Override
-    public Map<String, Object> getDetails(Long id) {
+    public Map<String, Object> getDetails(HashMap<String, String> condition) {
         Map<String, Object> result = new HashMap<>();
+        Long id = Convert.toLong(condition.get("id"));
 
-        ProcessTenant processTenant = processTenantService.getById(id);
+        ProcessTenant processTenant;
 
+        if (ObjectUtil.isNotEmpty(id)) {
+            processTenant = processTenantService.getById(id);
+        } else {
+            String code = condition.get("code");
+            String tenantId = AuthUtil.getTenantId();
+            processTenant = processTenantService.getProcessTenant(code, tenantId);
+
+            Assert.notEmpty(processTenant, "无法通过流程编码找到流程");
+            id = processTenant.getId();
+        }
+        
         List<ProcessNode> list = list(ProcessNode::getProcessTenantId, id);
 
         result.put("list", list);

+ 5 - 0
hx-common/service-flow/src/main/java/com/fjhx/service/process/impl/ProcessTenantServiceImpl.java

@@ -146,6 +146,11 @@ public class ProcessTenantServiceImpl extends ServiceImpl<ProcessTenantMapper, P
         updateById(processTenant);
     }
 
+    @Override
+    public ProcessTenant getProcessTenant(String code, String tenantId) {
+        return baseMapper.getProcessTenant(code, tenantId);
+    }
+
     /**
      * 生成默认流程
      */

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

@@ -126,5 +126,10 @@ public class StockBackPlanDetails implements Serializable {
      */
     private BigDecimal transferOutArea;
 
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
 
 }

+ 91 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/quality/QualityTesting.java

@@ -0,0 +1,91 @@
+package com.fjhx.entity.quality;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fjhx.base.StorageBaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 质检
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class QualityTesting extends StorageBaseEntity {
+
+
+    /**
+     * 质检单号
+     */
+    private String code;
+
+    /**
+     * 批次id
+     */
+    private Long waterBatchId;
+
+    /**
+     * 完成状态(0未完成 1完成)
+     */
+    private Integer completeStatus;
+
+    /**
+     * 质检卷数
+     */
+    private Integer checkNum;
+
+    /**
+     * 已质检数卷数
+     */
+    private Integer hadCheckNum;
+
+    /**
+     * 质检米数
+     */
+    private BigDecimal checkQuantity;
+
+    /**
+     * 质检平方
+     */
+    private BigDecimal checkArea;
+
+    /**
+     * 抽检⽐例
+     */
+    private BigDecimal checkRate;
+
+    /**
+     * 质检判定
+     */
+    private BigDecimal checkJudgment;
+
+    /**
+     * 质检完成时间
+     */
+    private Date checkTime;
+
+    /**
+     * 质检及时率
+     */
+    private Date checkInvalidRatio;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+    private String oldId;
+
+
+}

+ 110 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/quality/QualityTestingDetails.java

@@ -0,0 +1,110 @@
+package com.fjhx.entity.quality;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fjhx.base.StorageBaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 质检明细
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class QualityTestingDetails extends StorageBaseEntity {
+
+
+    /**
+     * 质检id
+     */
+    private Long qualityTestingId;
+
+    /**
+     * 物料id
+     */
+    private Long waterTagId;
+
+    /**
+     * 物料id
+     */
+    private Long materialId;
+
+    /**
+     * 质检员
+     */
+    private Long userId;
+
+    /**
+     * 物料数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 短少数量
+     */
+    private BigDecimal lakeNum;
+
+    /**
+     * 抽纱数量
+     */
+    private BigDecimal drawnworkNum;
+
+    /**
+     * 褶皱数量
+     */
+    private BigDecimal foldNum;
+
+    /**
+     * 脏污数量
+     */
+    private BigDecimal dirtNum;
+
+    /**
+     * 破洞数量
+     */
+    private BigDecimal potholeNum;
+
+    /**
+     * 缩水(百分比)
+     */
+    private BigDecimal shrinkPercent;
+
+    /**
+     * 基本判定 (0目测合格,1合格,2不合格)
+     */
+    private Integer checkJudgment;
+
+    /**
+     * 抽检数量
+     */
+    private BigDecimal checkQuantity;
+
+    /**
+     * 图片地址
+     */
+    private String imageUrl;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+    private String oldId;
+
+
+}

+ 5 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterTag.java

@@ -112,6 +112,11 @@ public class WaterTag extends StorageBaseEntity {
     private Long labelUserId;
 
     /**
+     * 使用状态 0未使用 1正在使用
+     */
+    private Integer useStatus;
+
+    /**
      * 逻辑删除 0未删除 1已删除
      */
     @TableField(fill = FieldFill.INSERT)

+ 17 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/quality/QualityTestingDetailsEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.quality;
+
+import com.fjhx.entity.quality.QualityTestingDetails;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 质检明细
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class QualityTestingDetailsEx extends QualityTestingDetails {
+
+}

+ 17 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/quality/QualityTestingDetailsVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.quality;
+
+import com.fjhx.entity.quality.QualityTestingDetails;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 质检明细
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class QualityTestingDetailsVo extends QualityTestingDetails {
+
+}

+ 17 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/quality/QualityTestingEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.quality;
+
+import com.fjhx.entity.quality.QualityTesting;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 质检
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class QualityTestingEx extends QualityTesting {
+
+}

+ 17 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/quality/QualityTestingVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.quality;
+
+import com.fjhx.entity.quality.QualityTesting;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 质检
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class QualityTestingVo extends QualityTesting {
+
+}

+ 37 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/controller/quality/QualityTestingController.java

@@ -0,0 +1,37 @@
+package com.fjhx.controller.quality;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
+import com.fjhx.service.quality.QualityTestingService;
+import org.springblade.core.tool.api.R;
+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-09-26
+ */
+@RestController
+@RequestMapping("/qualityTesting")
+public class QualityTestingController {
+
+    @Autowired
+    private QualityTestingService qualityTestingService;
+
+    @PostMapping("/page")
+    public R page(@RequestBody Condition condition) {
+        Page<Map<String, Object>> result = qualityTestingService.getPage(condition);
+        return R.success(result);
+    }
+
+}
+

+ 56 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/controller/quality/QualityTestingDetailsController.java

@@ -0,0 +1,56 @@
+package com.fjhx.controller.quality;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springblade.core.tool.api.R;
+import com.fjhx.entity.quality.QualityTestingDetails;
+import com.fjhx.params.quality.QualityTestingDetailsVo;
+import com.fjhx.service.quality.QualityTestingDetailsService;
+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-09-26
+ */
+@RestController
+@RequestMapping("/qualityTestingDetails")
+public class QualityTestingDetailsController {
+
+    @Autowired
+    private QualityTestingDetailsService qualityTestingDetailsService;
+
+    @PostMapping("/page")
+    public R page(@RequestBody Map<String, String> condition){
+        Page<QualityTestingDetails> result = qualityTestingDetailsService.getPage(condition);
+        return R.success(result);
+    }
+
+    @PostMapping("/add")
+    public R add(@RequestBody QualityTestingDetailsVo qualityTestingDetailsVo){
+        qualityTestingDetailsService.add(qualityTestingDetailsVo);
+        return R.success();
+    }
+
+    @PostMapping("/edit")
+    public R edit(@RequestBody QualityTestingDetailsVo qualityTestingDetailsVo){
+        qualityTestingDetailsService.edit(qualityTestingDetailsVo);
+        return R.success();
+    }
+
+    @PostMapping("/delete")
+    public R delete(@RequestBody QualityTestingDetailsVo qualityTestingDetailsVo){
+        qualityTestingDetailsService.delete(qualityTestingDetailsVo);
+        return R.success();
+    }
+
+}
+

+ 6 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/controller/water/WaterController.java

@@ -24,6 +24,12 @@ public class WaterController {
     @Autowired
     private WaterService waterService;
 
+    /**
+     * 出入库
+     *
+     * @param waterVo
+     * @return
+     */
     @PostMapping("/add")
     public R add(@RequestBody WaterVo waterVo) {
         waterService.add(waterVo);

+ 16 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingDetailsMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.mapper.quality;
+
+import com.fjhx.entity.quality.QualityTestingDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 质检明细 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+public interface QualityTestingDetailsMapper extends BaseMapper<QualityTestingDetails> {
+
+}

+ 5 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingDetailsMapper.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.mapper.quality.QualityTestingDetailsMapper">
+
+</mapper>

+ 23 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingMapper.java

@@ -0,0 +1,23 @@
+package com.fjhx.mapper.quality;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.quality.QualityTesting;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 质检 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+public interface QualityTestingMapper extends BaseMapper<QualityTesting> {
+
+    Page<Map<String, Object>> getPage(@Param("page") Page<Object> page, @Param("ew") QueryWrapper<Object> wrapper);
+
+}

+ 9 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingMapper.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.mapper.quality.QualityTestingMapper">
+
+    <select id="getPage" resultType="java.util.Map">
+
+    </select>
+
+</mapper>

+ 5 - 2
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterTagMapper.xml

@@ -28,12 +28,14 @@
         from water_tag wt
                  left join water_batch wb on wt.water_batch_id = wb.id
                  left join material m on wb.material_id = m.id
-        where wt.qr_code = #{qrCode}
+        where wt.use_status = 1
+          and wt.qr_code = #{qrCode}
     </select>
 
     <select id="getDetailsByRfid" resultType="java.util.Map">
         select wt.id,
                wt.rfid_code,
+               wt.water_batch_id,
                m.code materialCode,
                m.name materialName,
                m.Spec materialSpec,
@@ -43,7 +45,8 @@
                wt.stock_house_id
         from water_tag wt
                  left join material m on wt.material_id = m.id
-        where wt.rfid_code = #{rfidCode}
+        where wt.use_status = 1
+          and wt.rfid_code = #{rfidCode}
     </select>
 
 </mapper>

+ 6 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/apply/impl/ApplyPurchaseServiceImpl.java

@@ -47,6 +47,12 @@ public class ApplyPurchaseServiceImpl extends ServiceImpl<ApplyPurchaseMapper, A
 
     @Override
     public String getCode() {
+        try {
+            Thread.sleep(1);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
         return "PB-" + DateUtil.format(new Date(), "yyMMdd-HHmmss-SSS");
     }
 

+ 16 - 8
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/impl/ContractDetailsServiceImpl.java

@@ -36,6 +36,9 @@ import java.util.stream.Collectors;
 @Service
 public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMapper, ContractDetails> implements ContractDetailsService {
 
+    // 到货数量超过采购数量百分之几算完成
+    private static final BigDecimal PERCENT_QUALIFIED = new BigDecimal("0.95");
+
     @Autowired
     private WaterBatchService waterBatchService;
 
@@ -57,7 +60,7 @@ public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMappe
         );
 
         // TODO 出库数量大于百分之95,应供应商出货状态已完成,合同出货状态已完成(目前合同和明细为 1对1 关系,明细完成直接更新合同即可)
-        if (BigDecimalUtil.ge(shipmentQuantity, contractDetails.getQuantity().multiply(new BigDecimal("0.95")))) {
+        if (BigDecimalUtil.ge(shipmentQuantity, contractDetails.getQuantity().multiply(PERCENT_QUALIFIED))) {
             contractService.update(Wrappers.<Contract>lambdaUpdate()
                     .eq(StorageBaseEntity::getId, contractDetails.getContractId())
                     .set(Contract::getShipmentStatus, StatusConstant.YES)
@@ -68,7 +71,7 @@ public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMappe
     @Override
     public synchronized void updateAfloatAndArrivalQuantity(List<WaterTag> waterTagList) {
 
-        // 统计出每个合同明细id的变更数量
+        // 如果标签第一次入库,统计出所在合同明细id,值为改变数量
         Map<Long, BigDecimal> map = waterTagList.stream()
                 .filter(waterTag -> waterTag.getPurchaseProgress() < PurchaseProgressEnum.WAREHOUSING.getType())
                 .collect(Collectors.toMap(
@@ -86,6 +89,7 @@ public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMappe
 
         List<Contract> contractList = new ArrayList<>();
 
+        // 循环标签列表所在合同
         for (ContractDetails contractDetails : contractDetailsList) {
 
             // 入库数量
@@ -98,21 +102,25 @@ public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMappe
             BigDecimal arrivalQuantity = contractDetails.getArrivalQuantity().add(changeQuantity);
             contractDetails.setArrivalQuantity(arrivalQuantity);
 
-            // 更新在途数量
-            BigDecimal afloatQuantity = contractDetails.getAfloatQuantity().subtract(changeQuantity);
-            afloatQuantity = BigDecimalUtil.max(afloatQuantity, BigDecimal.ZERO);
-            contractDetails.setAfloatQuantity(afloatQuantity);
-
             // 如果到货数量大于等于采购数量的百分之95,合同状态改为已完成
-            if (BigDecimalUtil.ge(arrivalQuantity, quantity.multiply(new BigDecimal("0.95")))) {
+            if (BigDecimalUtil.ge(arrivalQuantity, quantity.multiply(PERCENT_QUALIFIED))) {
+                // 赋值完成时间
                 contractDetails.setCompleteTime(date);
+                // 明细合同已完成
                 contractDetails.setCompleteStatus(StatusConstant.YES);
+                // 在途为0
+                contractDetails.setAfloatQuantity(BigDecimal.ZERO);
 
                 // TODO 更新合同表(目前合同和明细为 1对1 关系,明细完成直接更新合同即可)
                 Contract contract = new Contract();
+                contract.setId(contractDetails.getContractId());
                 contract.setStatus(ContractStatusEnum.COMPLETED.getType());
                 contract.setShipmentStatus(StatusConstant.YES);
                 contractList.add(contract);
+            } else {
+                // 更新在途数量
+                BigDecimal afloatQuantity = contractDetails.getAfloatQuantity().subtract(changeQuantity);
+                contractDetails.setAfloatQuantity(afloatQuantity);
             }
 
         }

+ 28 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/QualityTestingDetailsService.java

@@ -0,0 +1,28 @@
+package com.fjhx.service.quality;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.quality.QualityTestingDetails;
+import com.fjhx.params.quality.QualityTestingDetailsVo;
+import com.fjhx.base.StorageBaseService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 质检明细 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+public interface QualityTestingDetailsService extends StorageBaseService<QualityTestingDetails> {
+
+    Page<QualityTestingDetails> getPage(Map<String, String> condition);
+
+    void add(QualityTestingDetailsVo qualityTestingDetailsVo);
+
+    void edit(QualityTestingDetailsVo qualityTestingDetailsVo);
+
+    void delete(QualityTestingDetailsVo qualityTestingDetailsVo);
+
+}

+ 26 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/QualityTestingService.java

@@ -0,0 +1,26 @@
+package com.fjhx.service.quality;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
+import com.fjhx.base.StorageBaseService;
+import com.fjhx.entity.quality.QualityTesting;
+import com.fjhx.entity.water.WaterTag;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 质检 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+public interface QualityTestingService extends StorageBaseService<QualityTesting> {
+
+    Page<Map<String, Object>> getPage(Condition condition);
+
+    void create(List<WaterTag> waterTagList);
+
+}

+ 54 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/impl/QualityTestingDetailsServiceImpl.java

@@ -0,0 +1,54 @@
+package com.fjhx.service.quality.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.utils.WrapperUtil;
+import com.fjhx.entity.quality.QualityTestingDetails;
+import com.fjhx.params.quality.QualityTestingDetailsVo;
+import com.fjhx.mapper.quality.QualityTestingDetailsMapper;
+import com.fjhx.service.quality.QualityTestingDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 质检明细 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+@Service
+public class QualityTestingDetailsServiceImpl extends ServiceImpl<QualityTestingDetailsMapper, QualityTestingDetails> implements QualityTestingDetailsService {
+
+    @Override
+    public Page<QualityTestingDetails> getPage(Map<String, String> condition) {
+
+        QueryWrapper<QualityTestingDetails> wrapper = Wrappers.query();
+
+        WrapperUtil.init(condition, wrapper)
+                .createTimeDesc();
+
+        Page<QualityTestingDetails> page = page(condition, wrapper);
+        return page;
+    }
+
+    @Override
+    public void add(QualityTestingDetailsVo qualityTestingDetailsVo) {
+        save(qualityTestingDetailsVo);
+    }
+
+    @Override
+    public void edit(QualityTestingDetailsVo qualityTestingDetailsVo) {
+        updateById(qualityTestingDetailsVo);
+    }
+
+    @Override
+    public void delete(QualityTestingDetailsVo qualityTestingDetailsVo) {
+        removeById(qualityTestingDetailsVo.getId());
+    }
+
+}

+ 132 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/impl/QualityTestingServiceImpl.java

@@ -0,0 +1,132 @@
+package com.fjhx.service.quality.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.Condition;
+import com.fjhx.base.StorageBaseEntity;
+import com.fjhx.constants.StatusConstant;
+import com.fjhx.entity.material.Material;
+import com.fjhx.entity.quality.QualityTesting;
+import com.fjhx.entity.water.WaterBatch;
+import com.fjhx.entity.water.WaterTag;
+import com.fjhx.enums.PurchaseProgressEnum;
+import com.fjhx.mapper.quality.QualityTestingMapper;
+import com.fjhx.service.material.MaterialService;
+import com.fjhx.service.quality.QualityTestingService;
+import com.fjhx.service.water.WaterBatchService;
+import com.fjhx.utils.BigDecimalUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 质检 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-26
+ */
+@Service
+public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper, QualityTesting> implements QualityTestingService {
+
+    @Autowired
+    private MaterialService materialService;
+
+    @Autowired
+    private WaterBatchService waterBatchService;
+
+    @Override
+    public Page<Map<String, Object>> getPage(Condition condition) {
+
+        QueryWrapper<Object> wrapper = Wrappers.query();
+
+        return baseMapper.getPage(condition.getPage(), wrapper);
+    }
+
+    @Override
+    public synchronized void create(List<WaterTag> waterTagList) {
+
+        // 获取第一次入库标签的批次号
+        List<Long> waterBatchIdList = waterTagList.stream()
+                .filter(waterTag -> waterTag.getPurchaseProgress() < PurchaseProgressEnum.WAREHOUSING.getType())
+                .map(WaterTag::getWaterBatchId)
+                .distinct()
+                .collect(Collectors.toList());
+        if (waterBatchIdList.size() == 0) return;
+
+        // 查看已生成质检单的批次
+        List<Long> list = list(Wrappers.<QualityTesting>lambdaQuery()
+                .select(QualityTesting::getWaterBatchId)
+                .in(QualityTesting::getWaterBatchId, waterBatchIdList)
+        ).stream().map(QualityTesting::getWaterBatchId).collect(Collectors.toList());
+
+        // 排除已经生成质检单的批次
+        List<Long> needCreateBatchIdList = waterBatchIdList.stream().filter(item -> !list.contains(item)).collect(Collectors.toList());
+        if (needCreateBatchIdList.size() == 0) return;
+
+        // 获取批次id 物料id map
+        Map<Long, Long> waterBatchIdMaterialIdMap = waterTagList.stream()
+                .filter(item -> needCreateBatchIdList.contains(item.getWaterBatchId()))
+                .collect(Collectors.toMap(WaterTag::getWaterBatchId, WaterTag::getMaterialId, (v1, v2) -> v1));
+
+        // 批次id 入库卷数 map
+        Map<Long, Integer> waterBatchIdTagCountMap = waterBatchService.listByIds(waterBatchIdMaterialIdMap.keySet())
+                .stream().collect(Collectors.toMap(StorageBaseEntity::getId, WaterBatch::getTagCount));
+
+        // 物料id 质检比例 map
+        Map<Long, BigDecimal> materialCheckRateMap = materialService.list(Wrappers.<Material>lambdaQuery()
+                .select(StorageBaseEntity::getId, Material::getCheckRate)
+                .in(StorageBaseEntity::getId, new HashSet<>(waterBatchIdMaterialIdMap.values()))
+        ).stream().collect(Collectors.toMap(StorageBaseEntity::getId, Material::getCheckRate));
+
+        // 质检单
+        List<QualityTesting> qualityTestingList = new ArrayList<>();
+        waterBatchIdMaterialIdMap.forEach((k, v) -> {
+
+            QualityTesting qualityTesting = new QualityTesting();
+            qualityTesting.setCode(getCode());
+            qualityTesting.setWaterBatchId(k);
+            qualityTesting.setCompleteStatus(StatusConstant.NO);
+
+            // 获取质检比例
+            BigDecimal checkRate = materialCheckRateMap.get(v);
+
+            // 入库数量
+            Integer tagCount = waterBatchIdTagCountMap.get(k);
+
+            int checkNum = BigDecimalUtil.multiply(checkRate, tagCount, 0, RoundingMode.CEILING).intValue();
+            qualityTesting.setCheckNum(checkNum);
+            qualityTesting.setHadCheckNum(0);
+            qualityTesting.setCheckRate(checkRate);
+            qualityTesting.setCheckQuantity(BigDecimal.ZERO);
+            qualityTesting.setCheckArea(BigDecimal.ZERO);
+
+            qualityTestingList.add(qualityTesting);
+        });
+
+        // 添加质检单
+        saveBatch(qualityTestingList);
+
+        // 修改批次出货状态
+        waterBatchService.updateShipmentStatus(waterBatchIdMaterialIdMap.keySet());
+    }
+
+
+    private static String getCode() {
+        try {
+            Thread.sleep(1);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        return "TP-" + DateUtil.format(new Date(), "yyMMdd-HHmmss-SSS");
+    }
+
+}

+ 2 - 4
hx-service/storage-restructure/src/main/java/com/fjhx/service/stock/impl/StockServiceImpl.java

@@ -13,7 +13,6 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -47,10 +46,9 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
                 }
         ));
 
-        Set<Long> changeMaterialId = changeStockMap.keySet();
 
         // 获取库存信息
-        List<Stock> stockList = listByIds(changeMaterialId);
+        List<Stock> stockList = listByIds(changeStockMap.keySet());
         // 库存信息
         Map<Long, Stock> stockMap = stockList.stream().collect(Collectors.toMap(Stock::getMaterialId, item -> item));
 
@@ -58,7 +56,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         for (Stock item : changeStockMap.values()) {
             Long materialId = item.getMaterialId();
 
-            // 获取库存信息
+            // 获取库存信息
             Stock stock = stockMap.get(materialId);
 
             // 如果是入库

+ 3 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterBatchService.java

@@ -5,6 +5,7 @@ import com.fjhx.entity.water.WaterBatch;
 import com.fjhx.params.water.WaterBatchVo;
 
 import java.util.Map;
+import java.util.Set;
 
 /**
  * <p>
@@ -24,4 +25,6 @@ public interface WaterBatchService extends StorageBaseService<WaterBatch> {
 
     void shipment(WaterBatch waterBatch);
 
+    void updateShipmentStatus(Set<Long> idSet);
+
 }

+ 10 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterBatchServiceImpl.java

@@ -3,6 +3,7 @@ package com.fjhx.service.water.impl;
 import cn.hutool.core.convert.Convert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.StorageBaseEntity;
 import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.contract.ContractDetails;
 import com.fjhx.entity.water.WaterBatch;
@@ -20,6 +21,7 @@ import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * <p>
@@ -135,6 +137,14 @@ public class WaterBatchServiceImpl extends ServiceImpl<WaterBatchMapper, WaterBa
         contractDetailsService.updateShipmentQuantity(waterBatch.getId());
     }
 
+    @Override
+    public void updateShipmentStatus(Set<Long> idSet) {
+        update(Wrappers.<WaterBatch>lambdaUpdate()
+                .in(StorageBaseEntity::getId, idSet)
+                .set(WaterBatch::getShipmentStatus, StatusConstant.YES)
+        );
+    }
+
     private String getCode(String contractCode) {
 
         Assert.notEmpty(contractCode, "合同编码不能为空");

+ 11 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterServiceImpl.java

@@ -10,6 +10,7 @@ import com.fjhx.enums.OutTypeEnum;
 import com.fjhx.mapper.water.WaterMapper;
 import com.fjhx.params.water.WaterVo;
 import com.fjhx.service.contract.ContractDetailsService;
+import com.fjhx.service.quality.QualityTestingService;
 import com.fjhx.service.stock.StockService;
 import com.fjhx.service.water.WaterDetailService;
 import com.fjhx.service.water.WaterService;
@@ -45,6 +46,9 @@ public class WaterServiceImpl extends ServiceImpl<WaterMapper, Water> implements
     @Autowired
     private ContractDetailsService contractDetailsService;
 
+    @Autowired
+    private QualityTestingService qualityTestingService;
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(WaterVo waterVo) {
@@ -73,9 +77,15 @@ public class WaterServiceImpl extends ServiceImpl<WaterMapper, Water> implements
         // 修改标签在库信息
         waterTagService.editInHouse(typeEnum, waterTagList, waterVo.getStockHouseId());
 
-        // 如果是入库且标签不是本场入库状态,则更新合同到货数量和在途数量
+        // 如果是入库
         if (typeEnum instanceof InTypeEnum) {
+
+            // 如果标签不是本场入库状态,则更新合同到货数量和在途数量
             contractDetailsService.updateAfloatAndArrivalQuantity(waterTagList);
+
+            // 生成质检单
+            qualityTestingService.create(waterTagList);
+
         }
 
     }

+ 20 - 3
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterTagServiceImpl.java

@@ -168,16 +168,32 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
         );
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void bindingRfid(Long id, String rfidCode) {
+
+        Date date = new Date();
+        Long userId = AuthUtil.getUserId();
+
+        // 原先正在使用的标签变为未使用
+        update(Wrappers.<WaterTag>lambdaUpdate()
+                .ne(StorageBaseEntity::getId, id)
+                .eq(WaterTag::getRfidCode, rfidCode)
+                .set(WaterTag::getUseStatus, StatusConstant.NO)
+                .set(StorageBaseEntity::getUpdateTime, date)
+                .set(StorageBaseEntity::getUpdateUser, userId)
+        );
+
         update(Wrappers.<WaterTag>lambdaUpdate()
                 .eq(StorageBaseEntity::getId, id)
                 .set(WaterTag::getRfidCode, rfidCode)
                 .set(WaterTag::getPurchaseProgress, PurchaseProgressEnum.LABELING.getType())
-                .set(WaterTag::getLabelUserId, AuthUtil.getUserId())
-                .set(StorageBaseEntity::getUpdateTime, new Date())
-                .set(StorageBaseEntity::getUpdateUser, AuthUtil.getUserId())
+                .set(WaterTag::getLabelUserId, userId)
+                .set(WaterTag::getUseStatus, StatusConstant.YES)
+                .set(StorageBaseEntity::getUpdateTime, date)
+                .set(StorageBaseEntity::getUpdateUser, userId)
         );
+
     }
 
     @Override
@@ -314,6 +330,7 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
         waterTagTemp.setPurchaseProgress(PurchaseProgressEnum.CODING.getType());
         waterTagTemp.setCheckStatus(CheckStatusEnum.NO_QUALITY_INSPECTION.getType());
         waterTagTemp.setInHouse(StatusConstant.NO);
+        waterTagTemp.setUseStatus(StatusConstant.NO);
         return waterTagTemp;
     }
 

+ 88 - 75
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackPlanServiceImpl.java

@@ -34,56 +34,60 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
 
     private static final RestTemplate restTemplate = new RestTemplate();
 
+    private static final Object obj = new Object();
+
     @Autowired
     private StockBackPlanDetailsService stockBackPlanDetailsService;
 
     @Override
-    public synchronized void getScheduleTask() {
+    public void getScheduleTask() {
 
-        // 请求v3接口获取token
-        String token = getToken();
+        synchronized (obj) {
 
-        // 请求v3接口获取所有人领料信息
-        Date date = new Date();
+            // 请求v3接口获取token
+            String token = getToken();
 
-        String beginDate = DateUtil.format(DateUtil.offsetDay(date, -4), "yyyy-MM-dd 00:00:00");
-        String endDate = DateUtil.format(date, "yyyy-MM-dd 23:59:59");
+            // 请求v3接口获取所有人领料信息
+            Date date = new Date();
 
-        String url = "http://mes.cfmfactory.com:8087/MesWeb/planPersonOutAction.do?action=list&beginDate="
-                + beginDate + "&endDate=" + endDate + "&access_token=" + token;
+            String beginDate = DateUtil.format(DateUtil.offsetDay(date, -4), "yyyy-MM-dd 00:00:00");
+            String endDate = DateUtil.format(date, "yyyy-MM-dd 23:59:59");
 
-        String resultStr = restTemplate.getForEntity(url, String.class).getBody();
-        JSONObject resultMap = JSONObject.parseObject(resultStr);
-        // 接收到的消息
-        List<JSONObject> items = (List<JSONObject>) resultMap.get("items");
+            String url = "http://mes.cfmfactory.com:8087/MesWeb/planPersonOutAction.do?action=list&beginDate="
+                    + beginDate + "&endDate=" + endDate + "&access_token=" + token;
 
-        remove(Wrappers.<StockBackPlan>lambdaQuery().between(StockBackPlan::getPlanTime, beginDate, endDate));
+            String resultStr = restTemplate.getForEntity(url, String.class).getBody();
+            JSONObject resultMap = JSONObject.parseObject(resultStr);
+            // 接收到的消息
+            List<JSONObject> items = (List<JSONObject>) resultMap.get("items");
 
-        Map<String, StockBackPlan> flagMap = new HashMap<>();
+            remove(Wrappers.<StockBackPlan>lambdaQuery().between(StockBackPlan::getPlanTime, beginDate, endDate));
 
-        Date newDate = new Date();
+            Map<String, StockBackPlan> flagMap = new HashMap<>();
 
-        // 循环领料信息
-        items.forEach(item -> {
-            // 喷印人员工号
-            String distributor = item.get("distributor").toString();
-            // 打纸人员工号
-            String paperMan = item.get("paperMan").toString();
-            // 排班面积
-            BigDecimal plantotalsquare = new BigDecimal(item.get("plantotalsquare").toString());
-            // 物料名称
-            String material = item.get("material").toString();
-            // 排班时间
-            String planDate = item.get("planDate").toString();
+            Date newDate = new Date();
 
-            // 喷印人员工号添加领料记录标记
-            addOrEditFlagMap(flagMap, distributor, plantotalsquare, planDate, material, newDate);
+            // 循环领料信息
+            items.forEach(item -> {
+                // 喷印人员工号
+                String distributor = item.get("distributor").toString();
+                // 打纸人员工号
+                String paperMan = item.get("paperMan").toString();
+                // 排班面积
+                BigDecimal plantotalsquare = new BigDecimal(item.get("plantotalsquare").toString());
+                // 物料名称
+                String material = item.get("material").toString();
+                // 排班时间
+                String planDate = item.get("planDate").toString();
 
-            // 打纸人员工号添加领料记录标记
-            if (ObjectUtil.isNotEmpty(paperMan) && !Objects.equals(paperMan, "0")) {
-                addOrEditFlagMap(flagMap, paperMan, plantotalsquare, planDate, "热转印纸", newDate);
-            }
-        });
+                // 喷印人员工号添加领料记录标记
+                addOrEditFlagMap(flagMap, distributor, plantotalsquare, planDate, material, newDate);
+
+                // 打纸人员工号添加领料记录标记
+                if (ObjectUtil.isNotEmpty(paperMan) && !Objects.equals(paperMan, "0")) {
+                    addOrEditFlagMap(flagMap, paperMan, plantotalsquare, planDate, "热转印纸", newDate);
+                }
+            });
 
 //        List<Map<String, Object>> list = baseMapper.getList(Wrappers.<Scheduling>lambdaQuery()
 //                .between(Scheduling::getPlanDate, beginDate, endDate));
@@ -97,51 +101,58 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
 //            addOrEditFlagMap(flagMap, jobNo, quantity, planDate, materialName, newDate);
 //        }
 
-        // 更新当天的出库单
-        saveBatch(new ArrayList<>(flagMap.values()));
+            // 更新当天的出库单
+            saveBatch(new ArrayList<>(flagMap.values()));
+
+        }
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public synchronized void statisticsScheduleDateTask() {
-
-        // 统计近3天排班
-        Date endDate = new Date();
-        Date beginDate = DateUtil.beginOfDay(DateUtil.offsetDay(endDate, -2));
-
-        List<StockBackPlan> list = list(Wrappers.<StockBackPlan>lambdaQuery()
-                .between(StockBackPlan::getPlanTime, beginDate, endDate));
-
-        // 工号,物料名称,排班时间封装成key,对象为value
-        Map<String, StockBackPlanDetails> stockBackPlanMap = list.stream().collect(Collectors.toMap(
-                item -> item.getJobNo() + item.getPlanMaterial() + item.getPlanTime(),
-                item -> {
-                    StockBackPlanDetails stockBackPlanDetails =
-                            createStockBackPlanDetails(item.getJobNo(), item.getPlanMaterial(), item.getPlanTime());
-                    stockBackPlanDetails.setQuantity(item.getQuantity());
-                    return stockBackPlanDetails;
-                }
-        ));
+    public void statisticsScheduleDateTask() {
+
+        synchronized (obj) {
+
+            // 统计近3天排班
+            Date endDate = new Date();
+            Date beginDate = DateUtil.beginOfDay(DateUtil.offsetDay(endDate, -26));
+
+            List<StockBackPlan> list = list(Wrappers.<StockBackPlan>lambdaQuery()
+                    .between(StockBackPlan::getPlanTime, beginDate, endDate));
 
-        stockBackPlanDetailsService.remove(Wrappers.<StockBackPlanDetails>lambdaQuery()
-                .between(StockBackPlanDetails::getPlanTime, beginDate, endDate));
+            stockBackPlanDetailsService.remove(Wrappers.<StockBackPlanDetails>lambdaQuery()
+                    .between(StockBackPlanDetails::getPlanTime, beginDate, endDate));
 
-        // 查询出库
-        issue(beginDate, stockBackPlanMap);
+            // 工号,物料名称,排班时间封装成key,对象为value
+            Map<String, StockBackPlanDetails> stockBackPlanMap = list.stream().collect(Collectors.toMap(
+                    item -> item.getJobNo() + item.getPlanMaterial() + item.getPlanTime(),
+                    item -> {
+                        StockBackPlanDetails stockBackPlanDetails =
+                                createStockBackPlanDetails(item.getJobNo(), item.getPlanMaterial(), item.getPlanTime());
+                        stockBackPlanDetails.setQuantity(item.getQuantity());
+                        return stockBackPlanDetails;
+                    }
+            ));
 
-        // 查询回仓
-        returnWarehouse(beginDate, stockBackPlanMap);
+            // 查询出库
+            issue(beginDate, stockBackPlanMap);
 
-        // 物料修正
-        correct(beginDate, stockBackPlanMap);
+            // 查询回仓
+            returnWarehouse(beginDate, stockBackPlanMap);
 
-        // 转入
-        transferIn(beginDate, stockBackPlanMap);
+            // 物料修正
+            correct(beginDate, stockBackPlanMap);
 
-        // 转出
-        transferOut(beginDate, stockBackPlanMap);
+            // 转入
+            transferIn(beginDate, stockBackPlanMap);
+
+            // 转出
+            transferOut(beginDate, stockBackPlanMap);
+
+            stockBackPlanDetailsService.saveBatch(new ArrayList<>(stockBackPlanMap.values()));
+
+        }
 
-        stockBackPlanDetailsService.saveBatch(new ArrayList<>(stockBackPlanMap.values()));
     }
 
     private StockBackPlanDetails createStockBackPlanDetails(String jobNo, String materialName, Date planDate) {
@@ -170,6 +181,8 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
         stockBackPlanDetails.setTransferInArea(BigDecimal.ZERO);
         stockBackPlanDetails.setTransferInNum(0);
 
+        stockBackPlanDetails.setCreateTime(new Date());
+
         return stockBackPlanDetails;
     }
 
@@ -361,7 +374,7 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
      */
     private void transferIn(Date beginDate, Map<String, StockBackPlanDetails> stockBackPlanMap) {
         List<Map<String, Object>> transferPickingList = baseMapper.getTransferPickingList(Wrappers.query()
-                .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 7:30:00"))
+                .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
                 .eq("st.status", StatusConstant.YES)
                 .eq("st.del_flag", 0)
         );
@@ -373,9 +386,9 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
             // 时
             int h = Integer.parseInt(DateUtil.format(createTime, "H"));
             // 分
-            int m = Integer.parseInt(DateUtil.format(createTime, "m"));
+//            int m = Integer.parseInt(DateUtil.format(createTime, "m"));
             // 小于7点30算前一日
-            if (h < 7 || (h == 7 && m <= 30)) {
+            if (h < 10) {
                 createTime = DateUtil.offsetDay(createTime, -1);
             }
 
@@ -422,7 +435,7 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
     private void transferOut(Date beginDate, Map<String, StockBackPlanDetails> stockBackPlanMap) {
 
         List<Map<String, Object>> transferBackList = baseMapper.getTransferBackList(Wrappers.query()
-                .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 07:30:00"))
+                .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
                 .eq("st.status", StatusConstant.YES)
                 .eq("st.del_flag", 0)
         );
@@ -433,9 +446,9 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
             Date createTime = (Date) map.get("createTime");
 
             int h = Integer.parseInt(DateUtil.format(createTime, "H"));
-            int m = Integer.parseInt(DateUtil.format(createTime, "m"));
+//            int m = Integer.parseInt(DateUtil.format(createTime, "m"));
             // 小于7点30点算前一日
-            if (h < 7 || (h == 7 && m <= 30)) {
+            if (h < 10) {
                 createTime = DateUtil.offsetDay(createTime, -1);
             }
             // 排班时间

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

@@ -43,7 +43,7 @@ public class ScheduleTaskController {
     /**
      * 获取排班面积
      */
-    @Scheduled(cron = "0 35 7,19 * * ?")
+    @Scheduled(cron = "0 0/5 * * * ?")
 //    @Scheduled(cron = "0 * * * * ?")
     private void getScheduleTask() {
         if (BladeApplication.isLocalDev()) {
@@ -56,7 +56,7 @@ public class ScheduleTaskController {
      * 统计排班数据
      */
     @Scheduled(cron = "30 0/5 * * * ?")
-//    @Scheduled(cron = "0 43 * * * ?")
+//    @Scheduled(cron = "0 08 9 * * ?")
     private void statisticsScheduleDateTask() {
         if (BladeApplication.isLocalDev()) {
             return;