diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/controller/ZyProductPlanAutoController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/controller/ZyProductPlanAutoController.java index 134e8e83..092fa021 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/controller/ZyProductPlanAutoController.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/controller/ZyProductPlanAutoController.java @@ -30,6 +30,7 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; +import java.util.List; /** * @Description: 生产计划自动化 @@ -46,10 +47,17 @@ public class ZyProductPlanAutoController extends JeecgController productPlanAuto4Mock(List workOrderIds) { + iZyProductPlanAutoService.doAuto(workOrderIds); + return Result.OK(); + } + @ApiOperation(value = "生产计划自动化", notes = "生产计划自动化") - @GetMapping(value = "/auto") - public Result auto(HttpServletRequest req) { - iZyProductPlanAutoService.doAuto(req); + @GetMapping(value = "/productPlanAuto") + public Result productPlanAuto() { + iZyProductPlanAutoService.doAuto(null); return Result.OK(); } diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/service/IZyProductPlanAutoService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/service/IZyProductPlanAutoService.java index d68eb088..d8963946 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/service/IZyProductPlanAutoService.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/service/IZyProductPlanAutoService.java @@ -3,8 +3,10 @@ package org.jeecg.modules.productplan.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.productplan.entity.ZyProductPlan; import org.jeecg.modules.productplan.entity.vo.PaiWeiTuVo; +import org.jeecg.modules.workorder.entity.WorkOrder; import javax.servlet.http.HttpServletRequest; +import java.util.List; /** * @Description: 生产计划 @@ -14,7 +16,7 @@ import javax.servlet.http.HttpServletRequest; */ public interface IZyProductPlanAutoService extends IService { - void doAuto(HttpServletRequest req); + void doAuto(List workOrderList); boolean filling4Auto(String planId); } diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/service/impl/IZyProductPlanAutoServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/service/impl/IZyProductPlanAutoServiceImpl.java index 56cf578c..a854b4f2 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/service/impl/IZyProductPlanAutoServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/service/impl/IZyProductPlanAutoServiceImpl.java @@ -37,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -89,8 +90,7 @@ public class IZyProductPlanAutoServiceImpl extends ServiceImpl saveProductPlan(List workOrderList) { if (ObjectUtils.isEmpty(workOrderList)) return Collections.EMPTY_LIST; @@ -109,8 +109,14 @@ public class IZyProductPlanAutoServiceImpl extends ServiceImpl productPlanList = iZyProductPlanService.list(new LambdaQueryWrapper() + .eq(ZyProductPlan::getStatus, ProductPlanStatusEnum.UNAUDITED.getCode()) + .in(ZyProductPlan::getStatus, zyProductPlanProductCodes)); + return productPlanList; + } + + /** + * 模拟测试方法 + * + * @param workOrderList + * @return + */ + @Transactional(rollbackFor = Exception.class, readOnly = false) + List saveProductPlan4Mock(List workOrderList) { + if (ObjectUtils.isEmpty(workOrderList)) return Collections.EMPTY_LIST; + + Set zyProductPlanProductCodes = new LinkedHashSet<>(); + /** + * 模拟测试 车间、负责人、班组、组长使用固定值 + */ + + workOrderList.stream().forEach(e -> { + String productCode = e.getProductCode(); + ZyProduct zyProduct = iZyProductService.getOne(new LambdaQueryWrapper() + .eq(ZyProduct::getWorkOrderId, productCode)); + Optional.ofNullable(zyProduct).orElseThrow(() -> new JeecgBootException(productCode + ":产品不存在")); + + //2,保存生产计划 + ZyProductPlan zyProductPlan = new ZyProductPlan(); + zyProductPlan.setProductCode(productCode); + zyProductPlan.setProductNo(zyProduct.getProductCode()); + zyProductPlan.setProductName(zyProduct.getProductName()); + + if (StringUtils.isNotBlank(zyProduct.getEnterprisesId())) { + SysDepart sysDepart = iSysDepartService.getById(zyProduct.getEnterprisesId()); + //生产企业 + zyProductPlan.setProductOrg(StringUtils.isNotBlank(sysDepart.getDepartName()) ? sysDepart.getDepartName() : ""); + } + //生产时长,取zy_product表生产时间 + zyProductPlan.setDuration(zyProduct.getProduceTime()); + + SysDepart sysDepart = iSysDepartService.getOne(new LambdaQueryWrapper() + .eq(SysDepart::getOrgCategory, "2") + .eq(SysDepart::getDepartName, "测试生产企业")); + if (ObjectUtils.isEmpty(sysDepart)) throw new JeecgBootException("生产计划自动化-mock-[企业信息]数据异常!"); + + //车间 + zyProductPlan.setWorkshopId(sysDepart.getId()); + List sysDepartIds = new LinkedList<>(); + sysDepartIds.add(sysDepart.getId()); + List sysUserList = iSysUserService.getUserByDepIds(sysDepartIds, null); + //车间负责人 + zyProductPlan.setResponsiblePerson(sysUserList.get(0).getUsername()); + Groupx groupx = iGroupxService.getOne(new LambdaQueryWrapper().eq(Groupx::getDepartId, sysDepart.getId()).eq(Groupx::getGroupName, "测试班组")); + if (ObjectUtils.isEmpty(groupx)) throw new JeecgBootException("生产计划自动化-mock-[班组]数据异常!"); + //班组 + zyProductPlan.setTeamId(groupx.getId()); + //班长 + SysUser sysUser = iSysUserService.getById(groupx.getEnterprisesManager()); + zyProductPlan.setTeamLeader(sysUser.getUsername()); + Date date = new Date(); + //开始时间 + zyProductPlan.setWorkTime(date); + //审核人 + zyProductPlan.setAuditBy("admin"); + //审核时间 + zyProductPlan.setAuditTimr(date); + //生产计划状态为未审核 zyProductPlan.setStatus(new Integer(ProductPlanStatusEnum.UNAUDITED.getCode())); + //保存生产计划 iZyProductPlanService.save(zyProductPlan); + //更新work_order表work_order_status为“1” (不能为其新增生产计划) iWorkOrderService.lambdaUpdate().set(WorkOrder::getWorkOrderStatus, WorkOrderStatusEnum.REVIEWED.getCode()).update(); zyProductPlanProductCodes.add(productCode); }); + //根据productCode,查询本次创建生产计划 List productPlanList = iZyProductPlanService.list(new LambdaQueryWrapper() .eq(ZyProductPlan::getStatus, ProductPlanStatusEnum.UNAUDITED.getCode()) @@ -162,50 +257,28 @@ public class IZyProductPlanAutoServiceImpl extends ServiceImpl sysDepartList2 = new LinkedList<>(); - sysDepartList2.addAll(list2); - int size2 = sysDepartList2.size(); - - while (size2 < size) { - sysDepartList2.addAll(list2); - size2 = sysDepartList2.size(); - } - - System.out.println("sysDepartList2 = " + sysDepartList2.size()); - System.out.println("list2 = " + list2.size()); - System.out.println("list = " + list.size()); - - } - @Override - public void doAuto(HttpServletRequest req) { + @Transactional(rollbackFor = Exception.class, readOnly = false) + public void doAuto(List workOrderList4Mock) { //1,获取未排产工单 - List workOrderList = iWorkOrderService.list(new LambdaQueryWrapper() - .eq(WorkOrder::getWorkOrderStatus, WorkOrderStatusEnum.UNAUDITED.getCode())); + List workOrderList; + if (ObjectUtils.isEmpty(workOrderList4Mock)) { + workOrderList = iWorkOrderService.list(new LambdaQueryWrapper() + .eq(WorkOrder::getWorkOrderStatus, WorkOrderStatusEnum.UNAUDITED.getCode())); + } else { + workOrderList = iWorkOrderService.list(new LambdaQueryWrapper() + .eq(WorkOrder::getWorkOrderStatus, WorkOrderStatusEnum.UNAUDITED.getCode()) + .in(WorkOrder::getId, workOrderList4Mock)); + } + +// List workOrderList = iWorkOrderService.list(new LambdaQueryWrapper() +// .eq(WorkOrder::getWorkOrderStatus, WorkOrderStatusEnum.UNAUDITED.getCode())); + if (ObjectUtils.isEmpty(workOrderList)) return; //2,保存生产计划 - List productPlanList = this.saveProductPlan(workOrderList); +// List productPlanList = this.saveProductPlan(workOrderList); + List productPlanList = this.saveProductPlan4Mock(workOrderList); if (ObjectUtils.isEmpty(productPlanList)) return; //3,同步计划生产工序、同步生产计划工序面料、同步生产计划辅料 @@ -219,21 +292,24 @@ public class IZyProductPlanAutoServiceImpl extends ServiceImpl { + //TODO 数据不完整,测试时注释 // boolean b = this.filling4Auto(k.getId()); // if (b) { - List planProcessList = zyPlanProcessService.list(new LambdaQueryWrapper().eq(ZyPlanProcess::getPlanId, k.getId())); - Optional.ofNullable(planProcessList).orElse(new LinkedList<>()).forEach(e -> { - // 5,生成物料单 - zyPlanProcessService.createMaterialBill(e); - // 5,发送到仓库 - zyPlanProcessService.sendToRepository(e); - }); + List planProcessList = zyPlanProcessService.list(new LambdaQueryWrapper().eq(ZyPlanProcess::getPlanId, k.getId())); + Optional.ofNullable(planProcessList).orElse(new LinkedList<>()).forEach(e -> { + // 5,生成物料单 + zyPlanProcessService.createMaterialBill(e); + // 5,发送到仓库 + zyPlanProcessService.sendToRepository(e); + }); // } }); } /** + * 匹配设备&工具&工人 + *

* 匹配车间工位设备与工序设备,工位设备包含工序设备即匹配成功,匹配失败做异常处理 * 匹配车间工位工具与工序设备,工位设备包含工序设备即匹配成功,匹配失败做异常处理 * @@ -265,8 +341,9 @@ public class IZyProductPlanAutoServiceImpl extends ServiceImpl planProcessList2 = zyPlanProcessService.list(new LambdaQueryWrapper().eq(ZyPlanProcess::getPlanId, planId)); //匹配工人 - this.diffWorker(planProcessList, planId); + this.diffWorker(planProcessList2, planId); return true; }