From 6a82c47d5c7f0663b4818f60d0ba7d8a3b2f6e7c Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Wed, 22 Apr 2026 09:10:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=A5=E5=88=86?= =?UTF-8?q?=E6=B4=BE=E4=BB=BB=E5=8A=A1-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InitYieldOrderDailyAssignlProcessor.java | 39 +++++++ .../desk/basic/pojo/vo/PlanAssignSteerVO.java | 9 ++ .../desk/order/feign/IOrderClient.java | 4 + .../basic/mapper/PlanAssignSteerMapper.java | 2 + .../basic/mapper/PlanAssignSteerMapper.xml | 40 +++++++ .../service/IPlanAssignSteerService.java | 2 + .../impl/PlanAssignSteerServiceImpl.java | 49 +++++++++ .../desk/order/feign/OrderClient.java | 7 ++ .../IYieldOrderDailyAssignService.java | 4 +- .../impl/YieldOrderDailyAssignImpl.java | 101 +++++++++++++++++- 10 files changed, 254 insertions(+), 3 deletions(-) create mode 100644 blade-ops/blade-job/src/main/java/org/springblade/job/processor/dashboard/InitYieldOrderDailyAssignlProcessor.java diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/dashboard/InitYieldOrderDailyAssignlProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/dashboard/InitYieldOrderDailyAssignlProcessor.java new file mode 100644 index 00000000..f57af1c0 --- /dev/null +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/dashboard/InitYieldOrderDailyAssignlProcessor.java @@ -0,0 +1,39 @@ +package org.springblade.job.processor.dashboard; + +import jakarta.annotation.Resource; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.order.feign.IOrderClient; +import org.springframework.stereotype.Component; +import tech.powerjob.worker.core.processor.ProcessResult; +import tech.powerjob.worker.core.processor.TaskContext; +import tech.powerjob.worker.core.processor.sdk.BasicProcessor; + +import java.util.concurrent.CompletableFuture; + +/** + * 工艺模块-返工任务 + * @author liweidong + */ +@Component +@Data +@Slf4j +public class InitYieldOrderDailyAssignlProcessor implements BasicProcessor { + + @Resource + private IOrderClient client; + + @Override + public ProcessResult process(TaskContext context) throws Exception { + log.info("初始化生产订单日分派任务开始"); + CompletableFuture runFuture = CompletableFuture.runAsync(()-> { + try { + client.initYieldOrderDailyAssign(); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + log.info("初始化生产订单日分派任务结束"); + return new ProcessResult(true); + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlanAssignSteerVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlanAssignSteerVO.java index 8fe375e3..c7ba455f 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlanAssignSteerVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlanAssignSteerVO.java @@ -25,4 +25,13 @@ public class PlanAssignSteerVO extends PlanAssignSteer { private String partCode; @Schema(description = "[零件]名称") private String partName; + + @Schema(description = "供应商Id") + private Long ocId; + + @Schema(description = "供应商周累计量") + private Double ocArea; + + @Schema(description = "供应商分类周累积量") + private Double totalArea; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java index 1d459e69..440d8c5e 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java @@ -19,6 +19,7 @@ public interface IOrderClient { String SAVE_GLASS_CAKE = API_PREFIX + "/saveGlassCake"; String CALCULATE_COATING_MATERIAL = API_PREFIX + "/calculateCoatingMaterial"; + String INIT_YIELD_ORDER_DAILY_ASSIGN = API_PREFIX + "/initYieldOrderDailyAssign"; /** @@ -38,4 +39,7 @@ public interface IOrderClient { @GetMapping(CALCULATE_COATING_MATERIAL) void calculateCoatingMaterial(); + @GetMapping(INIT_YIELD_ORDER_DAILY_ASSIGN) + void initYieldOrderDailyAssign() throws Exception; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.java index 7878b9a3..aacd04ee 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.java @@ -37,4 +37,6 @@ public interface PlanAssignSteerMapper extends BaseMapper { * @return List */ List exportPlanAssignSteer(@Param("ew") Wrapper queryWrapper); + + List findParams(@Param("caId")Long caId,@Param("startDate")String startDate,@Param("endDate")String endDate); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.xml index 2359cbe0..4d4fa675 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.xml @@ -23,4 +23,44 @@ + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IPlanAssignSteerService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IPlanAssignSteerService.java index 42fb91c1..99dac1ff 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IPlanAssignSteerService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IPlanAssignSteerService.java @@ -41,4 +41,6 @@ public interface IPlanAssignSteerService extends BaseService { * @param vo */ void setVOValue(PlanAssignSteerVO vo); + + List findParams(Long caId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlanAssignSteerServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlanAssignSteerServiceImpl.java index 952b3561..deb22124 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlanAssignSteerServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlanAssignSteerServiceImpl.java @@ -10,6 +10,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.time.DateFormatUtils; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.desk.basic.excel.PlanAssignSteerExcel; import org.springblade.desk.basic.mapper.PlanAssignSteerMapper; @@ -23,6 +24,10 @@ import org.springblade.system.feign.IDictClient; import org.springblade.system.feign.IUserClient; import org.springframework.stereotype.Service; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; import java.util.List; /** @@ -69,4 +74,48 @@ public class PlanAssignSteerServiceImpl extends BaseServiceImpl findParams(Long caId) { + String startDate = null; + String endDate = null; + try { + startDate = getMonday(DateFormatUtils.format(new Date(),"yyyy-MM-dd")); + endDate = getSunday(DateFormatUtils.format(new Date(),"yyyy-MM-dd")); + } catch (ParseException e) { + e.printStackTrace(); + } + List list = baseMapper.findParams(caId,startDate,endDate); + return list; + } + + + //获得周日 的日期 + private static String getSunday(String d) throws ParseException { + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式 + Calendar cal = Calendar.getInstance(); + Date time=sdf.parse(d); + cal.setTime(time); + //判断要计算的日期是否是周日,如果是则返回 + int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天 + if(1 == dayWeek) { + return d; + } + cal.add(Calendar.DATE, 8 - dayWeek); + return sdf.format(cal.getTime()); + } + // 获得周一的日期 + private static String getMonday(String d) throws ParseException { + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式 + Calendar cal = Calendar.getInstance(); + Date time=sdf.parse(d); + cal.setTime(time); + //判断要计算的日期是否是周日,如果是则返回 + int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天 + if(1 == dayWeek) { + dayWeek = 8; + } + cal.add(Calendar.DATE, 2 - dayWeek); + return sdf.format(cal.getTime()); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java index 6e867257..810281a1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java @@ -29,6 +29,7 @@ import io.swagger.v3.oas.annotations.Hidden; import lombok.RequiredArgsConstructor; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.desk.order.pojo.entity.YieldPlan; +import org.springblade.desk.order.service.IYieldOrderDailyAssignService; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.order.service.IYieldPlanService; import org.springframework.web.bind.annotation.RestController; @@ -46,6 +47,7 @@ public class OrderClient implements IOrderClient { private final IYieldPlanService yieldPlanService; private final IYieldOrderService orderService; + private final IYieldOrderDailyAssignService yieldOrderDailyAssignService; @Override public Boolean saveGlassCake(YieldPlan yieldPlan) { @@ -57,4 +59,9 @@ public class OrderClient implements IOrderClient { public void calculateCoatingMaterial() { orderService.calculateCoatingMaterial(); } + + @Override + public void initYieldOrderDailyAssign() throws Exception { + yieldOrderDailyAssignService.init(); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderDailyAssignService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderDailyAssignService.java index 2dac2aef..511319ac 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderDailyAssignService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderDailyAssignService.java @@ -22,7 +22,7 @@ public interface IYieldOrderDailyAssignService extends BaseService workCenterIdList); + + void init() throws Exception; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderDailyAssignImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderDailyAssignImpl.java index f2901b68..2b60cb31 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderDailyAssignImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderDailyAssignImpl.java @@ -2,22 +2,33 @@ package org.springblade.desk.order.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.springblade.common.constant.CommonConstant; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.basic.pojo.entity.Oem; +import org.springblade.desk.basic.pojo.entity.PlanAssignSteer; +import org.springblade.desk.basic.pojo.entity.WorkCenter; +import org.springblade.desk.basic.pojo.vo.PlanAssignSteerVO; +import org.springblade.desk.basic.service.IOemService; +import org.springblade.desk.basic.service.IPlanAssignSteerService; +import org.springblade.desk.basic.service.IWorkCenterService; import org.springblade.desk.order.mapper.YieldOrderDailyAssignMapper; import org.springblade.desk.order.pojo.dto.YieldOrderAssignCount; import org.springblade.desk.order.pojo.entity.YieldOrderAssignDaily; import org.springblade.desk.order.service.IYieldOrderDailyAssignService; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; /** * 服务实现类 @@ -28,8 +39,14 @@ import java.util.List; @Service public class YieldOrderDailyAssignImpl extends BaseServiceImpl implements IYieldOrderDailyAssignService { + private final IOemService oemService; + + private final IPlanAssignSteerService planAssignSteerService; + + private final IWorkCenterService workCenterService; + @Override - public void saveOrEdit(Long workCenterId, Long oemId, Long abilityId, Double area, Double quantity) { + public void saveOrEdit(Long workCenterId, Long oemId, Long abilityId, Double area, Double quantity) throws Exception { LocalDate today = LocalDate.now(); LocalDateTime startOfDay = today.atStartOfDay(); LocalDateTime endOfDay = today.atTime(LocalTime.MAX); @@ -68,8 +85,14 @@ public class YieldOrderDailyAssignImpl extends BaseServiceImpl workCenterList = workCenterService.list(); + if(CollectionUtils.isNotEmpty(workCenterList)){ + for(WorkCenter workCenter : workCenterList){ + if(StringUtils.isNotEmpty(workCenter.getCraftAbilityId())){ + List abilityIdList = Func.toLongList(workCenter.getCraftAbilityId()); + for(Long abilityId : abilityIdList){ + this.saveOrEdit(workCenter.getId(),null,abilityId,0.0,0.0); + } + } + + } + } + List oemList = oemService.list(); + if(CollectionUtils.isNotEmpty(oemList)){ + for(Oem oem : oemList){ + if(StringUtils.isNotEmpty(oem.getCraftAbilityId())){ + List abilityIdList = Func.toLongList(oem.getCraftAbilityId()); + for(Long abilityId : abilityIdList){ + this.saveOrEdit(null,oem.getId(),abilityId,0.0,0.0); + } + } + } + } + } + + private void handelPlanAssignSteer(Long ocId, Double area, Long caId, String partCode) throws Exception { + + //开始处理所有有这个工艺能力或者零件能力的厂家 + List pasLst = null; + List bpasLst = null; + Map map = new LinkedHashMap<>(); + Double totalArea = 0D; + + + pasLst = planAssignSteerService.findParams(caId); + bpasLst = planAssignSteerService.list(Wrappers.lambdaQuery().eq(PlanAssignSteer::getPlatingId,caId).isNotNull(PlanAssignSteer::getOemId).orderByDesc(PlanAssignSteer::getFactor)); + if (pasLst != null && pasLst.size() > 0) { + totalArea = pasLst.get(0).getTotalArea() + area; + for (PlanAssignSteerVO pas : pasLst) { + map.put(pas.getOcId(), pas.getOcArea()); + } + } + + for (PlanAssignSteer bpas : bpasLst) { + //如果是第一次,周产量直接赋值 + if ((bpas.getWeekAssign() == null || bpas.getWeekAssign().compareTo(BigDecimal.ZERO) == 0) && bpas.getOemId().equals(ocId)) { + bpas.setAssign(String.valueOf(area)); + bpas.setWeekAssign(BigDecimal.valueOf(area)); + if (totalArea == 0D) { + totalArea = area; + } + } else if (map.containsKey(bpas.getOemId())) { + //周产量覆盖 + if (bpas.getOemId().equals(ocId)) { + bpas.setAssign(bpas.getAssign() + area); + bpas.setWeekAssign(BigDecimal.valueOf(map.get(bpas.getOemId()) + area)); + } + } + bpas.setClassifyAssign(BigDecimal.valueOf(totalArea)); + if (bpas.getWeekAssign() == null || bpas.getWeekAssign().compareTo(BigDecimal.ZERO) == 0) { + bpas.setFactor(bpas.getAssignScale().divide(BigDecimal.valueOf(100)).multiply(BigDecimal.valueOf(10000)) ); + } else { + if(bpas.getClassifyAssign().compareTo(BigDecimal.ZERO) ==0){ + bpas.setFactor(BigDecimal.ZERO); + }else{ + bpas.setFactor(bpas.getAssignScale().divide(BigDecimal.valueOf(100)).divide (bpas.getWeekAssign().divide(bpas.getClassifyAssign()))); + } + } + planAssignSteerService.updateById(bpas); + } + } }