初始化日分派任务-sjx

liweidong
sunjianxi 2 weeks ago
parent cdc8cc99f0
commit 6a82c47d5c
  1. 39
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/dashboard/InitYieldOrderDailyAssignlProcessor.java
  2. 9
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlanAssignSteerVO.java
  3. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java
  4. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.java
  5. 40
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlanAssignSteerMapper.xml
  6. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IPlanAssignSteerService.java
  7. 49
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlanAssignSteerServiceImpl.java
  8. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java
  9. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderDailyAssignService.java
  10. 101
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderDailyAssignImpl.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<Void> runFuture = CompletableFuture.runAsync(()-> {
try {
client.initYieldOrderDailyAssign();
} catch (Exception e) {
throw new RuntimeException(e);
}
});
log.info("初始化生产订单日分派任务结束");
return new ProcessResult(true);
}
}

@ -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;
}

@ -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;
}

@ -37,4 +37,6 @@ public interface PlanAssignSteerMapper extends BaseMapper<PlanAssignSteer> {
* @return List<PlanAssignSteerExcel>
*/
List<PlanAssignSteerExcel> exportPlanAssignSteer(@Param("ew") Wrapper<PlanAssignSteer> queryWrapper);
List<PlanAssignSteerVO> findParams(@Param("caId")Long caId,@Param("startDate")String startDate,@Param("endDate")String endDate);
}

@ -23,4 +23,44 @@
<select id="exportPlanAssignSteer" resultType="org.springblade.desk.basic.excel.PlanAssignSteerExcel">
SELECT * FROM BA_PLAN_ASSIGN_STEER ${ew.customSqlSegment}
</select>
<select id="findParams" resultType="org.springblade.desk.basic.pojo.vo.PlanAssignSteerVO">
SELECT
a.ocId AS ocId,
a.area AS ocArea,
b.area AS totalArea
FROM
(
SELECT
a.CRAFT_ABILITY_ID AS caId,
a.OEM_ID AS ocId,
sum( area ) AS area
FROM
MES_YIELD_ORDER_ASSIGN_DAILY a
WHERE
a.CRAFT_ABILITY_ID = #{caId}
AND a.create_time BETWEEN to_date(concat(#{startDate},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
AND to_date(concat(#{endDate},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS')
AND a.OEM_ID IS NOT NULL
AND a.CRAFT_ABILITY_ID IS NOT NULL
GROUP BY
a.CRAFT_ABILITY_ID,
a.OEM_ID
) a
INNER JOIN (
SELECT
a.CRAFT_ABILITY_ID AS caId,
sum( area ) AS area
FROM
MES_YIELD_ORDER_ASSIGN_DAILY a
WHERE
a.CRAFT_ABILITY_ID = #{caId}
AND a.create_time BETWEEN to_date(concat(#{startDate},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')
AND to_date(concat(#{endDate},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS')
AND a.OEM_ID IS NOT NULL
AND a.CRAFT_ABILITY_ID IS NOT NULL
GROUP BY
a.CRAFT_ABILITY_ID
) b ON a.caId = b.caId
</select>
</mapper>

@ -41,4 +41,6 @@ public interface IPlanAssignSteerService extends BaseService<PlanAssignSteer> {
* @param vo
*/
void setVOValue(PlanAssignSteerVO vo);
List<PlanAssignSteerVO> findParams(Long caId);
}

@ -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<PlanAssignSteerM
}
}
}
@Override
public List<PlanAssignSteerVO> 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<PlanAssignSteerVO> 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());
}
}

@ -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();
}
}

@ -22,7 +22,7 @@ public interface IYieldOrderDailyAssignService extends BaseService<YieldOrderAss
* @param area
* @param quantity
*/
void saveOrEdit(Long workCenterId, Long oemId, Long abilityId, Double area, Double quantity);
void saveOrEdit(Long workCenterId, Long oemId, Long abilityId, Double area, Double quantity) throws Exception;
/**
* 根据工艺能力获取厂内外制作批数
@ -41,4 +41,6 @@ public interface IYieldOrderDailyAssignService extends BaseService<YieldOrderAss
* @return
*/
YieldOrderAssignDaily findMinNum(Long abilityId, List<Long> workCenterIdList);
void init() throws Exception;
}

@ -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<YieldOrderDailyAssignMapper, YieldOrderAssignDaily> 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<YieldOrderDailyAs
this.updateById(assignDaily);
}
//更新周分派汇总
if(Func.isNotEmpty(oemId)){
Oem oem = oemService.getById(oemId);
if(oem != null){
this.handelPlanAssignSteer(oem.getId(), area, abilityId, null);
}
}
// TODO 更新周分派汇总
}
@Override
@ -97,4 +120,78 @@ public class YieldOrderDailyAssignImpl extends BaseServiceImpl<YieldOrderDailyAs
}
return list.get(0);
}
@Override
public void init() throws Exception {
List<WorkCenter> workCenterList = workCenterService.list();
if(CollectionUtils.isNotEmpty(workCenterList)){
for(WorkCenter workCenter : workCenterList){
if(StringUtils.isNotEmpty(workCenter.getCraftAbilityId())){
List<Long> abilityIdList = Func.toLongList(workCenter.getCraftAbilityId());
for(Long abilityId : abilityIdList){
this.saveOrEdit(workCenter.getId(),null,abilityId,0.0,0.0);
}
}
}
}
List<Oem> oemList = oemService.list();
if(CollectionUtils.isNotEmpty(oemList)){
for(Oem oem : oemList){
if(StringUtils.isNotEmpty(oem.getCraftAbilityId())){
List<Long> 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<PlanAssignSteerVO> pasLst = null;
List<PlanAssignSteer> bpasLst = null;
Map<Long, Double> map = new LinkedHashMap<>();
Double totalArea = 0D;
pasLst = planAssignSteerService.findParams(caId);
bpasLst = planAssignSteerService.list(Wrappers.<PlanAssignSteer>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);
}
}
}

Loading…
Cancel
Save