Prechádzať zdrojové kódy

解决印花机计算重量使用白坯投放的米克重计算

wukai 1 týždeň pred
rodič
commit
6987ca9f84

+ 1 - 1
jjt-admin/src/test/java/com/jjt/task/YhjTaskTest.java

@@ -56,7 +56,7 @@ public class YhjTaskTest {
 
     @Test
     public void day(){
-        String st = "2025-05-30";
+        String st = "2025-07-10";
         LocalDate localDate = LocalDate.parse(st);
         dayService.day(localDate);
     }

+ 1 - 1
jjt-biz/src/main/java/com/jjt/biz/service/impl/ApiYrServiceImpl.java

@@ -62,7 +62,7 @@ public class ApiYrServiceImpl implements IApiYrService {
     @Resource
     private ITwinCalcHourRzService rzService;
     @Resource
-    ITwinCalcHourBpOutService bpOutService;
+    private ITwinCalcHourBpOutService bpOutService;
     @Resource
     private ITwinCalcHourEnergyService energyService;
     @Resource

+ 7 - 1
jjt-biz/src/main/java/com/jjt/calc/domain/TwinCalcHourYhj.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -56,7 +57,12 @@ public class TwinCalcHourYhj extends BaseEntity {
     @ApiModelProperty("织造米数")
     @Excel(name = "织造米数")
     private Integer length;
-
+    /**
+     * 织造重量
+     */
+    @ApiModelProperty("重量")
+    @Excel(name = "重量")
+    private BigDecimal weight;
     /**
      * 版距
      */

+ 31 - 9
jjt-biz/src/main/java/com/jjt/calc/service/impl/TwinCalcDayYhjServiceImpl.java

@@ -6,12 +6,15 @@ import com.jjt.calc.mapper.TwinCalcDayYhjMapper;
 import com.jjt.calc.mapper.TwinCalcHourYhjMapper;
 import com.jjt.calc.service.ITwinCalcDayYhjService;
 import com.jjt.common.utils.DateUtils;
+import com.jjt.inventory.domain.TwinCalcHourBpOut;
+import com.jjt.inventory.service.ITwinCalcHourBpOutService;
 import org.apache.ibatis.session.ExecutorType;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -31,6 +34,8 @@ public class TwinCalcDayYhjServiceImpl implements ITwinCalcDayYhjService {
     @Resource
     private TwinCalcHourYhjMapper hourYhjMapper;
     @Resource
+    private ITwinCalcHourBpOutService bpOutService;
+    @Resource
     private SqlSessionFactory factory;
 
     /**
@@ -133,19 +138,36 @@ public class TwinCalcDayYhjServiceImpl implements ITwinCalcDayYhjService {
             resultMap.put(deviceId, calc);
         }
 
-        //按自然日统计
-        search = new TwinCalcHourYhj();
-        params = new HashMap<>(16);
-        params.put("beginDataDate", localDate.toString());
-        params.put("endDataDate", localDate.toString());
-        search.setParams(params);
-        list = hourYhjMapper.selectTwinCalcHourYhjList(search);
+//        //按自然日统计
+//        search = new TwinCalcHourYhj();
+//        params = new HashMap<>(16);
+//        params.put("beginDataDate", localDate.toString());
+//        params.put("endDataDate", localDate.toString());
+//        search.setParams(params);
+//        list = hourYhjMapper.selectTwinCalcHourYhjList(search);
+
+        //查询白坯投放量
+        TwinCalcHourBpOut bpOut = new TwinCalcHourBpOut();
+        bpOut.setParams(params);
+        List<TwinCalcHourBpOut> bpOutList = bpOutService.selectTwinCalcHourBpOutList(bpOut);
         List<TwinCalcDayYhj> yhjList = new ArrayList<>();
         //按ID分组统计
-        Map<Integer, Integer> calcDay = list.stream().collect(Collectors.groupingBy(TwinCalcHourYhj::getDeviceId, Collectors.reducing(0, TwinCalcHourYhj::getLength, Integer::sum)));
+        Map<Integer, List<TwinCalcHourBpOut>> bpOutMap = bpOutList.stream().collect(Collectors.groupingBy(TwinCalcHourBpOut::getDeviceId, Collectors.toList()));
         for (Integer deviceId : calcMap.keySet()) {
             TwinCalcDayYhj calc = resultMap.get(deviceId);
-            calc.setDayLength(calcDay.get(deviceId));
+            List<TwinCalcHourBpOut> bpList = bpOutMap.get(deviceId);
+            if (bpList != null && !bpList.isEmpty()) {
+                // 计算白坯投放的总米数和总重量
+                int totalLength = bpList.stream().mapToInt(TwinCalcHourBpOut::getLength).sum();
+                int totalWeight = bpList.stream().mapToInt(TwinCalcHourBpOut::getWeight).sum();
+                // 设置到日统计对象中
+                calc.setDayLength(totalLength);
+                calc.setDayWeight(BigDecimal.valueOf(totalWeight));
+            } else {
+                // 如果没有数据,设置为0
+                calc.setDayLength(0);
+                calc.setDayWeight(BigDecimal.ZERO);
+            }
             yhjList.add(calc);
         }
 

+ 20 - 1
jjt-biz/src/main/java/com/jjt/calc/service/impl/TwinCalcHourYhjServiceImpl.java

@@ -9,6 +9,8 @@ import com.jjt.calc.service.ITwinCalcHourYhjService;
 import com.jjt.common.constant.CacheConstants;
 import com.jjt.common.core.redis.RedisCache;
 import com.jjt.common.utils.DateUtils;
+import com.jjt.common.utils.StringUtils;
+import com.jjt.inventory.domain.TwinCalcHourBpOut;
 import com.jjt.inventory.service.ITwinCalcHourBpOutService;
 import com.jjt.utils.AsyncYhjService;
 import com.jjt.utils.IotService;
@@ -21,6 +23,8 @@ import org.apache.ibatis.session.SqlSessionFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -29,6 +33,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.stream.Collectors;
 
 /**
  * 印花机1小时统计数据Service业务层处理
@@ -198,6 +203,10 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
 
     private List<TwinCalcHourYhj> process(LocalDateTime start, LocalDateTime end) {
         List<TwinDeviceYhj> list = yhjService.selectTwinDeviceYhjList(new TwinDeviceYhj());
+        List<TwinCalcHourBpOut> bpOuts = bpOutService.selectTwinCalcHourBpOutListLast();
+        // 按deviceId分组处理白坯投放数据
+        Map<Integer, TwinCalcHourBpOut> bpOutMap = bpOuts.stream()
+                .collect(Collectors.toMap(TwinCalcHourBpOut::getDeviceId, bpOut -> bpOut, (oldValue, newValue) -> newValue));
         List<Future<TwinCalcHourYhj>> futureList = new ArrayList<>();
         List<TwinCalcHourYhj> calcList = new ArrayList<>();
         for (TwinDeviceYhj yhj : list) {
@@ -210,6 +219,16 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
                 try {
                     TwinCalcHourYhj calcYhj = future.get(10L, TimeUnit.SECONDS);
                     if (calcYhj.getDeviceId() != null) {
+                        TwinCalcHourBpOut out = bpOutMap.get(calcYhj.getDeviceId());
+                        Integer mick = 1000;
+                        if (StringUtils.isNotEmpty(out.getRemark())) {
+                            String[] parts = out.getRemark().split("\\*");
+                            if (parts.length > 1) {
+                                mick = Integer.parseInt(parts[1]);
+                            }
+                        }
+                        BigDecimal weight = BigDecimal.valueOf(calcYhj.getLength()).divide(BigDecimal.valueOf(mick), 2, RoundingMode.HALF_UP);
+                        calcYhj.setWeight(weight);
                         calcList.add(calcYhj);
                     }
                 } catch (TimeoutException e) {
@@ -244,8 +263,8 @@ public class TwinCalcHourYhjServiceImpl implements ITwinCalcHourYhjService {
 
         LocalDateTime stop = Tools.currWholeTime();
         while (!end.isAfter(stop)) {
-            calc(start, end);
             bpOutService.calc(start, end);
+            calc(start, end);
             log.info("补录数据===========start:{},end:{},stop:{}", start, end, stop);
             if (end.getHour() == 7) {
                 //跨天,统计前一天的总数据

+ 13 - 7
jjt-biz/src/main/java/com/jjt/inventory/mapper/TwinCalcHourBpOutMapper.java

@@ -6,7 +6,7 @@ import com.jjt.inventory.domain.TwinCalcHourBpOut;
 
 /**
  * 白坯投放量小时数据Mapper接口
- * 
+ *
  * @author wukai
  * @date 2025-06-11
  */
@@ -14,7 +14,7 @@ public interface TwinCalcHourBpOutMapper extends BaseMapper<TwinCalcHourBpOut>
 {
     /**
      * 查询白坯投放量小时数据
-     * 
+     *
      * @param id 白坯投放量小时数据主键
      * @return 白坯投放量小时数据
      */
@@ -22,7 +22,7 @@ public interface TwinCalcHourBpOutMapper extends BaseMapper<TwinCalcHourBpOut>
 
     /**
      * 查询白坯投放量小时数据列表
-     * 
+     *
      * @param twinCalcHourBpOut 白坯投放量小时数据
      * @return 白坯投放量小时数据集合
      */
@@ -30,7 +30,7 @@ public interface TwinCalcHourBpOutMapper extends BaseMapper<TwinCalcHourBpOut>
 
     /**
      * 新增白坯投放量小时数据
-     * 
+     *
      * @param twinCalcHourBpOut 白坯投放量小时数据
      * @return 结果
      */
@@ -38,7 +38,7 @@ public interface TwinCalcHourBpOutMapper extends BaseMapper<TwinCalcHourBpOut>
 
     /**
      * 修改白坯投放量小时数据
-     * 
+     *
      * @param twinCalcHourBpOut 白坯投放量小时数据
      * @return 结果
      */
@@ -46,7 +46,7 @@ public interface TwinCalcHourBpOutMapper extends BaseMapper<TwinCalcHourBpOut>
 
     /**
      * 删除白坯投放量小时数据
-     * 
+     *
      * @param id 白坯投放量小时数据主键
      * @return 结果
      */
@@ -54,9 +54,15 @@ public interface TwinCalcHourBpOutMapper extends BaseMapper<TwinCalcHourBpOut>
 
     /**
      * 批量删除白坯投放量小时数据
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteTwinCalcHourBpOutByIds(Long[] ids);
+    /**
+     * 查询最新的数据
+     *
+     * @return 最新数据
+     */
+    List<TwinCalcHourBpOut> selectTwinCalcHourBpOutListLast();
 }

+ 9 - 1
jjt-biz/src/main/java/com/jjt/inventory/service/ITwinCalcHourBpOutService.java

@@ -1,8 +1,9 @@
 package com.jjt.inventory.service;
 
+import com.jjt.inventory.domain.TwinCalcHourBpOut;
+
 import java.time.LocalDateTime;
 import java.util.List;
-import com.jjt.inventory.domain.TwinCalcHourBpOut;
 
 /**
  * 白坯投放量小时数据Service接口
@@ -58,6 +59,7 @@ public interface ITwinCalcHourBpOutService {
      * @return 结果
      */
     public int deleteTwinCalcHourBpOutById(Long id);
+
     /**
      * 按小时白坯投放数据
      */
@@ -71,4 +73,10 @@ public interface ITwinCalcHourBpOutService {
      */
     void calc(LocalDateTime start, LocalDateTime end);
 
+    /**
+     * 查询最新的数据
+     *
+     * @return 最新数据
+     */
+    List<TwinCalcHourBpOut> selectTwinCalcHourBpOutListLast();
 }

+ 13 - 1
jjt-biz/src/main/java/com/jjt/inventory/service/impl/TwinCalcHourBpOutServiceImpl.java

@@ -124,7 +124,7 @@ public class TwinCalcHourBpOutServiceImpl implements ITwinCalcHourBpOutService {
     @Override
     public void calc(LocalDateTime start, LocalDateTime end) {
         String sqlSuffix = " AND [时间] BETWEEN CONVERT(DATETIME, '" + start.toString().replace("T", " ") + "') AND CONVERT(DATETIME, '" + end.toString().replace("T", " ") + "')";
-        String outSql = "SELECT [时间] TIME,[仓库编码] CODE,[仓库名称] NAME,[物料编码] SKU,[物料描述] SKU_DESCRC,[当日出库量] NUM,[单托_支数_米数] LENGTH,[单重_KG] WEIGHT,[产线_目标库位名称] TARGET FROM V_MES_FAYUN t" +
+        String outSql = "SELECT [时间] TIME,[仓库编码] CODE,[仓库名称] NAME,[物料编码] SKU,[物料描述] SKU_DESCRC,[白坯_花布规格] SPEC,[当日出库量] NUM,[单托_支数_米数] LENGTH,[单重_KG] WEIGHT,[产线_目标库位名称] TARGET FROM V_MES_FAYUN t" +
                 " WHERE [仓库编码]='WH04' AND [产线_目标库位名称] LIKE '%上料点'" + sqlSuffix;
         List<Map<String, Object>> outList = mssqlService.executeQuery(outSql);
         Map<String, StockBpOutVO> stats = new HashMap<>(16);
@@ -139,6 +139,7 @@ public class TwinCalcHourBpOutServiceImpl implements ITwinCalcHourBpOutService {
             vo.setLine(line);
             vo.addLength(length);
             vo.addWeight(weight);
+            vo.setSpec((String) map.get("SPEC"));
         });
 
         List<StockBpOutVO> list = new ArrayList<>(stats.values());
@@ -150,6 +151,7 @@ public class TwinCalcHourBpOutServiceImpl implements ITwinCalcHourBpOutService {
             out.setDeviceId(Integer.parseInt(vo.getLine()));
             out.setLength(vo.getLength());
             out.setWeight(vo.getWeight());
+            out.setRemark(vo.getSpec());
             bpOuts.add(out);
         });
         delete(start.toLocalDate(), start.getHour());
@@ -162,6 +164,16 @@ public class TwinCalcHourBpOutServiceImpl implements ITwinCalcHourBpOutService {
         }
     }
 
+    /**
+     * 查询最新的数据
+     *
+     * @return 最新数据
+     */
+    @Override
+    public List<TwinCalcHourBpOut> selectTwinCalcHourBpOutListLast() {
+        return twinCalcHourBpOutMapper.selectTwinCalcHourBpOutListLast();
+    }
+
 
     /**
      * 删除白坯仓库小时数据信息

+ 2 - 0
jjt-biz/src/main/java/com/jjt/inventory/vo/StockBpOutVO.java

@@ -20,6 +20,8 @@ public class StockBpOutVO {
     private Integer length;
     @ApiModelProperty(name = "重量")
     private Integer weight;
+    @ApiModelProperty(name = "规格")
+    private String spec;
 
     public StockBpOutVO() {
         this.length = 0;

+ 6 - 1
jjt-biz/src/main/resources/mapper/calc/TwinCalcHourYhjMapper.xml

@@ -10,12 +10,13 @@
         <result property="hour" column="HOUR"/>
         <result property="deviceId" column="DEVICE_ID"/>
         <result property="length" column="LENGTH"/>
+        <result property="weight" column="WEIGHT"/>
         <result property="distance" column="DISTANCE"/>
         <result property="remark" column="REMARK"/>
     </resultMap>
 
     <sql id="selectTwinCalcHourYhjVo">
-        select ID, DATA_DATE, HOUR, DEVICE_ID, LENGTH, DISTANCE, REMARK
+        select ID, DATA_DATE, HOUR, DEVICE_ID, LENGTH, WEIGHT,DISTANCE, REMARK
         from TWIN_CALC_HOUR_YHJ
     </sql>
 
@@ -28,6 +29,7 @@
             <if test="hour != null ">and HOUR = #{hour}</if>
             <if test="deviceId != null ">and DEVICE_ID = #{deviceId}</if>
             <if test="length != null ">and LENGTH = #{length}</if>
+            <if test="weight != null ">and WEIGHT = #{weight}</if>
             <if test="distance != null ">and DISTANCE = #{distance}</if>
             <if test="remark != null  and remark != ''">and REMARK = #{remark}</if>
             <if test="params.sTime != null and params.eTime != null">
@@ -54,6 +56,7 @@
             <if test="hour != null">HOUR,</if>
             <if test="deviceId != null">DEVICE_ID,</if>
             <if test="length != null">LENGTH,</if>
+            <if test="weight != null">WEIGHT,</if>
             <if test="distance != null">DISTANCE,</if>
             <if test="remark != null">REMARK,</if>
         </trim>
@@ -62,6 +65,7 @@
             <if test="hour != null">#{hour},</if>
             <if test="deviceId != null">#{deviceId},</if>
             <if test="length != null">#{length},</if>
+            <if test="weight != null">#{weight},</if>
             <if test="distance != null">#{distance},</if>
             <if test="remark != null">#{remark},</if>
         </trim>
@@ -74,6 +78,7 @@
             <if test="hour != null">HOUR = #{hour},</if>
             <if test="deviceId != null">DEVICE_ID = #{deviceId},</if>
             <if test="length != null">LENGTH = #{length},</if>
+            <if test="weight != null">WEIGHT = #{weight},</if>
             <if test="distance != null">DISTANCE = #{distance},</if>
             <if test="remark != null">REMARK = #{remark},</if>
         </trim>

+ 7 - 0
jjt-biz/src/main/resources/mapper/inventory/TwinCalcHourBpOutMapper.xml

@@ -39,6 +39,13 @@
         <include refid="selectTwinCalcHourBpOutVo"/>
         where ID = #{id}
     </select>
+    <select id="selectTwinCalcHourBpOutListLast" resultType="com.jjt.inventory.domain.TwinCalcHourBpOut">
+        SELECT ID, DATA_DATE, HOUR, T1.DEVICE_ID, LENGTH, WEIGHT, REMARK
+        FROM TWIN_CALC_HOUR_BP_OUT T1
+                 INNER JOIN (SELECT DEVICE_ID, MAX(ID) MAX_ID
+                             FROM TWIN_CALC_HOUR_BP_OUT
+                             GROUP BY DEVICE_ID) T2 ON T1.DEVICE_ID = T2.DEVICE_ID AND T1.ID = T2.MAX_ID
+    </select>
 
     <insert id="insertTwinCalcHourBpOut" parameterType="TwinCalcHourBpOut">
         insert into TWIN_CALC_HOUR_BP_OUT