Browse Source

杰生重构

home 2 years ago
parent
commit
81ae62a199
24 changed files with 707 additions and 102 deletions
  1. 1 1
      hx-common/code-generator/src/main/java/com/fjhx/modular/StorageRestructure.java
  2. 2 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/constants/DetpIdConstant.java
  3. 16 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/constants/HouseConstant.java
  4. 0 18
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/constants/InOutTypeConstant.java
  5. 1 1
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/constants/WebSocketConstant.java
  6. 87 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/check/Check.java
  7. 1 1
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/v3/V3PlanStatistics.java
  8. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/check/CheckEx.java
  9. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/check/CheckVo.java
  10. 108 2
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/v3/V3PlanStatisticsEx.java
  11. 56 0
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/check/CheckController.java
  12. 30 9
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/task/ScheduleTaskController.java
  13. 24 5
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/v3/V3PlanStatisticsController.java
  14. 2 1
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/water/WaterBackController.java
  15. 1 0
      hx-service/storage-restructure/src/main/java/com/fjhx/listener/WebSocketEventListener.java
  16. 16 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/check/CheckMapper.java
  17. 5 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/check/CheckMapper.xml
  18. 33 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/check/CheckService.java
  19. 61 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/check/impl/CheckServiceImpl.java
  20. 10 4
      hx-service/storage-restructure/src/main/java/com/fjhx/service/v3/V3PlanStatisticsService.java
  21. 141 9
      hx-service/storage-restructure/src/main/java/com/fjhx/service/v3/impl/V3PlanStatisticsServiceImpl.java
  22. 4 1
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterBackService.java
  23. 29 14
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterBackServiceImpl.java
  24. 45 36
      hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockWaterMapper.xml

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

@@ -12,7 +12,7 @@ public class StorageRestructure {
         CodeGenerator.MODULAR_NAME = "storage-restructure";
 
         // 需要生成的表名称,多表用,隔开
-        CodeGenerator.INCLUDE = "v3_plan_statistics";
+        CodeGenerator.INCLUDE = "check";
 
         // mysql连接
         CodeGenerator.MYSQL_URL = "36.134.91.96:17330";

+ 2 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/constants/DetpIdConstant.java

@@ -17,4 +17,6 @@ public interface DetpIdConstant {
      */
     Long TYPING = 1552549638060392449L;
 
+
+
 }

+ 16 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/constants/HouseConstant.java

@@ -0,0 +1,16 @@
+package com.fjhx.constants;
+
+public class HouseConstant {
+
+    /**
+     * 一楼仓库id
+     */
+    Long groundFloorId = 1555475505304203271L;
+
+
+    /**
+     * 四楼仓库id
+     */
+    Long fourthFloorId = 1555475505304203272L;
+
+}

+ 0 - 18
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/constants/InOutTypeConstant.java

@@ -1,18 +0,0 @@
-package com.fjhx.constants;
-
-/**
- * 出入库类型
- */
-public interface InOutTypeConstant {
-
-    /**
-     * 出库
-     */
-    Integer OUT = 0;
-
-    /**
-     * 入库
-     */
-    Integer IN = 1;
-
-}

+ 1 - 1
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/constants/WebSocketConstant.java

@@ -13,7 +13,7 @@ public interface WebSocketConstant {
     String FORWARD_USER_ID = "forwardUserId";
 
     /**
-     * 转发session key
+     * 转发sessionId key
      */
     String FORWARD_SESSION_ID = "forwardSessionId";
 

+ 87 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/check/Check.java

@@ -0,0 +1,87 @@
+package com.fjhx.entity.check;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.fjhx.base.StorageBaseEntity;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 盘点
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-11-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class Check extends StorageBaseEntity {
+
+
+    /**
+     * 全仓扫描结果 (0异常,1正常)
+     */
+    private Integer checkResult;
+
+    /**
+     * 盘点类型 (1自动盘点,2指定用户盘点)
+     */
+    private Integer type;
+
+    /**
+     * 盘点状态 (0已发起,1部分盘点,2已盘点)
+     */
+    private Integer status;
+
+    /**
+     * 人工盘点结果 (0异常,1正常)
+     */
+    private Integer peopleCheckResut;
+
+    /**
+     * 审批状态(0待审批,1审批中,2已审批,3已驳回,4已撤回)
+     */
+    private Integer flowStatus;
+
+    /**
+     * 操作人
+     */
+    private Long operUserId;
+
+    /**
+     * 仓库id
+     */
+    private Long stockHouseId;
+
+    /**
+     * 开始盘点时间
+     */
+    private Date beginTime;
+
+    /**
+     * 结束盘点时间
+     */
+    private Date endTime;
+
+    /**
+     * 任务执行最小时间
+     */
+    private Date runMinTime;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+    private String oldId;
+
+
+}

+ 1 - 1
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/v3/V3PlanStatistics.java

@@ -43,7 +43,7 @@ public class V3PlanStatistics implements Serializable {
     private Date planDate;
 
     /**
-     * 领料面积
+     * 排班面积
      */
     private BigDecimal planArea;
 

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

@@ -0,0 +1,17 @@
+package com.fjhx.params.check;
+
+import com.fjhx.entity.check.Check;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 盘点
+ *
+ * @author ${author}
+ * @since 2022-11-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CheckEx extends Check {
+
+}

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

@@ -0,0 +1,17 @@
+package com.fjhx.params.check;
+
+import com.fjhx.entity.check.Check;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 盘点
+ *
+ * @author ${author}
+ * @since 2022-11-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CheckVo extends Check {
+
+}

+ 108 - 2
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/v3/V3PlanStatisticsEx.java

@@ -1,12 +1,14 @@
 package com.fjhx.params.v3;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.fjhx.entity.v3.V3PlanStatistics;
+import com.fjhx.utils.BigDecimalUtil;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.math.BigDecimal;
+
 /**
- * 
- *
  * @author ${author}
  * @since 2022-10-31
  */
@@ -14,4 +16,108 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 public class V3PlanStatisticsEx extends V3PlanStatistics {
 
+    private String userName;
+
+    /**
+     * 实际使用面积
+     */
+    public BigDecimal getActualUseArea() {
+        return getPickingArea()
+                .subtract(getBackArea())
+                .subtract(getTransferOutArea())
+                .add(getTransferInArea());
+    }
+
+    /**
+     * 使用率
+     */
+    public BigDecimal getUseRate() {
+        return BigDecimalUtil.init(getPlanArea()).multiply(100).divideTry(getActualUseArea(), 2).getValue();
+    }
+
+    @Override
+    public BigDecimal getPlanArea() {
+        return ObjectUtil.defaultIfNull(super.getPlanArea(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public BigDecimal getPickingArea() {
+        return ObjectUtil.defaultIfNull(super.getPickingArea(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public Integer getPickingNum() {
+        return ObjectUtil.defaultIfNull(super.getPickingNum(), 0);
+    }
+
+    @Override
+    public BigDecimal getPickingMoney() {
+        return ObjectUtil.defaultIfNull(super.getPickingMoney(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public BigDecimal getPickingMeters() {
+        return ObjectUtil.defaultIfNull(super.getPickingMeters(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public BigDecimal getBackMoney() {
+        return ObjectUtil.defaultIfNull(super.getBackMoney(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public Integer getBackNum() {
+        return ObjectUtil.defaultIfNull(super.getBackNum(), 0);
+    }
+
+    @Override
+    public BigDecimal getBackMeters() {
+        return ObjectUtil.defaultIfNull(super.getBackMeters(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public BigDecimal getTransferInMoney() {
+        return ObjectUtil.defaultIfNull(super.getTransferInMoney(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public BigDecimal getBackArea() {
+        return ObjectUtil.defaultIfNull(super.getBackArea(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public Integer getTransferInNum() {
+        return ObjectUtil.defaultIfNull(super.getTransferInNum(), 0);
+    }
+
+    @Override
+    public BigDecimal getTransferInMeters() {
+        return ObjectUtil.defaultIfNull(super.getTransferInMeters(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public BigDecimal getTransferInArea() {
+        return ObjectUtil.defaultIfNull(super.getTransferInArea(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public BigDecimal getTransferOutMoney() {
+        return ObjectUtil.defaultIfNull(super.getTransferOutMoney(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public Integer getTransferOutNum() {
+        return ObjectUtil.defaultIfNull(super.getTransferOutNum(), 0);
+    }
+
+    @Override
+    public BigDecimal getTransferOutMeters() {
+        return ObjectUtil.defaultIfNull(super.getTransferOutMeters(), BigDecimal.ZERO);
+    }
+
+    @Override
+    public BigDecimal getTransferOutArea() {
+        return ObjectUtil.defaultIfNull(super.getTransferOutArea(), BigDecimal.ZERO);
+    }
+
 }

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

@@ -0,0 +1,56 @@
+package com.fjhx.controller.check;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springblade.core.tool.api.R;
+import com.fjhx.entity.check.Check;
+import com.fjhx.params.check.CheckVo;
+import com.fjhx.service.check.CheckService;
+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-11-01
+ */
+@RestController
+@RequestMapping("/check")
+public class CheckController {
+
+    @Autowired
+    private CheckService checkService;
+
+    @PostMapping("/page")
+    public R page(@RequestBody Map<String, String> condition){
+        Page<Check> result = checkService.getPage(condition);
+        return R.success(result);
+    }
+
+    @PostMapping("/add")
+    public R add(@RequestBody CheckVo checkVo){
+        checkService.add(checkVo);
+        return R.success();
+    }
+
+    @PostMapping("/edit")
+    public R edit(@RequestBody CheckVo checkVo){
+        checkService.edit(checkVo);
+        return R.success();
+    }
+
+    @PostMapping("/delete")
+    public R delete(@RequestBody CheckVo checkVo){
+        checkService.delete(checkVo);
+        return R.success();
+    }
+
+}
+

+ 30 - 9
hx-service/storage-restructure/src/main/java/com/fjhx/controller/task/ScheduleTaskController.java

@@ -1,25 +1,46 @@
 package com.fjhx.controller.task;
 
+import com.fjhx.service.check.CheckService;
+import com.fjhx.service.v3.V3PlanService;
+import org.springblade.core.launch.BladeApplication;
+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;
 
 @Configuration
 @EnableScheduling
 public class ScheduleTaskController {
 
-//    @Autowired
-//    private V3PlanService v3PlanService;
+    @Autowired
+    private V3PlanService v3PlanService;
+
+    @Autowired
+    private CheckService checkService;
 
     /**
      * 获取排班面积
      */
-//    @Scheduled(cron = "0 0/5 * * * ?")
+    @Scheduled(cron = "0 0/5 * * * ?")
+//    @PostConstruct
+    private void statisticsOfFabricUtilizationRate() {
+        if (BladeApplication.isLocalDev()) {
+            return;
+        }
+        v3PlanService.statisticsOfFabricUtilizationRate(30);
+    }
+
+    /**
+     * 盘点
+     */
+    @Scheduled(cron = "0 0 1 * * ?")
 //    @PostConstruct
-//    private void statisticsOfFabricUtilizationRate() {
-////        if (BladeApplication.isLocalDev()) {
-////            return;
-////        }
-//        v3PlanService.statisticsOfFabricUtilizationRate(30);
-//    }
+    private void automaticCheck() {
+        if (BladeApplication.isLocalDev()) {
+            return;
+        }
+        checkService.automaticCheck();
+    }
+
 
 }

+ 24 - 5
hx-service/storage-restructure/src/main/java/com/fjhx/controller/v3/V3PlanStatisticsController.java

@@ -1,9 +1,10 @@
 package com.fjhx.controller.v3;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
+import com.fjhx.params.v3.V3PlanStatisticsEx;
 import org.springblade.core.tool.api.R;
-import com.fjhx.entity.v3.V3PlanStatistics;
-import com.fjhx.params.v3.V3PlanStatisticsVo;
 import com.fjhx.service.v3.V3PlanStatisticsService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -28,9 +29,27 @@ public class V3PlanStatisticsController {
     @Autowired
     private V3PlanStatisticsService v3PlanStatisticsService;
 
-    @PostMapping("/page")
-    public R page(@RequestBody Map<String, String> condition){
-        Page<V3PlanStatistics> result = v3PlanStatisticsService.getPage(condition);
+    /**
+     * 面料使用率用户统计
+     */
+    @PostMapping("/userStatistics")
+    public R userStatistics(@RequestBody Condition condition) {
+        Map<String, JSONObject> result = v3PlanStatisticsService.userStatistics(condition);
+        return R.success(result);
+    }
+
+    /**
+     * 面料使用率统计
+     */
+    @PostMapping("/statisticsDetails")
+    public R statisticsDetails(@RequestBody Condition condition) {
+        V3PlanStatisticsEx result = v3PlanStatisticsService.statisticsDetails(condition);
+        return R.success(result);
+    }
+
+    @PostMapping("/statisticsPage")
+    public R statisticsPage(@RequestBody Condition condition){
+        Page<V3PlanStatisticsEx> result = v3PlanStatisticsService.statisticsPage(condition);
         return R.success(result);
     }
 

+ 2 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/controller/water/WaterBackController.java

@@ -1,5 +1,6 @@
 package com.fjhx.controller.water;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.base.Condition;
 import com.fjhx.entity.water.WaterBack;
@@ -81,7 +82,7 @@ public class WaterBackController {
      */
     @PostMapping("/getUserByAppointDept")
     public R getUserByAppointDept() {
-        Map<String, Object> result = waterBackService.getUserByAppointDept();
+        Map<String, JSONObject> result = waterBackService.getUserByAppointDept();
         return R.success(result);
     }
 

+ 1 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/listener/WebSocketEventListener.java

@@ -52,6 +52,7 @@ public class WebSocketEventListener {
             case WebSocketConstant.PUSH_RFID:
                 WebSocketServer.sendInfo(sendEntity.getUserId(), sendEntity.getSessionId(), type, data);
                 break;
+
         }
 
     }

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

@@ -0,0 +1,16 @@
+package com.fjhx.mapper.check;
+
+import com.fjhx.entity.check.Check;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 盘点 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-11-01
+ */
+public interface CheckMapper extends BaseMapper<Check> {
+
+}

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

+ 33 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/check/CheckService.java

@@ -0,0 +1,33 @@
+package com.fjhx.service.check;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.StorageBaseService;
+import com.fjhx.entity.check.Check;
+import com.fjhx.params.check.CheckVo;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 盘点 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-11-01
+ */
+public interface CheckService extends StorageBaseService<Check> {
+
+    Page<Check> getPage(Map<String, String> condition);
+
+    void add(CheckVo checkVo);
+
+    void edit(CheckVo checkVo);
+
+    void delete(CheckVo checkVo);
+
+    /**
+     * 自动盘点
+     */
+    void automaticCheck();
+
+}

+ 61 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/check/impl/CheckServiceImpl.java

@@ -0,0 +1,61 @@
+package com.fjhx.service.check.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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.entity.check.Check;
+import com.fjhx.mapper.check.CheckMapper;
+import com.fjhx.params.check.CheckVo;
+import com.fjhx.service.check.CheckService;
+import com.fjhx.utils.WrapperUtil;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 盘点 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-11-01
+ */
+@Service
+public class CheckServiceImpl extends ServiceImpl<CheckMapper, Check> implements CheckService {
+
+    @Override
+    public Page<Check> getPage(Map<String, String> condition) {
+
+        QueryWrapper<Check> wrapper = Wrappers.query();
+
+        WrapperUtil.init(condition, wrapper)
+                .createTimeDesc();
+
+        Page<Check> page = page(condition, wrapper);
+        return page;
+    }
+
+    @Override
+    public void add(CheckVo checkVo) {
+        save(checkVo);
+    }
+
+    @Override
+    public void edit(CheckVo checkVo) {
+        updateById(checkVo);
+    }
+
+    @Override
+    public void delete(CheckVo checkVo) {
+        removeById(checkVo.getId());
+    }
+
+    @Override
+    public void automaticCheck() {
+
+        
+
+    }
+
+}

+ 10 - 4
hx-service/storage-restructure/src/main/java/com/fjhx/service/v3/V3PlanStatisticsService.java

@@ -1,15 +1,17 @@
 package com.fjhx.service.v3;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.entity.v3.V3PlanStatistics;
-import com.fjhx.params.v3.V3PlanStatisticsVo;
+import com.fjhx.base.Condition;
 import com.fjhx.base.StorageBaseService;
+import com.fjhx.entity.v3.V3PlanStatistics;
+import com.fjhx.params.v3.V3PlanStatisticsEx;
 
 import java.util.Map;
 
 /**
  * <p>
- *  服务类
+ * 服务类
  * </p>
  *
  * @author ${author}
@@ -17,6 +19,10 @@ import java.util.Map;
  */
 public interface V3PlanStatisticsService extends StorageBaseService<V3PlanStatistics> {
 
-    Page<V3PlanStatistics> getPage(Map<String, String> condition);
+    Map<String, JSONObject> userStatistics(Condition condition);
+
+    V3PlanStatisticsEx statisticsDetails(Condition condition);
+
+    Page<V3PlanStatisticsEx> statisticsPage(Condition condition);
 
 }

+ 141 - 9
hx-service/storage-restructure/src/main/java/com/fjhx/service/v3/impl/V3PlanStatisticsServiceImpl.java

@@ -1,21 +1,35 @@
 package com.fjhx.service.v3.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.Condition;
+import com.fjhx.constants.DetpIdConstant;
 import com.fjhx.entity.v3.V3PlanStatistics;
-import com.fjhx.params.v3.V3PlanStatisticsVo;
 import com.fjhx.mapper.v3.V3PlanStatisticsMapper;
+import com.fjhx.params.v3.V3PlanStatisticsEx;
 import com.fjhx.service.v3.V3PlanStatisticsService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.service.water.WaterBackService;
+import com.fjhx.utils.BigDecimalUtil;
+import com.fjhx.utils.HxBeanUtil;
+import com.fjhx.utils.UserClientUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author ${author}
@@ -24,16 +38,134 @@ import java.util.Map;
 @Service
 public class V3PlanStatisticsServiceImpl extends ServiceImpl<V3PlanStatisticsMapper, V3PlanStatistics> implements V3PlanStatisticsService {
 
+    @Autowired
+    private WaterBackService waterBackService;
+
     @Override
-    public Page<V3PlanStatistics> getPage(Map<String, String> condition) {
+    public Map<String, JSONObject> userStatistics(Condition condition) {
+        Date beginTime = condition.getBeginTime();
+        Date endTime = condition.getEndTime();
+
+        Map<String, JSONObject> userByAppointDept = waterBackService.getUserByAppointDept();
+
+        List<V3PlanStatistics> planList = list(Wrappers.<V3PlanStatistics>lambdaQuery()
+                .between(V3PlanStatistics::getPlanDate, beginTime, endTime));
+
+        Map<Long, List<V3PlanStatistics>> collect = planList.stream().collect(Collectors.groupingBy(V3PlanStatistics::getUserId));
+
+        for (JSONObject json : userByAppointDept.values()) {
+            JSONArray list = json.getJSONArray("list");
+
+            for (int i = 0; i < list.size(); i++) {
+                JSONObject userItem = (JSONObject) list.get(i);
 
-        QueryWrapper<V3PlanStatistics> wrapper = Wrappers.query();
+                List<V3PlanStatistics> v3PlanStatisticsList = collect.get(userItem.getLong("id"));
+                if (list.size() > 0) {
+                    BigDecimal planArea = BigDecimal.ZERO;
+                    BigDecimal pickingArea = BigDecimal.ZERO;
+                    BigDecimal backArea = BigDecimal.ZERO;
+
+                    for (V3PlanStatistics item : v3PlanStatisticsList) {
+                        planArea = planArea.add(item.getPlanArea());
+                        pickingArea = pickingArea.add(item.getPickingArea()).add(item.getTransferInArea());
+                        backArea = backArea.add(item.getBackArea()).add(item.getTransferOutArea());
+                    }
+
+                    // 赋值使用率
+                    BigDecimal value = BigDecimalUtil.init(planArea).divideTry(pickingArea.subtract(backArea), 4)
+                            .multiply(100).getValue();
+
+                    userItem.put("useRate", value);
+
+                } else {
+                    userItem.put("useRate", BigDecimal.ZERO);
+                }
+            }
+        }
+        return userByAppointDept;
+    }
+
+    @Override
+    public V3PlanStatisticsEx statisticsDetails(Condition condition) {
 
-        WrapperUtil.init(condition, wrapper)
-                .createTimeDesc();
+        V3PlanStatisticsEx result = new V3PlanStatisticsEx();
+
+        QueryWrapper<V3PlanStatistics> wrapper = getWrapper(condition);
+        List<V3PlanStatistics> list = list(wrapper);
+
+        for (V3PlanStatistics item : list) {
+            result.setPlanArea(result.getPlanArea().add(item.getPlanArea()));
+            result.setPickingMoney(result.getPickingMoney().add(item.getPickingMoney()));
+            result.setPickingNum(result.getPickingNum() + item.getPickingNum());
+            result.setPickingMeters(result.getPickingMeters().add(item.getPickingMeters()));
+            result.setPickingArea(result.getPickingArea().add(item.getPickingArea()));
+            result.setBackMoney(result.getBackMoney().add(item.getBackMoney()));
+            result.setBackNum(result.getBackNum() + item.getBackNum());
+            result.setBackMeters(result.getBackMeters().add(item.getBackMeters()));
+            result.setBackArea(result.getBackArea().add(item.getBackArea()));
+            result.setTransferInArea(result.getTransferInArea().add(item.getTransferInArea()));
+            result.setTransferOutArea(result.getTransferOutArea().add(item.getTransferOutArea()));
+        }
+
+        return result;
+    }
+
+    @Override
+    public Page<V3PlanStatisticsEx> statisticsPage(Condition condition) {
+
+        QueryWrapper<V3PlanStatistics> wrapper = getWrapper(condition);
+        wrapper.lambda().groupBy(Arrays.asList(V3PlanStatistics::getUserId, V3PlanStatistics::getPlanMaterial));
+        wrapper.select(
+                "user_id",
+                "plan_material",
+                "sum(plan_area) planArea",
+                "sum(picking_money) pickingMoney",
+                "sum(picking_num) pickingNum",
+                "sum(picking_meters) pickingMeters",
+                "sum(picking_area) pickingArea",
+                "sum(back_money) backMoney",
+                "sum(back_num) backNum",
+                "sum(back_meters) backMeters",
+                "sum(back_area) backArea",
+                "sum(transfer_in_area) transferInArea",
+                "sum(transfer_out_area) transferOutArea"
+        );
 
         Page<V3PlanStatistics> page = page(condition, wrapper);
-        return page;
+
+        Page<V3PlanStatisticsEx> result = HxBeanUtil.copyPageEx(page, V3PlanStatisticsEx.class);
+        List<V3PlanStatisticsEx> records = result.getRecords();
+        if (records.size() == 0) {
+            return result;
+        }
+
+        Map<Long, String> userNameMap = UserClientUtil.getUserNameMap(records, V3PlanStatistics::getUserId);
+        for (V3PlanStatisticsEx record : records) {
+            record.setUserName(userNameMap.get(record.getUserId()));
+        }
+
+        return result;
+    }
+
+    private QueryWrapper<V3PlanStatistics> getWrapper(Condition condition) {
+        Date beginTime = condition.getBeginTime();
+        Date endTime = condition.getEndTime();
+        Long userId = condition.getUserId();
+        QueryWrapper<V3PlanStatistics> query = Wrappers.query();
+
+        query.lambda()
+                .between(ObjectUtil.isAllNotEmpty(beginTime, endTime), V3PlanStatistics::getPlanDate, beginTime, endTime)
+                .func(q -> {
+                    if (ObjectUtil.isNotEmpty(userId)) {
+                        q.eq(V3PlanStatistics::getUserId, userId);
+                    } else {
+                        List<Long> jobNoList = waterBackService.getUserIdByAppointDept(
+                                DetpIdConstant.JET_PRINT, DetpIdConstant.TYPING, DetpIdConstant.TRANSFER);
+                        q.in(V3PlanStatistics::getUserId, jobNoList);
+                    }
+                });
+
+        return query;
     }
 
 }

+ 4 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterBackService.java

@@ -1,5 +1,6 @@
 package com.fjhx.service.water;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.base.Condition;
 import com.fjhx.base.StorageBaseService;
@@ -47,8 +48,10 @@ public interface WaterBackService extends StorageBaseService<WaterBack> {
 
     /**
      * 获取直喷打纸热转部门用户
+     *
+     * @return
      */
-    Map<String, Object> getUserByAppointDept();
+    Map<String, JSONObject> getUserByAppointDept();
 
     /**
      * 获取直喷打纸热转部门用户

+ 29 - 14
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterBackServiceImpl.java

@@ -2,6 +2,7 @@ package com.fjhx.service.water.impl;
 
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -29,6 +30,7 @@ import org.springblade.system.user.entity.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import springfox.documentation.spring.web.json.Json;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -172,40 +174,53 @@ public class WaterBackServiceImpl extends ServiceImpl<WaterBackMapper, WaterBack
     }
 
     @Override
-    public Map<String, Object> getUserByAppointDept() {
+    public Map<String, JSONObject> getUserByAppointDept() {
 
         List<Long> list = Arrays.asList(DetpIdConstant.JET_PRINT, DetpIdConstant.TRANSFER, DetpIdConstant.TYPING);
+
         R<List<User>> userListByDeptIdListR = userClient.getUserListByDeptIdList(list);
         List<User> userList = Assert.result(userListByDeptIdListR);
 
-        Map<Integer, Map<String, Object>> collect = userList.stream().collect(Collectors.toMap(
-                item -> 1,
+        return userList.stream().collect(Collectors.toMap(
                 item -> {
-                    Map<String, Object> map = new HashMap<>();
-                    if (item.getDeptId().contains(DetpIdConstant.JET_PRINT.toString())) {
-                        map.put("deptId", DetpIdConstant.JET_PRINT);
+                    String deptId = item.getDeptId();
+                    if (deptId.contains(DetpIdConstant.JET_PRINT.toString())) {
+                        return "jetPrint";
+                    } else if (deptId.contains(DetpIdConstant.TYPING.toString())) {
+                        return "typing";
+                    } else {
+                        return "transfer";
+                    }
+                },
+                item -> {
+                    JSONObject map = new JSONObject();
+                    String deptId = item.getDeptId();
+
+                    if (deptId.contains(DetpIdConstant.JET_PRINT.toString())) {
                         map.put("deptName", "直喷");
-                    } else if (item.getDeptId().contains(DetpIdConstant.TYPING.toString())) {
-                        map.put("deptId", DetpIdConstant.TYPING);
+                        map.put("deptId", DetpIdConstant.JET_PRINT);
+                    } else if (deptId.contains(DetpIdConstant.TYPING.toString())) {
                         map.put("deptName", "打纸");
+                        map.put("deptId", DetpIdConstant.TYPING);
                     } else {
-                        map.put("deptId", DetpIdConstant.TRANSFER.toString());
                         map.put("deptName", "热转");
+                        map.put("deptId", DetpIdConstant.TRANSFER);
                     }
 
-                    map.put("list", Collections.singletonList(item));
+                    JSONObject user = new JSONObject();
+                    user.put("id",item.getId());
+                    user.put("name",item.getName());
+                    map.put("list", Collections.singletonList(user));
                     return map;
                 },
                 (v1, v2) -> {
-                    List<User> v1List = new ArrayList<>((List<User>) v1.get("list"));
-                    List<User> v2List = new ArrayList<>((List<User>) v2.get("list"));
+                    List<JSONObject> v1List = new ArrayList<>((List<JSONObject>) v1.get("list"));
+                    List<JSONObject> v2List = new ArrayList<>((List<JSONObject>) v2.get("list"));
                     v1List.addAll(v2List);
                     v1.put("list", v1List);
                     return v1;
                 }
         ));
-
-        return collect.get(1);
     }
 
     @Override

+ 45 - 36
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockWaterMapper.xml

@@ -80,46 +80,55 @@
     </select>
 
     <select id="remainingTodayPage" resultType="java.util.LinkedHashMap">
-        SELECT m.ID                                       materialId,
-               mc.Name                                    categoryName,
-               m.Name                                     materialName,
-               m.Code                                     materialCode,
-               m.Width                                    materialWidth,
-               sum(sd.Quantity)                           sum,
-               count(sd.Quantity)                         count,
-               sum(IF(datediff(now(), sd.CreatedTime) > m.DelayPeriod, sd.Quantity,
-                      0))                                 retentionQuantity,
-               m.SafetyStock                              materialSafetyStock,
-               IF((a.CheckTagCount = a.TagQuantity) and (a.CheckTagCount = a.HandTagCount), 1,
-                  0)                                      inventoryResults,
-               ifnull(a.CheckTagCount - a.TagQuantity, 0) correctionQuantity,
-               a.CheckTime                                checkTime,
-               uu.RealName                                OperUserName
-        FROM material m
-                 LEFT JOIN stock_detail sd ON sd.MaterialCode = m.Code
-                 LEFT JOIN (
-            SELECT s.HandTagCount,
-                   s.TagQuantity,
-                   s.CheckTagCount,
-                   s.MaterialCode,
-                   s.CheckTime,
-                   s.RecordId
-            FROM (
-                     SELECT scd.HandTagCount,
+        SELECT
+            m.ID materialId,
+            mc.NAME categoryName,
+            m.NAME materialName,
+            m.CODE materialCode,
+            m.Width materialWidth,
+            sum( sd.Quantity ) sum,
+            count( sd.Quantity ) count,
+            sum(
+                    IF
+                        ( datediff( now(), sd.CreatedTime ) > m.DelayPeriod, sd.Quantity, 0 )) retentionQuantity,
+            m.SafetyStock materialSafetyStock,
+            IF
+                (( a.CheckTagCount = a.TagQuantity ) AND ( a.CheckTagCount = a.HandTagCount ), 1, 0 ) inventoryResults,
+            ifnull( a.CheckTagCount - a.TagQuantity, 0 ) correctionQuantity,
+            a.CheckTime checkTime,
+            uu.RealName OperUserName
+        FROM
+            material m
+                LEFT JOIN stock_detail sd ON sd.MaterialCode = m.
+                CODE LEFT JOIN (
+                SELECT
+                    HandTagCount,
+                    TagQuantity,
+                    CheckTagCount,
+                    MaterialCode,
+                    CheckTime,
+                    RecordId
+                FROM
+                    (
+                        SELECT
+                            scd.HandTagCount,
                             scd.TagQuantity,
                             scd.CheckTagCount,
                             scd.MaterialCode,
                             scd.CheckTime,
-                            scd.RecordId
-                     FROM stock_checkrecorddetail scd
-                     WHERE scd.CheckTime IS NOT NULL
-                     ORDER BY scd.CheckTime DESC
-                 ) s
-            GROUP BY s.MaterialCode
-        ) a ON m.CODE = a.MaterialCode
-                 LEFT JOIN stock_checkrecord sc ON a.RecordId = sc.ID
-                 LEFT JOIN u_user uu ON uu.id = sc.OperUserId
-                 LEFT JOIN material_category mc ON mc.Code = m.CategoryCode
+                            scd.RecordId,
+                            ROW_NUMBER() over ( PARTITION BY MaterialCode ORDER BY CheckTime DESC ) r_index
+                        FROM
+                            stock_checkrecorddetail scd
+                        WHERE
+                            CheckTime IS NOT NULL
+                    ) aaa
+                WHERE
+                    r_index = 1
+            ) a ON m.CODE = a.MaterialCode
+                LEFT JOIN stock_checkrecord sc ON a.RecordId = sc.ID
+                LEFT JOIN u_user uu ON uu.id = sc.OperUserId
+                LEFT JOIN material_category mc ON mc.CODE = m.CategoryCode
             ${ew.customSqlSegment}
     </select>