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