From 85c2b743ae3a9ced9a507f4ea9602e48004c9205 Mon Sep 17 00:00:00 2001 From: siontion Date: Mon, 17 Jun 2024 10:40:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=88=9B=E5=BB=BA=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=8A=A5=E5=B7=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/module/biz/enums/WarningEnum.java | 3 +- .../biz/vo/DispatchWarningMessageVO.java | 53 +++++++++++++++ .../admin/chanjet/ChanjetController.java | 24 +++---- .../admin/customer/CustomerController.java | 2 + .../controller/admin/plan/PlanController.java | 23 ++++++- .../taskdispatch/TaskDispatchController.java | 9 +++ .../taskreport/TaskReportController.java | 11 +++ .../equipmanufacture/EquipManufactureDO.java | 4 +- .../biz/dal/dataobject/plan/PlanDO.java | 3 + .../dataobject/taskreport/TaskReportDO.java | 17 +++++ .../EquipManufactureMapper.java | 17 +++-- .../module/biz/dal/mysql/plan/PlanMapper.java | 1 + .../TaskDispatchDetailMapper.java | 26 +++++++ .../mysql/taskreport/TaskReportMapper.java | 25 +++++++ .../module/biz/manager/ChanjetManager.java | 34 ++++++++++ .../module/biz/manager/ChanjetSchedule.java | 67 +++++++++++++++---- .../taskdispatch/TaskDispatchService.java | 8 +++ .../taskdispatch/TaskDispatchServiceImpl.java | 32 +++++++++ .../controller/admin/user/UserController.java | 10 +++ .../dal/mysql/user/AdminUserMapper.java | 15 +++++ .../system/service/user/AdminUserService.java | 8 +++ .../service/user/AdminUserServiceImpl.java | 5 ++ 22 files changed, 364 insertions(+), 33 deletions(-) create mode 100644 mes-module-majoys/mes-module-majoys-api/src/main/java/com/chanko/yunxi/mes/module/biz/vo/DispatchWarningMessageVO.java diff --git a/mes-module-majoys/mes-module-majoys-api/src/main/java/com/chanko/yunxi/mes/module/biz/enums/WarningEnum.java b/mes-module-majoys/mes-module-majoys-api/src/main/java/com/chanko/yunxi/mes/module/biz/enums/WarningEnum.java index d80fd0fe..5e0739fc 100644 --- a/mes-module-majoys/mes-module-majoys-api/src/main/java/com/chanko/yunxi/mes/module/biz/enums/WarningEnum.java +++ b/mes-module-majoys/mes-module-majoys-api/src/main/java/com/chanko/yunxi/mes/module/biz/enums/WarningEnum.java @@ -10,7 +10,8 @@ import lombok.Getter; @Getter public enum WarningEnum { - PROCESS_DESIGN_DEFERRED_WARNING("工艺设计延期预警"); + PROCESS_DESIGN_DEFERRED_WARNING("工艺设计延期预警"), + DISPATCH_NO_FINISHED_WARNING("每日报工未达标预警"); private String description; diff --git a/mes-module-majoys/mes-module-majoys-api/src/main/java/com/chanko/yunxi/mes/module/biz/vo/DispatchWarningMessageVO.java b/mes-module-majoys/mes-module-majoys-api/src/main/java/com/chanko/yunxi/mes/module/biz/vo/DispatchWarningMessageVO.java new file mode 100644 index 00000000..dbb7deb3 --- /dev/null +++ b/mes-module-majoys/mes-module-majoys-api/src/main/java/com/chanko/yunxi/mes/module/biz/vo/DispatchWarningMessageVO.java @@ -0,0 +1,53 @@ +package com.chanko.yunxi.mes.module.biz.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 预警信息 + * + * @author chenxi + * @date 2024-02-23 09:54 + */ +@Data +@Accessors(chain = true) +public class DispatchWarningMessageVO { + + @Schema(description = "是否包含预警信息") + private boolean hasWarning = false; + + @Schema(description = "预警信息") + private List warnings; + + + public static abstract class WarningVO {} + + @Data + @Accessors(chain = true) + public static class DispatchWarningVO extends WarningVO { + + @Schema(description = "自增id") + private Long id; + + /** + * {@link com.chanko.yunxi.mes.module.biz.enums.WarningEnum} + */ + @Schema(description = "预警类型") + private String warningType; + + @Schema(description = "预警接收人") + private String ownerName; + + @Schema(description = "派工编号") + private String dispatchCode; + + @Schema(description = "派工工序名称") + private String procedureName; + + @Schema(description = "每日产能") + private long amount; + } +} diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/ChanjetController.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/ChanjetController.java index 8df14334..035c7dd8 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/ChanjetController.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/chanjet/ChanjetController.java @@ -238,23 +238,23 @@ public class ChanjetController { //查询销售订单列表 chanjetSchedule.queryProjectOrder(); - //查询bom表 - chanjetSchedule.queryProcessBom(null,null); +// //查询bom表 +// chanjetSchedule.queryProcessBom(null,null); //查询存货 chanjetSchedule.queryMaterial(); - //查询库存-现存量 - chanjetSchedule.queryStock(null,null); +// //查询库存-现存量 +// chanjetSchedule.queryStock(null,null); //查询仓库 chanjetSchedule.queryWarehouse(); //创建入库 - chanjetSchedule.createStorageInOrder(new Long(0)); - //创建出库 - chanjetSchedule.createStockOutOrder(new Long(0)); - - //创建工序 - chanjetSchedule.createProcedure(null); - //创建员工 - chanjetSchedule.createUser(null); + chanjetSchedule.createStorageInOrder(); +// //创建出库 +// chanjetSchedule.createStockOutOrder(new Long(0)); +// +// //创建工序 +// chanjetSchedule.createProcedure(null); +// //创建员工 +// chanjetSchedule.createUser(null); } } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/customer/CustomerController.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/customer/CustomerController.java index efc1feef..3882d31c 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/customer/CustomerController.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/customer/CustomerController.java @@ -93,4 +93,6 @@ public class CustomerController { BeanUtils.toBean(list, CustomerRespVO.class)); } + + } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/plan/PlanController.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/plan/PlanController.java index 6f495f88..b55302a8 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/plan/PlanController.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/plan/PlanController.java @@ -65,8 +65,27 @@ public class PlanController { @PreAuthorize("@ss.hasPermission('biz:plan:update')") public CommonResult updatePlanStatus(@Valid @RequestBody PlanSaveReqVO updateReqVO) { PlanDO plan = planService.getPlan(updateReqVO.getId()); - plan.setStatus(updateReqVO.getStatus()); - planMapper.updateById(plan); + + PlanPageReqVO pageReqVO = new PlanPageReqVO(); + pageReqVO.setPlanNo(plan.getPlanNo()).setPageSize(99); + PageResult pageResult = planService.getPlanOfSchedulePage(pageReqVO); + + if(pageResult.getTotal()>0){ + Integer orderTotal = pageResult.getList().get(0).getAmount(); + final Integer[] finishedTotal = {0}; + pageResult.getList().forEach(item ->{ + finishedTotal[0] += item.getFinishedAmount(); + }); + + if(orderTotal == finishedTotal[0]){ + plan.setStatus(updateReqVO.getStatus()); + planMapper.updateById(plan); + } + + } + + + return success(true); } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/taskdispatch/TaskDispatchController.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/taskdispatch/TaskDispatchController.java index f807f6d1..9bf3d149 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/taskdispatch/TaskDispatchController.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/taskdispatch/TaskDispatchController.java @@ -19,6 +19,8 @@ import com.chanko.yunxi.mes.module.biz.service.taskdispatch.TaskDispatchService; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.biz.enums.BusinessTypeEnum; +import com.chanko.yunxi.mes.module.biz.vo.DispatchWarningMessageVO; +import com.chanko.yunxi.mes.module.biz.vo.WarningMessageVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -258,4 +260,11 @@ public class TaskDispatchController { taskDispatchDetailMapper.updateById(taskDispatchDetailDO); return success(true); } + + @GetMapping("/warnings") + @Operation(summary = "获得工艺设计预警信息") + @PreAuthorize("@ss.hasPermission('biz:process-design:query')") + public CommonResult getWarnings() { + return success(taskDispatchService.getWarnings()); + } } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/taskreport/TaskReportController.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/taskreport/TaskReportController.java index ee6aba30..f0773b10 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/taskreport/TaskReportController.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/taskreport/TaskReportController.java @@ -41,6 +41,17 @@ public class TaskReportController { return success(taskReportService.createTaskReport(createReqVO)); } + @PostMapping("/create-batch") + @Operation(summary = "批量创建任务报工") + @PreAuthorize("@ss.hasPermission('biz:task-report:create')") + public CommonResult createTaskReport(@Valid @RequestBody List createReqVOs) { + createReqVOs.forEach(item ->{ + taskReportService.createTaskReport(item); + }); +// taskReportService.createTaskReport(createReqVO) + return success(true); + } + @PutMapping("/update") @Operation(summary = "更新任务报工") @PreAuthorize("@ss.hasPermission('biz:task-report:update')") diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/equipmanufacture/EquipManufactureDO.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/equipmanufacture/EquipManufactureDO.java index 6fe56dac..d4f4de0d 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/equipmanufacture/EquipManufactureDO.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/equipmanufacture/EquipManufactureDO.java @@ -1,6 +1,8 @@ package com.chanko.yunxi.mes.module.biz.dal.dataobject.equipmanufacture; import lombok.*; + +import java.math.BigDecimal; import java.util.*; import java.time.LocalDateTime; import java.time.LocalDateTime; @@ -56,6 +58,6 @@ public class EquipManufactureDO extends BaseDO { private String workShopName; @TableField(exist = false) - private Long workTime; + private BigDecimal workTime; } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/plan/PlanDO.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/plan/PlanDO.java index 9a38d6e7..668c82d1 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/plan/PlanDO.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/plan/PlanDO.java @@ -185,5 +185,8 @@ public class PlanDO extends BaseDO { @TableField(exist = false) private Integer isCompleted; + @TableField(exist = false) + private Integer finishedAmount; + } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/taskreport/TaskReportDO.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/taskreport/TaskReportDO.java index d20e353f..8a2d949c 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/taskreport/TaskReportDO.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/taskreport/TaskReportDO.java @@ -103,6 +103,12 @@ public class TaskReportDO extends BaseDO { @TableField(exist = false) private String materialName; + @TableField(exist = false) + private Long materialId; + + @TableField(exist = false) + private String materialCode; + @TableField(exist = false) private String spec; @@ -123,4 +129,15 @@ public class TaskReportDO extends BaseDO { @TableField(exist = false) private String ownerUsername; + + private Integer hasSynch; + + @TableField(exist = false) + private Integer isFinal; + + @TableField(exist = false) + private Long whId; + + @TableField(exist = false) + private String whNo; } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/equipmanufacture/EquipManufactureMapper.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/equipmanufacture/EquipManufactureMapper.java index 9c0674c2..43b08332 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/equipmanufacture/EquipManufactureMapper.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/equipmanufacture/EquipManufactureMapper.java @@ -6,6 +6,8 @@ import com.chanko.yunxi.mes.framework.mybatis.core.query.MPJLambdaWrapperX; import com.chanko.yunxi.mes.module.biz.controller.admin.equipmanufacture.vo.EquipManufacturePageReqVO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.equipmanufacture.EquipManufactureDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.procedure.ProcedureDO; +import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDetailDO; +import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskreport.TaskReportDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.workshop.WorkshopDO; import org.apache.ibatis.annotations.Mapper; import org.springframework.util.StringUtils; @@ -41,12 +43,17 @@ public interface EquipManufactureMapper extends BaseMapperX default PageResult selectWorkTimePage(EquipManufacturePageReqVO reqVO) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); +// query.selectAll(EquipManufactureDO.class) +// .select("d.work_time as workTime","w.name as workShopName") +// .leftJoin("(select a.device_model,sum(b.work_time) work_time from pro_task_dispatch_detail a left join pro_task_report b on a.id=b.dispatch_detail_id" + +// " where a.deleted=0 and b.deleted=0 and ISNULL(a.device_model)=0 group by a.device_model ) as d on on t.id=d.device_model") +// .leftJoin(WorkshopDO.class,"w",WorkshopDO::getId,EquipManufactureDO::getWorkshopId) +// ; query.selectAll(EquipManufactureDO.class) - .select("d.work_time as workTime","w.name as workShopName") - .leftJoin("(select a.device_model,sum(b.work_time) work_time from pro_task_dispatch_detail a left join pro_task_report b on a.id=b.dispatch_detail_id" + - " where a.deleted=0 and b.deleted=0 and ISNULL(a.device_model)=0 group by a.device_model ) as d on on t.id=d.device_model") - .leftJoin(WorkshopDO.class,"w",WorkshopDO::getId,EquipManufactureDO::getWorkshopId) - ; + .select("c.name as workShopName","sum(b.work_time) workTime") + .leftJoin(TaskDispatchDetailDO.class,"a",TaskDispatchDetailDO::getDeviceModel,EquipManufactureDO::getId) + .leftJoin(TaskReportDO.class,"b",TaskReportDO::getDispatchDetailId,TaskDispatchDetailDO::getId) + .leftJoin(WorkshopDO.class,"c",WorkshopDO::getId,EquipManufactureDO::getWorkshopId); query.likeIfPresent(EquipManufactureDO::getCode, reqVO.getCode()) diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/plan/PlanMapper.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/plan/PlanMapper.java index 852a09d8..b081ce68 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/plan/PlanMapper.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/plan/PlanMapper.java @@ -93,6 +93,7 @@ public interface PlanMapper extends BaseMapperX { .select("i.name as workshopName, h.name as procedureName") .select("u1.nickname as reportUserName", "f.work_time as workTime, f.amount as deliverAmount") .select("case when f.procedure_status = 2 then 1 else 0 end as isCompleted") + .select("sum(case when h.is_final=1 then g.amount else 0 end) finishedAmount") .leftJoin(ProjectOrderDO.class, "a", ProjectOrderDO::getId, PlanDO::getProjectId) .leftJoin(ProjectOrderSubDO.class, "b", ProjectOrderSubDO::getProjectOrderId, ProjectOrderDO::getId) .leftJoin(PlanSubDO.class, "c", PlanSubDO::getProjectSubId, ProjectOrderSubDO::getId) diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java index d805ed33..2582ef3a 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java @@ -132,4 +132,30 @@ public interface TaskDispatchDetailMapper extends BaseMapperX selectNoFinishedReportPage(TaskDispatchDetailPageReqVO reqVO) { + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + query.selectAll(TaskDispatchDetailDO.class) + .select("a.code as dispatchCode") + .select("e.name as procedureName") + .select("u.nickname as ownerName") + .leftJoin(TaskDispatchDO.class, "a", TaskDispatchDO::getId, TaskDispatchDetailDO::getDispatchId) +// .leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, TaskDispatchDO::getProjectId) +// .leftJoin(ProjectOrderSubDO.class, "c", ProjectOrderSubDO::getId, TaskDispatchDO::getProjectSubId) +// .leftJoin(MaterialDO.class, "d", MaterialDO::getId, ProjectOrderSubDO::getMaterialId) + .leftJoin(ProcedureDO.class, "e", ProcedureDO::getId, TaskDispatchDetailDO::getProcedureId) + .leftJoin("pro_task_report as f on t.dispatch_id=f.dispatch_id and t.procedure_id=f.procedure_id and DATE(f.start_time)=(CURDATE() - INTERVAL 1 DAY)") +// .leftJoin(WorkshopDO.class, "g", WorkshopDO::getId, TaskDispatchDO::getWorkshopId) + .leftJoin(AdminUserDO.class,"u",AdminUserDO::getId,TaskDispatchDetailDO::getOwner) + .groupBy("t.dispatch_id,t.procedure_id") + .having("t.amount/DATEDIFF(t.end_time,t.start_time)>sum(ifnull(a.amount,0))") + .orderByDesc(TaskDispatchDetailDO::getId) + .disableSubLogicDel(); + + query.eq(true,TaskDispatchDetailDO::getProcedureStatus,1) + .eq(true,TaskDispatchDetailDO::getOwner,reqVO.getOwner()) + ; + + return selectPage(reqVO,query); + } + } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/taskreport/TaskReportMapper.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/taskreport/TaskReportMapper.java index d4a0a58a..1ae18d5d 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/taskreport/TaskReportMapper.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/taskreport/TaskReportMapper.java @@ -12,6 +12,7 @@ import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderS import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskreport.TaskReportDO; +import com.chanko.yunxi.mes.module.biz.dal.dataobject.warehouse.WarehouseDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Mapper; @@ -91,4 +92,28 @@ public interface TaskReportMapper extends BaseMapperX { return selectOne(query); } + default PageResult selectNoSynchPage(TaskReportPageReqVO reqVO) { + MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); + query.selectAll(TaskReportDO.class) + .select("y.is_final as isFinal") + .select("e.id as materialId") + .select("e.code as materialCode") + .select("w.warehouse_id as whId") + .select("w.wh_no as whNo") + .leftJoin(TaskDispatchDetailDO.class, "x", TaskDispatchDetailDO::getId, TaskReportDO::getDispatchDetailId) + .leftJoin(ProcedureDO.class, "y", ProcedureDO::getId, TaskReportDO::getProcedureId) + .leftJoin(TaskDispatchDO.class, "z", TaskDispatchDO::getId, TaskReportDO::getDispatchId) + .leftJoin(PlanDO.class, "a", PlanDO::getId, TaskDispatchDO::getPlanId) + .leftJoin(ProjectOrderSubDO.class, "c", ProjectOrderSubDO::getId, TaskDispatchDO::getProjectSubId) + .leftJoin(ProjectOrderDO.class, "d", ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId) + .leftJoin(MaterialDO.class, "e", MaterialDO::getId, ProjectOrderSubDO::getMaterialId) + .leftJoin(WarehouseDO.class,"w",WarehouseDO::getId,ProjectOrderSubDO::getWarehouseId) + .orderByDesc(TaskReportDO::getId) + .disableSubLogicDel(); + + query.eq(true,TaskReportDO::getHasSynch,0); + + return selectPage(reqVO, query); + } + } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetManager.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetManager.java index f92af1b4..4df0afe0 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetManager.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetManager.java @@ -11,6 +11,7 @@ import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.framework.common.util.object.ObjectUtils; import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum; +import com.chanko.yunxi.mes.framework.operatelog.core.service.OperateLogFrameworkService; import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.ChanjetSpi; import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.*; import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo.*; @@ -58,6 +59,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDateTime; @@ -120,6 +122,13 @@ public class ChanjetManager { @Resource private SystemParametersMapper systemParametersMapper; + @Resource + private OperateLogFrameworkService operateLogFrameworkService; + + @Resource + private HttpServletRequest request; + + private Boolean getSystemParameters(){ Boolean chanjet_switch = true; SystemParametersDO systemParametersDO = systemParametersMapper.selectOne("code",SystemParmetersEnum.TPLUS_INTERFACE_SWITCH.getDescription()); @@ -820,6 +829,31 @@ public class ChanjetManager { saveReqVO.setProjectOrderSubs(subDOList); projectOrderController.operateProjectOrder(saveReqVO); + + // 根据销售订单的每个产品的BOM,找到物料编码为6开头的物料,原先的生成生产订单的逻辑不变,再另外生成一张生产订单 + if(subDOList.stream().filter(sub ->{ return sub.getMaterialId().toString().startsWith("6");}).count()>0){ + ProjectOrderDO newProjectOrderDO =BeanUtil.toBean(projectOrderMapper.selectById(saveReqVO.getId()),ProjectOrderDO.class); + newProjectOrderDO.setId(null); + newProjectOrderDO.setCode(newProjectOrderDO.getCode()+"-1"); + + projectOrderMapper.insert(newProjectOrderDO); + + List insertList =subDOList.stream().filter(sub ->{ return sub.getMaterialId().toString().startsWith("6");}).collect(Collectors.toList()); + insertList.forEach(o->{ + o.setId(null); + o.setProjectOrderId(newProjectOrderDO.getId()); +// o.setAmount() + }); + projectOrderSubMapper.insertBatch(insertList); + + // 手动记录日志 + operateLogFrameworkService.createOperateLog(request, + LocalDateTime.now(), + BusinessTypeEnum.PROJECT_ORDER.name(), + newProjectOrderDO.getId(), + OperateTypeEnum.valueOf(OperateTypeEnum.SAVE.name()).getType(), + ""); + } } }); } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetSchedule.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetSchedule.java index 87f900e2..3e7b7c1e 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetSchedule.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/manager/ChanjetSchedule.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.chanjet.openapi.sdk.java.exception.ChanjetApiException; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum; import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.ChanjetSpi; @@ -16,6 +17,7 @@ import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo.*; import com.chanko.yunxi.mes.module.biz.controller.admin.procedure.vo.ProcedureSaveReqVO; import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.ProjectOrderController; import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.vo.ProjectOrderSaveReqVO; +import com.chanko.yunxi.mes.module.biz.controller.admin.taskreport.vo.TaskReportPageReqVO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.customer.CustomerDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.procedure.ProcedureDO; @@ -57,11 +59,15 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import javax.annotation.Resource; +import java.lang.reflect.Array; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -1148,15 +1154,51 @@ public class ChanjetSchedule { } /** - * 创建入库单 + * 根据报工数据创建入库单 * @param id * @throws ChanjetApiException */ @Transactional(rollbackFor = Exception.class) - public void createStorageInOrder(Long id) throws ChanjetApiException { - StorageDO storage = storageMapper.selectById(id); - List matList = storageMatService.getStorageMatListByStockId(id); - if(matList.isEmpty()) return; + public void createStorageInOrder() throws ChanjetApiException { + StorageDO storage = new StorageDO(); + + TaskReportPageReqVO reqVO =new TaskReportPageReqVO(); + reqVO.setPageSize(999); + PageResult reprotResult = taskReportMapper.selectNoSynchPage(reqVO); + + List sublist = new ArrayList<>(); + if(reprotResult.getTotal()>0){ + Map> dataGroupByMatCode = reprotResult.getList().stream().collect(Collectors.groupingBy(TaskReportDO::getWhNo)); + dataGroupByMatCode.forEach((whno,mList) ->{ + mList.forEach(item->{ + if(item.getIsFinal().equals(1)){ + StorageMatDO storageMatDO = new StorageMatDO(); + storageMatDO.setMatId(item.getMaterialId()); + storageMatDO.setProcedureId(item.getProcedureId()); + storageMatDO.setStorageOkQty(new BigDecimal(mList.stream().filter(vo -> vo.getMaterialId().equals(item.getMaterialId())).mapToInt(TaskReportDO::getAmount).sum())); + + + sublist.add(storageMatDO); + } + if(item.getType().equals("ASSEMBLE")){ + StorageMatDO storageMatDO = new StorageMatDO(); + storageMatDO.setMatId(item.getMaterialId()); + storageMatDO.setProcedureId(item.getProcedureId()); + storageMatDO.setStorageOkQty(new BigDecimal(mList.stream().filter(vo -> vo.getMaterialId().equals(item.getMaterialId())).filter(distinctByKeys(p-> Arrays.asList(p.getMaterialId(),p.getAssembleCode()))).count())); + + sublist.add(storageMatDO); + } + }); + + + + }); + reprotResult.getList().forEach(item->{ + item.setHasSynch(1); + taskReportMapper.updateById(item); + }); + } + WarehouseDO aDo = warehouseMapper.selectById(storage.getWhId()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @@ -1169,13 +1211,6 @@ public class ChanjetSchedule { .setWarehouse(new Warehouse(aDo.getWhNo())) ; - matList.forEach(mat -> { - RDRecordDetail detail = new RDRecordDetail(); - detail.setCode(String.valueOf(mat.getId())).setBaseQuantity(mat.getStorageOkQty()) - .setInventory(new Inventory(mat.getProjectSubCode())); - detailList.add(detail); - }); - // 设置为“否”,关闭所有与用友通信的接口;为“是”,打开所有与用友通信的接口 if(getSystemParameters()){ CommonResult result = chanjetSpi.invoke(CREATE_STOCK_IN_ORDER, new CreateStorageReqVO(dto), ResultResVO.class); @@ -1185,6 +1220,14 @@ public class ChanjetSchedule { } } + // 自定义多字段去重比较器 + public static Predicate distinctByKeys(Function> keyExtractors) { + Map, Boolean> seen = new ConcurrentHashMap<>(); + return t -> { + List keys = keyExtractors.apply(t); + return seen.putIfAbsent(keys, Boolean.TRUE) == null; + }; + } /** * 创建生产加工单 diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/taskdispatch/TaskDispatchService.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/taskdispatch/TaskDispatchService.java index a677f964..22bf6dfe 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/taskdispatch/TaskDispatchService.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/taskdispatch/TaskDispatchService.java @@ -8,6 +8,8 @@ import com.chanko.yunxi.mes.module.biz.controller.admin.taskdispatch.vo.TaskDisp import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDetailOwnerDO; +import com.chanko.yunxi.mes.module.biz.vo.DispatchWarningMessageVO; +import com.chanko.yunxi.mes.module.biz.vo.WarningMessageVO; import javax.validation.Valid; import java.util.List; @@ -82,4 +84,10 @@ public interface TaskDispatchService { void convertAssembleProcedure(TaskDispatchDO taskDispatchDO); void saveTaskDispatchDetailList(Long dispatchId, List list); + + /** + * 获取预警信息 + * @return + */ + DispatchWarningMessageVO getWarnings(); } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/taskdispatch/TaskDispatchServiceImpl.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/taskdispatch/TaskDispatchServiceImpl.java index 19d5c06e..fdcae901 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/taskdispatch/TaskDispatchServiceImpl.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/taskdispatch/TaskDispatchServiceImpl.java @@ -31,6 +31,8 @@ import com.chanko.yunxi.mes.module.biz.dal.mysql.workshop.WorkshopMapper; import com.chanko.yunxi.mes.module.biz.enums.*; import com.chanko.yunxi.mes.module.biz.manager.CrossOrderManager; import com.chanko.yunxi.mes.module.biz.service.serialnumber.SerialNumberService; +import com.chanko.yunxi.mes.module.biz.vo.DispatchWarningMessageVO; +import com.chanko.yunxi.mes.module.biz.vo.WarningMessageVO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.dal.mysql.user.AdminUserMapper; import com.chanko.yunxi.mes.module.system.service.user.AdminUserService; @@ -467,4 +469,34 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { taskDispatchDetailMapper.deleteByDispatchId(dispatchId); } + @Override + public DispatchWarningMessageVO getWarnings() { + DispatchWarningMessageVO warningMessageVO = new DispatchWarningMessageVO(); + warningMessageVO.setWarnings(new ArrayList<>(99)); + + Long userId = SecurityFrameworkUtils.getLoginUser().getId(); + TaskDispatchDetailPageReqVO reqVO = new TaskDispatchDetailPageReqVO(); + reqVO.setOwner(userId).setPageSize(99); + PageResult result = taskDispatchDetailMapper.selectNoFinishedReportPage(reqVO); + + if(result.getTotal() > 0){ + + result.getList().forEach(detail -> { + DispatchWarningMessageVO.DispatchWarningVO dispatchWarningVO = new DispatchWarningMessageVO.DispatchWarningVO(); + dispatchWarningVO.setId(detail.getId()); + dispatchWarningVO.setDispatchCode(detail.getDispatchCode()); + dispatchWarningVO.setProcedureName(detail.getProcedureName()); + dispatchWarningVO.setWarningType(WarningEnum.DISPATCH_NO_FINISHED_WARNING.name()); + dispatchWarningVO.setOwnerName(detail.getOwnerName()); + dispatchWarningVO.setAmount(detail.getAmount()); + + warningMessageVO.getWarnings().add(dispatchWarningVO); + }); + + } + + return warningMessageVO; + + } + } diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/user/UserController.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/user/UserController.java index aef799d6..9afd5121 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/user/UserController.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/user/UserController.java @@ -5,6 +5,7 @@ import com.chanko.yunxi.mes.framework.common.enums.CommonStatusEnum; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog; import com.chanko.yunxi.mes.module.system.controller.admin.user.vo.user.*; @@ -166,4 +167,13 @@ public class UserController { return success(userService.importUserList(list, updateSupport)); } + @GetMapping("/salary") + @Operation(summary = "获得员工薪资表分页") + @PreAuthorize("@ss.hasPermission('system:user:list')") + public CommonResult> getUserSalaryPage(@Valid UserPageReqVO pageReqVO) { + // 获得用户分页列表 + PageResult pageResult = userService.getUserSalaryPage(pageReqVO); + + return success(pageResult); + } } diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/dal/mysql/user/AdminUserMapper.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/dal/mysql/user/AdminUserMapper.java index 46d56aec..fe58c5e8 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/dal/mysql/user/AdminUserMapper.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/dal/mysql/user/AdminUserMapper.java @@ -53,4 +53,19 @@ public interface AdminUserMapper extends BaseMapperX { return selectList(AdminUserDO::getDeptId, deptIds); } + + default PageResult selectSalaryPage(UserPageReqVO reqVO, Collection deptIds) { + LambdaQueryWrapperX query = new LambdaQueryWrapperX() + .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername()) + .likeIfPresent(AdminUserDO::getNickname, reqVO.getNickname()) + .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile()) + .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime()) + .inIfPresent(AdminUserDO::getDeptId, deptIds) + .orderByDesc(AdminUserDO::getId); + if(!StringUtils.isEmpty(reqVO.getUserNickName())){ + query.and(QueryWrapper -> QueryWrapper.like(AdminUserDO::getUsername, reqVO.getUserNickName()).or().like(AdminUserDO::getNickname, reqVO.getUserNickName())); + } + return selectPage(reqVO, query); + } } diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserService.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserService.java index 92d1ec97..13a64fdd 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserService.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserService.java @@ -113,6 +113,14 @@ public interface AdminUserService { */ PageResult getUserPage(UserPageReqVO reqVO); + /** + * 获得员工薪资表分页 + * + * @param reqVO 分页条件 + * @return 分页列表 + */ + PageResult getUserSalaryPage(UserPageReqVO reqVO); + /** * 通过用户 ID 查询用户 * diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserServiceImpl.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserServiceImpl.java index 2efe1f6a..d8c4cf7d 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserServiceImpl.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserServiceImpl.java @@ -222,6 +222,11 @@ public class AdminUserServiceImpl implements AdminUserService { return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId())); } + @Override + public PageResult getUserSalaryPage(UserPageReqVO reqVO) { + return userMapper.selectSalaryPage(reqVO, getDeptCondition(reqVO.getDeptId())); + } + @Override public AdminUserDO getUser(Long id) { return userMapper.selectById(id);