Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/mainworkorder/CreateMainWorkOrderJob.java
lipenghui 3 mesi fa
parent
commit
8bf2889038

+ 37 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorder/IotMainWorkOrderController.java

@@ -1,17 +1,24 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorder;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
+import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorder.vo.IotMainWorkOrderPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorder.vo.IotMainWorkOrderRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorder.vo.IotMainWorkOrderSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorder.vo.IotMainWorkOrderSaveVO;
+import cn.iocoder.yudao.module.pms.controller.admin.maintenance.vo.IotMaintenancePlanRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorder.IotMainWorkOrderDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.maintenance.IotMaintenancePlanDO;
 import cn.iocoder.yudao.module.pms.service.iotmainworkorder.IotMainWorkOrderService;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -23,10 +30,14 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Stream;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertListByFlatMap;
 
 @Tag(name = "管理后台 - 保养工单")
 @RestController
@@ -36,6 +47,8 @@ public class IotMainWorkOrderController {
 
     @Resource
     private IotMainWorkOrderService iotMainWorkOrderService;
+    @Resource
+    private AdminUserApi adminUserApi;
 
     @PostMapping("/create")
     @Operation(summary = "创建保养工单")
@@ -60,6 +73,14 @@ public class IotMainWorkOrderController {
         return success(true);
     }
 
+    @PutMapping("/addWorkOrder")
+    @Operation(summary = "手工新增保养工单")
+    @PreAuthorize("@ss.hasPermission('pms:iot-main-work-order:create')")
+    public CommonResult<Boolean> addWorkOrder(@Valid @RequestBody IotMainWorkOrderSaveVO saveVO) {
+        iotMainWorkOrderService.addWorkOrder(saveVO);
+        return success(true);
+    }
+
     @DeleteMapping("/delete")
     @Operation(summary = "删除保养工单")
     @Parameter(name = "id", description = "编号", required = true)
@@ -83,7 +104,22 @@ public class IotMainWorkOrderController {
     @PreAuthorize("@ss.hasPermission('pms:iot-main-work-order:query')")
     public CommonResult<PageResult<IotMainWorkOrderRespVO>> getIotMainWorkOrderPage(@Valid IotMainWorkOrderPageReqVO pageReqVO) {
         PageResult<IotMainWorkOrderDO> pageResult = iotMainWorkOrderService.getIotMainWorkOrderPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, IotMainWorkOrderRespVO.class));
+        return success(new PageResult<>(buildMainWorkOrderList(pageResult.getList()), pageResult.getTotal()));
+    }
+
+    private List<IotMainWorkOrderRespVO> buildMainWorkOrderList(List<IotMainWorkOrderDO> orders) {
+        if (CollUtil.isEmpty(orders)) {
+            return Collections.emptyList();
+        }
+        // 查询保养计划 负责人
+        Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(orders,
+                order -> Stream.of(NumberUtils.parseLong(order.getResponsiblePerson()))));
+        // 2. 转换成 VO
+        return BeanUtils.toBean(orders, IotMainWorkOrderRespVO.class, orderVO -> {
+            // 2.2 设置创建人、负责人名称
+            MapUtils.findAndThen(userMap, NumberUtils.parseLong(orderVO.getResponsiblePerson()),
+                    user -> orderVO.setResponsiblePersonName(user.getNickname()));
+        });
     }
 
     @GetMapping("/export-excel")

+ 11 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorderbom/vo/IotMainWorkOrderBomSaveReqVO.java

@@ -130,4 +130,15 @@ public class IotMainWorkOrderBomSaveReqVO {
     @Schema(description = "版本")
     private Integer version;
 
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "累计运行公里数 KM")
+    private BigDecimal totalMileage;
+
+    @Schema(description = "累计运行时间 H")
+    private BigDecimal totalRunTime;
+
+    @Schema(description = "设备分类id")
+    private Long assetClass;
 }

+ 0 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorderbommaterial/IotMainWorkOrderBomMaterialController.java

@@ -1,6 +1,5 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbommaterial;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;

+ 0 - 51
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/mainworkorder/CreateMainWorkOrderJob.java

@@ -111,55 +111,4 @@ public class CreateMainWorkOrderJob implements JobHandler {
         // 查询需要保养的node节点是否包含在正在执行的保养工单中
         return "创建成功";
     }
-
-    private void deal(IotInspectPlanDO plan, Date date) {
-        Date date1 = new Date();
-        if ("hour".equals(plan.getPlanUnit())){
-            DateTime dateTime = DateUtil.offsetHour(date, Integer.parseInt(StringUtils.substringBeforeLast(String.valueOf(plan.getPlanCycle()),".")));
-            if (date1.compareTo(dateTime) > 0){
-                createPlan(plan);
-            }
-        } else if ("day".equals(plan.getPlanUnit())){
-            DateTime dateTime = DateUtil.offsetDay(date, Integer.parseInt(String.valueOf(plan.getPlanCycle())));
-            if (date1.compareTo(dateTime) > 0){
-                createPlan(plan);
-            }
-        } else if ("month".equals(plan.getPlanUnit())){
-            DateTime dateTime = DateUtil.offsetMonth(date, Integer.parseInt(String.valueOf(plan.getPlanCycle())));
-            if (date1.compareTo(dateTime) > 0){
-                createPlan(plan);
-            }
-        }
-    }
-
-    private void createPlan(IotInspectPlanDO iotInspectPlan) {
-        IotInspectOrderDO iotInspectOrderDO = new IotInspectOrderDO();
-        iotInspectOrderDO.setInspectOrderTitle(iotInspectPlan.getPlanTitle()+"-巡检工单");
-        iotInspectOrderDO.setInspectOrderCode("IN"+ DateUtil.format(new Date(),"yyyyMMddHHmmss"));
-        String collect = Arrays.stream(iotInspectPlan.getCharge().split(",")).map(charge -> "io" + charge + "io").collect(Collectors.joining(","));
-        iotInspectOrderDO.setCharge(collect);
-        iotInspectOrderDO.setStatus("todo");
-        iotInspectOrderDO.setDeviceIds(iotInspectPlan.getDeviceIds());
-        iotInspectOrderDO.setType("计划生成");
-        iotInspectOrderDO.setPlanCode(iotInspectPlan.getPlanCode());
-        iotInspectOrderDO.setDeleted(false);
-        iotInspectOrderDO.setChargeName(iotInspectPlan.getChargeName());
-        iotInspectOrderMapper.insert(iotInspectOrderDO);
-        List<IotInspectRouteDO> routeDOS = JSON.parseArray(iotInspectPlan.getDeviceIds(), IotInspectRouteDO.class);
-        List<IotInspectOrderDetailDO> results = new ArrayList<>();
-        //处理巡检项
-        routeDOS.forEach(routeDO -> {
-            List<Map> itemos = JSON.parseArray(routeDO.getItemJson(), Map.class);
-            itemos.forEach(item -> {
-                IotInspectOrderDetailDO detailDO = new IotInspectOrderDetailDO();
-                detailDO.setOrderId(iotInspectOrderDO.getId());
-                detailDO.setDeviceId(routeDO.getDeviceId());
-                detailDO.setItemId(Long.valueOf(String.valueOf(item.get("itemId"))));
-                detailDO.setIndexId(Long.valueOf(String.valueOf(item.get("index"))));
-                detailDO.setDeleted(false);
-                results.add(detailDO);
-            });
-        });
-        iotInspectOrderDetailMapper.insertBatch(results);
-    }
 }

+ 7 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorder/IotMainWorkOrderService.java

@@ -81,4 +81,11 @@ public interface IotMainWorkOrderService {
      * @return
      */
     void fillWorkOrder(IotMainWorkOrderSaveVO saveVO);
+
+    /**
+     * 新增 保养 工单
+     *
+     * @return
+     */
+    void addWorkOrder(IotMainWorkOrderSaveVO saveVO);
 }

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

@@ -1,8 +1,12 @@
 package cn.iocoder.yudao.module.pms.service.iotmainworkorder;
 
+import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorder.vo.IotMainWorkOrderPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorder.vo.IotMainWorkOrderSaveReqVO;
@@ -21,7 +25,10 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -142,4 +149,53 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
         // todo 处理库存减少
     }
 
+    @Override
+    public void addWorkOrder(IotMainWorkOrderSaveVO saveVO) {
+        if (ObjectUtil.isEmpty(saveVO)) {
+            throw exception(IOT_MAIN_WORK_ORDER_NOT_EXISTS);
+        }
+        IotMainWorkOrderSaveReqVO mainWorkOrder = saveVO.getMainWorkOrder();
+        if (ObjectUtil.isEmpty(saveVO.getMainWorkOrder())) {
+            throw exception(IOT_MAIN_WORK_ORDER_NOT_EXISTS);
+        }
+        List<IotMainWorkOrderBomSaveReqVO> workOrderBOMs = saveVO.getMainWorkOrderBom();
+        if (ObjectUtil.isEmpty(workOrderBOMs)) {
+            throw exception(IOT_MAIN_WORK_ORDER_NOT_EXISTS);
+        }
+        List<IotMainWorkOrderBomMaterialSaveReqVO> workOrderMaterials = saveVO.getMainWorkOrderMaterials();
+        if (ObjectUtil.isEmpty(workOrderMaterials)) {
+            throw exception(IOT_MAIN_WORK_ORDER_NOT_EXISTS);
+        }
+        // todo 保养工单 主表 还有 保养费用 、人工费用 、其他费用
+        IotMainWorkOrderDO order = BeanUtils.toBean(mainWorkOrder, IotMainWorkOrderDO.class);
+        // 生成保养工单号
+        order.setOrderNumber(createWorkOrderNumber());
+        order.setType(2);
+        order.setResult(2);
+        order.setActualStartTime(LocalDateTime.now());
+        order.setActualEndTime(LocalDateTime.now());
+        iotMainWorkOrderMapper.insert(order);
+        // 保养工单明细
+        List<IotMainWorkOrderBomDO> workOrderBomDOS = new ArrayList<>();
+        workOrderBOMs.forEach(bom -> {
+            IotMainWorkOrderBomDO tempBom = BeanUtils.toBean(bom, IotMainWorkOrderBomDO.class);
+            tempBom.setWorkOrderId(order.getId());
+            tempBom.setLastRunningTime(bom.getTotalRunTime());
+            tempBom.setLastRunningKilometers(bom.getTotalMileage());
+            tempBom.setLastNaturalDate(LocalDateTimeUtil.now());
+            tempBom.setDeviceCategoryId(bom.getAssetClass());
+            workOrderBomDOS.add(tempBom);
+        });
+        iotMainWorkOrderBomMapper.insertBatch(workOrderBomDOS);
+        // 保养工单 bom 明细关联的物料消耗
+        List<IotMainWorkOrderBomMaterialDO> workOrderBomMaterialDOS = new ArrayList<>();
+        workOrderMaterials.forEach(material -> {
+            IotMainWorkOrderBomMaterialDO tempMaterial = BeanUtils.toBean(material, IotMainWorkOrderBomMaterialDO.class);
+            tempMaterial.setWorkOrderId(order.getId());
+            workOrderBomMaterialDOS.add(tempMaterial);
+        });
+        iotMainWorkOrderBomMaterialMapper.insertBatch(workOrderBomMaterialDOS);
+        // todo 处理库存减少
+    }
+
 }

+ 1 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorderbommaterial/IotMainWorkOrderBomMaterialService.java

@@ -4,9 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbommaterial.vo.IotMainWorkOrderBomMaterialPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbommaterial.vo.IotMainWorkOrderBomMaterialRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbommaterial.vo.IotMainWorkOrderBomMaterialSaveReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.maintain.material.vo.IotMaintainMaterialPageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorderbommaterial.IotMainWorkOrderBomMaterialDO;
-import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.material.IotMaintainMaterialDO;
 
 import javax.validation.Valid;
 
@@ -62,4 +60,5 @@ public interface IotMainWorkOrderBomMaterialService {
      * @return 工单物料
      */
     PageResult<IotMainWorkOrderBomMaterialRespVO> selectMaterialsByDept(IotMainWorkOrderBomMaterialPageReqVO pageReqVO);
+
 }

+ 0 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorderbommaterial/IotMainWorkOrderBomMaterialServiceImpl.java

@@ -117,5 +117,4 @@ public class IotMainWorkOrderBomMaterialServiceImpl implements IotMainWorkOrderB
         }
         return new PageResult<>(iotMaintainMaterialDOIPage.getRecords(), iotMaintainMaterialDOIPage.getTotal());
     }
-
 }