Bladeren bron

Merge remote-tracking branch 'origin/master'

lipenghui 2 dagen geleden
bovenliggende
commit
ee5c347c0b

+ 3 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/IotDeviceMapper.java

@@ -141,7 +141,9 @@ public interface IotDeviceMapper extends BaseMapperX<IotDeviceDO> {
         if (StrUtil.isNotBlank(reqVO.getDeviceName())) {
             queryWrapper.and(i -> i.like(IotDeviceDO::getDeviceName, reqVO.getDeviceName())
                     .or()
-                    .like(IotDeviceDO::getDeviceCode, reqVO.getDeviceName()));
+                    .like(IotDeviceDO::getDeviceCode, reqVO.getDeviceName())
+                    .or()
+                    .like(IotDeviceDO::getYfDeviceCode, reqVO.getDeviceName()));
         }
         return selectList(queryWrapper);
     }

+ 2 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmainworkorder/IotMainWorkOrderMapper.java

@@ -106,5 +106,6 @@ public interface IotMainWorkOrderMapper extends BaseMapperX<IotMainWorkOrderDO>
      * @return
      */
     IPage<IotMainWorkOrderRespVO> sortedMainWorkOrders(IPage<IotMainWorkOrderDO> page, @Param("reqVO") IotMainWorkOrderPageReqVO reqVO,
-                                              @Param("alarmWorkOrderIds") Collection<Long> alarmWorkOrderIds, @Param("deptIds") Collection<Long> deptIds);
+                                              @Param("alarmWorkOrderIds") Collection<Long> alarmWorkOrderIds,
+                                                       @Param("deptIds") Collection<Long> deptIds, @Param("eligibleWorkOrderIds") Collection<Long> eligibleWorkOrderIds);
 }

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotsapstock/IotSapStockMapper.java

@@ -56,6 +56,7 @@ public interface IotSapStockMapper extends BaseMapperX<IotSapStockDO> {
     default List<IotSapStockDO> selectList(IotSapStockPageReqVO reqVO) {
         MPJLambdaWrapperX<IotSapStockDO> query = new MPJLambdaWrapperX<IotSapStockDO>();
         query.eqIfPresent(IotSapStockDO::getDeptId, reqVO.getDeptId())
+                .eqIfPresent(IotSapStockDO::getFactoryCode, reqVO.getFactoryCode())
                 .eqIfPresent(IotSapStockDO::getFactoryId, reqVO.getFactoryId())
                 .inIfPresent(IotSapStockDO::getFactoryId, reqVO.getFactoryIds())
                 .eqIfPresent(IotSapStockDO::getFactory, reqVO.getFactory())

+ 9 - 6
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/sap/service/IotSapServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotlockstock.vo.IotLockStockPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotsappickinglist.vo.IotSapPickingListPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotsapstock.vo.IotSapStockPageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotlockstock.IotLockStockDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterial.IotMaterialDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotsappickinglist.IotSapPickingListDO;
@@ -570,7 +571,9 @@ public class IotSapServiceImpl implements IotSapService {
         });
         // 查询所有SAP库存集合A,以 ‘工厂编码+库存地点code+物料编码’ 为唯一key 如果 sapStocks 中有物料不在A中 新增物料
         Set<String> existStockKeys = new HashSet<>();
-        List<IotSapStockDO> existStocks = TenantUtils.execute(1L, () -> iotSapStockMapper.selectList());
+        IotSapStockPageReqVO reqVO = new IotSapStockPageReqVO();
+        reqVO.setFactoryCode(factoryCode);
+        List<IotSapStockDO> existStocks = TenantUtils.execute(1L, () -> iotSapStockMapper.selectList(reqVO));
         if (CollUtil.isNotEmpty(existStocks)) {
             existStockKeys = existStocks.stream()
                     // 过滤非空对象和非空code
@@ -593,10 +596,10 @@ public class IotSapServiceImpl implements IotSapService {
                         (existing, replacement) -> existing // 处理键冲突: 保留先出现的元素
                 ));
 
-        // 找出需要新增的库存(SAP物料编码去掉前导零后,不在现有物料集合中的记录)
+        // 找出当前工厂 需要新增的库存(SAP物料编码去掉前导零后,不在现有物料集合中的记录)
         Set<String> finalExistStockKeys = existStockKeys;
         List<IotSapStockVO> newStocks = sapStocks.stream()
-                .filter(stk -> StrUtil.isNotBlank(stk.getMATNR()) && StrUtil.isNotBlank(stk.getLGORT())
+                .filter(stk -> factoryCode.equals(stk.getWERKS()) && StrUtil.isNotBlank(stk.getMATNR()) && StrUtil.isNotBlank(stk.getLGORT())
                         && storageLocationIdPair.containsKey(StrUtil.join("-", stk.getWERKS(), stk.getLGORT())))
                 .filter(stk -> {
                     // 处理前导零:移除MATNR前的 00000000
@@ -664,7 +667,7 @@ public class IotSapServiceImpl implements IotSapService {
         // pms中已有 SAP返回数据中也存在 则更新 再次判断更新deptId 因为有可能又将SAP库存地点关联到了 组织部门
         List<IotSapStockDO> actualUpdatedStocks = new ArrayList<>();
         // key库存id-物料编码      value库存对象
-        Map<String, IotSapStockVO> existStockPair = createExistStockMap(sapStocks, existStockKeys, storageLocationIdPair);
+        Map<String, IotSapStockVO> existStockPair = createExistStockMap(factoryCode, sapStocks, existStockKeys, storageLocationIdPair);
         if (CollUtil.isNotEmpty(existStockPair)) {
             Map<String, IotSapStockDO> finalTobeUpdatedStockPair = tobeUpdatedStockPair;
             existStockPair.forEach((k, v) -> {
@@ -777,10 +780,10 @@ public class IotSapServiceImpl implements IotSapService {
      * @param storageLocationIdPair key库存地点code    value库存地点id
      * @return 物料编码到描述的映射
      */
-    private Map<String, IotSapStockVO> createExistStockMap(List<IotSapStockVO> sapStocks, Set<String> existStockKeys,
+    private Map<String, IotSapStockVO> createExistStockMap(String factoryCode, List<IotSapStockVO> sapStocks, Set<String> existStockKeys,
                                                            Map<String, Long> storageLocationIdPair) {
         return sapStocks.stream()
-                .filter(sapStock -> StrUtil.isNotBlank(sapStock.getMATNR()) &&
+                .filter(sapStock -> factoryCode.equals(sapStock.getWERKS()) && StrUtil.isNotBlank(sapStock.getMATNR()) &&
                         StrUtil.isNotBlank(sapStock.getLGORT()) &&
                         storageLocationIdPair.containsKey(StrUtil.join("-", sapStock.getWERKS(), sapStock.getLGORT())))
                 .map(sapStock -> {

+ 45 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorder/IotMainWorkOrderServiceImpl.java

@@ -61,6 +61,7 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertListByFlatMap;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_MAIN_WORK_ORDER_EXECUTED;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_MAIN_WORK_ORDER_NOT_EXISTS;
@@ -158,7 +159,46 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
 
     @Override
     public PageResult<IotMainWorkOrderRespVO> sortedMainWorkOrderPage(IotMainWorkOrderPageReqVO pageReqVO) {
-        // 查询 未执行 计划生成 的工单
+        // 根据 设备编码 新旧油服号 搜索
+        // 如果 pageReqVO.getName() 有值 先根据 name 值查询 新旧油服号都匹配的保养工单
+        List<Long> eligibleDeviceIds = new ArrayList<>();
+        List<Long> eligibleWorkOrderIds = new ArrayList<>();
+        if (StrUtil.isNotBlank(pageReqVO.getName())) {
+            IotDevicePageReqVO reqVO = new IotDevicePageReqVO();
+            reqVO.setDeviceName(pageReqVO.getName());
+            List<IotDeviceDO> eligibleDevices = iotDeviceMapper.selectListAlone(reqVO);
+            if (CollUtil.isNotEmpty(eligibleDevices)) {
+                eligibleDeviceIds = convertList(eligibleDevices, IotDeviceDO::getId);
+                // 如果有相关的设备 查询对应的保养工单
+                if (CollUtil.isNotEmpty(eligibleDeviceIds)) {
+                    IotMainWorkOrderBomPageReqVO bomReqVO = new IotMainWorkOrderBomPageReqVO();
+                    bomReqVO.setDeviceIds(eligibleDeviceIds);
+                    List<IotMainWorkOrderBomDO> boms = iotMainWorkOrderBomMapper.selectList(bomReqVO);
+                    if (CollUtil.isNotEmpty(boms)) {
+                        Set<Long> workOrderIds = new HashSet<>();
+                        boms.forEach(bom -> {
+                            workOrderIds.add(bom.getWorkOrderId());
+                        });
+                        eligibleWorkOrderIds.addAll(workOrderIds);
+                    }
+                }
+            }
+            // 根据保养工单名称搜索
+            IotMainWorkOrderPageReqVO orderReqVO = new IotMainWorkOrderPageReqVO();
+            orderReqVO.setName(pageReqVO.getName());
+            List<IotMainWorkOrderDO> likeNameWorkOrders = iotMainWorkOrderMapper.selectList(orderReqVO);
+            if (CollUtil.isNotEmpty(likeNameWorkOrders)) {
+                likeNameWorkOrders.forEach(order -> {
+                    if (!eligibleWorkOrderIds.contains(order.getId())) {
+                        eligibleWorkOrderIds.add(order.getId());
+                    }
+                });
+            }
+            if (CollUtil.isEmpty(eligibleWorkOrderIds)) {
+                return PageResult.empty();
+            }
+        }
+        // 查询 未执行 计划生成 的工单 计算距离保养使用
         IotMainWorkOrderPageReqVO reqVO = new IotMainWorkOrderPageReqVO();
         reqVO.setResult(1);
         reqVO.setType(1);
@@ -173,6 +213,9 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
         IotMainWorkOrderBomPageReqVO bomReqVO = new IotMainWorkOrderBomPageReqVO();
         if (CollUtil.isNotEmpty(workOrderIds)) {
             bomReqVO.setWorkOrderIds(workOrderIds);
+            if (CollUtil.isNotEmpty(eligibleDeviceIds)) {
+                bomReqVO.setDeviceIds(eligibleDeviceIds);
+            }
             // 查询 未执行的计划生成的工单 的保养项明细
             workOrderBomS= iotMainWorkOrderBomMapper.selectList(bomReqVO);
         }
@@ -320,7 +363,7 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
             }
             // 查询所有设备列表 通过SQL形式 使用 FIELD 字段
             IPage<IotMainWorkOrderRespVO> page = iotMainWorkOrderMapper.sortedMainWorkOrders(
-                    new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO, sortedWorkOrderIds, ids);
+                    new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO, sortedWorkOrderIds, ids, eligibleWorkOrderIds);
             if (CollUtil.isNotEmpty(page.getRecords())) {
                 Map<Long, String> finalResultMap = resultMap;
                 page.getRecords().forEach(order -> {

+ 8 - 6
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrydailyreport/IotRyDailyReportServiceImpl.java

@@ -104,10 +104,12 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
             // 计算月进尺 年累计进尺 reportDate对应的前一天的 年-月份 对应的日报记录日进尺的累加值
             // 查询指定部门、指定时间段 填写的日报记录的 ’月进尺数据‘(逻辑细则:reportDate 所在的月份与数据表的字段 construction_start_date
             // 所在的月份相匹配 且 create_time < reportDate 的记录的 ’daily_footage‘ 字段值累加计算得出
+            BigDecimal historyMonthlyFootage = iotRyDailyReportMapper.monthlyFootages(createReqVO.getDeptId(), reportDate);
             BigDecimal monthStartFootage = iotRyDailyReportMapper.monthStartFootage(createReqVO.getDeptId(), reportDate);
 
             // 查询指定部门、指定时间段 填写的日报记录的 ’年进尺数据‘(逻辑细则:reportDate 所在的年份与数据表的字段 construction_start_date
             // 所在的年份相匹配 且 create_time < reportDate 的记录的 ’daily_footage‘ 字段值累加计算得出
+            BigDecimal historyAnnualFootage = iotRyDailyReportMapper.annualFootages(createReqVO.getDeptId(), reportDate);
             BigDecimal yearStartFootage = iotRyDailyReportMapper.yearStartFootage(createReqVO.getDeptId(), reportDate);
 
             // 当前井深 计算 日进尺 月进尺 年累计进尺
@@ -120,13 +122,13 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
                 BigDecimal dailyFootage = createReqVO.getCurrentDepth().subtract(lastReport.getCurrentDepth());
                 iotRyDailyReport.setDailyFootage(dailyFootage);
                 // 月进尺 = 当前井深 - 当前月份的最早记录天的井深
-                BigDecimal monthlyFootage = (monthStartFootage.compareTo(BigDecimal.ZERO) == 0)
-                        ? BigDecimal.ZERO : createReqVO.getCurrentDepth().subtract(monthStartFootage);
-                iotRyDailyReport.setMonthlyFootage(monthlyFootage);
+                /* BigDecimal monthlyFootage = (monthStartFootage.compareTo(BigDecimal.ZERO) == 0)
+                        ? BigDecimal.ZERO : createReqVO.getCurrentDepth().subtract(monthStartFootage); */
+                iotRyDailyReport.setMonthlyFootage(dailyFootage.add(historyMonthlyFootage));
                 // 年累计进尺 = 当前井深 - 当前年最早记录的井深
-                BigDecimal annualFootage = (yearStartFootage.compareTo(BigDecimal.ZERO) == 0)
-                        ? BigDecimal.ZERO : createReqVO.getCurrentDepth().subtract(yearStartFootage);
-                iotRyDailyReport.setAnnualFootage(annualFootage);
+                /* BigDecimal annualFootage = (yearStartFootage.compareTo(BigDecimal.ZERO) == 0)
+                        ? BigDecimal.ZERO : createReqVO.getCurrentDepth().subtract(yearStartFootage); */
+                iotRyDailyReport.setAnnualFootage(dailyFootage.add(historyAnnualFootage));
             } else {
                 // 如果没有查询到数据 则设置 日进尺 为0 后期可修复数据
                 iotRyDailyReport.setDailyFootage(BigDecimal.ZERO);

+ 6 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotMainWorkOrderMapper.xml

@@ -38,10 +38,13 @@
                 #{key}
             </foreach>
         </if>
-          <if test="reqVO.name != null and reqVO.name != ''">
-            AND mwo.name LIKE concat(concat("%",#{reqVO.name}),"%")
+        <if test="eligibleWorkOrderIds != null and eligibleWorkOrderIds.size &gt; 0">
+            AND mwo.id IN
+            <foreach collection="eligibleWorkOrderIds" index="index" item="key" open="(" separator="," close=")">
+                #{key}
+            </foreach>
         </if>
-        <if test="reqVO.result != null">
+        <if test="reqVO.result != null and reqVO.result != 0">
             AND mwo.result = #{reqVO.result}
         </if>
         <if test="reqVO.createTime != null and reqVO.createTime.length > 0">