liweidong
liweidong-hj 2 days ago
commit a6aa5f0780
  1. 13
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGraphiteMoldOut.java
  2. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderDailyAssignMapper.xml
  3. 112
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderCraftServiceImpl.java
  4. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderDailyAssignImpl.java
  5. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  6. 1
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGraphiteMoldOutMapper.xml
  7. 10
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGraphiteMoldOutServiceImpl.java

@ -158,6 +158,17 @@ public class StGraphiteMoldOut extends TenantEntity {
* 齐套数量
*/
@Schema(description = "齐套数量")
private Double completeQuantity;
private Integer completeQuantity;
/**
* 生产数量
*/
@Schema(description = "生产数量")
private Double produceQuantity;
/**
* 单套数量
*/
@Schema(description = "单套数量")
private Double singleQuantity;
}

@ -25,6 +25,7 @@
INNER JOIN BS_CENTER_TEAM c ON b.OTHER_ID = c.wc_id
INNER JOIN BS_TEAM_TIME d ON c.TS_ID = d.TS_ID
WHERE a.CRAFT_ABILITY_ID = #{hostCaId}
AND b.IS_DELETED = 0
AND a.CREATE_TIME >= TRUNC(SYSDATE) AND a.CREATE_TIME < TRUNC(SYSDATE) + 1
AND a.WORK_CENTER_ID IN
<foreach collection="wcList" item="id" open="(" close=")" separator=",">
@ -59,6 +60,7 @@
INNER JOIN BS_CENTER_TEAM c ON b.ID = c.wc_id
INNER JOIN BS_TEAM_TIME d ON c.TS_ID = d.TS_ID
WHERE a.CRAFT_ABILITY_ID = #{hostCaId}
AND b.IS_DELETED = 0
AND a.CREATE_TIME >= TRUNC(SYSDATE) AND a.CREATE_TIME &lt; TRUNC(SYSDATE) + 1
AND a.WORK_CENTER_ID IN
<foreach collection="wcList" item="id" open="(" close=")" separator=",">

@ -1,6 +1,7 @@
package org.springblade.desk.order.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -218,68 +219,60 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
}
//如果匹配到了作业单位,则直接停止
if (dispatchCraftList != null && dispatchCraftList.size() > 0) {
return;
}
// 厂内优先
if (workCenter.getLimitType().equals(WorkCenter.LIMIT_TYPE_PRIOR)) {
log.info("自动分派,流程卡号:{},优先厂内", yieldOrder.getCardNo());
dispatchCraftList = this.bindWorkCenter(workCenter.getId(), workCenterMap, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
//如果匹配到了作业单位,则直接停止
if (dispatchCraftList != null && dispatchCraftList.size() > 0) {
return;
}
//外协优先
if (oemCustomer.getLimitType().equals(WorkCenter.LIMIT_TYPE_PRIOR)) {
log.info("自动分派,流程卡号:{},优先外协", yieldOrder.getCardNo());
dispatchCraftList = this.bindOem(oemCustomer, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
if (CollectionUtils.isEmpty(dispatchCraftList)) {
// 厂内优先
if (workCenter.getLimitType().equals(WorkCenter.LIMIT_TYPE_PRIOR)) {
log.info("自动分派,流程卡号:{},优先厂内", yieldOrder.getCardNo());
dispatchCraftList = this.bindWorkCenter(workCenter.getId(), workCenterMap, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
//如果匹配到了作业单位,则直接停止
if (dispatchCraftList != null && dispatchCraftList.size() > 0) {
return;
}
//如果匹配到了作业单位,则直接停止
if (CollectionUtils.isEmpty(dispatchCraftList)) {
//外协优先
if (oemCustomer.getLimitType().equals(WorkCenter.LIMIT_TYPE_PRIOR)) {
log.info("自动分派,流程卡号:{},优先外协", yieldOrder.getCardNo());
dispatchCraftList = this.bindOem(oemCustomer, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
// 开始根据分派比例分派
Long facTotalNum = 0L;
YieldOrderAssignCount facCapacity = dailyAssignService.queryCount(hostAbilityId, BsAssignEntity.IN_FACTORY);
if (facCapacity != null) {
facTotalNum = facCapacity.getTotalNum();
}
// 获取厂外已经分派的总量
Long oemTotalNum = 0L;
YieldOrderAssignCount oemCapacity = dailyAssignService.queryCount(hostAbilityId, BsAssignEntity.OUTSOURCE);
if (oemCapacity != null) {
oemTotalNum = oemCapacity.getTotalNum();
}
//如果匹配到了作业单位,则直接停止
if (CollectionUtils.isEmpty(dispatchCraftList)) {
// 开始根据分派比例分派
Long facTotalNum = 0L;
YieldOrderAssignCount facCapacity = dailyAssignService.queryCount(hostAbilityId, BsAssignEntity.IN_FACTORY);
if (facCapacity != null) {
facTotalNum = facCapacity.getTotalNum();
}
// 获取厂外已经分派的总量
Long oemTotalNum = 0L;
YieldOrderAssignCount oemCapacity = dailyAssignService.queryCount(hostAbilityId, BsAssignEntity.OUTSOURCE);
if (oemCapacity != null) {
oemTotalNum = oemCapacity.getTotalNum();
}
//日分派总量
Long totalNum = facTotalNum + oemTotalNum;
// 厂内分派比列
Double rate = 0D;
if (totalNum > 0) {
rate = Double.valueOf(facTotalNum) / Double.valueOf(totalNum) * 100;
}
log.info("自动分派,流程卡号:{},分派总量:{},厂内分派比列:{}", yieldOrder.getCardNo(), totalNum, rate);
//日分派总量
Long totalNum = facTotalNum + oemTotalNum;
// 厂内分派比列
Double rate = 0D;
if (totalNum > 0) {
rate = Double.valueOf(facTotalNum) / Double.valueOf(totalNum) * 100;
}
log.info("自动分派,流程卡号:{},分派总量:{},厂内分派比列:{}", yieldOrder.getCardNo(), totalNum, rate);
// 如果厂内占比大于已经设置的比列,则直接分派外协
if (rate <= Double.parseDouble(craftAbility.getInRate())) {
log.info("{}自动分派按照比例分派给厂内:{},分派比例:{} 应分比例:{}", yieldOrder.getCardNo(), workCenter.getWcName(), rate, craftAbility.getInRate());
dispatchCraftList = this.bindWorkCenter(workCenter.getId(), workCenterMap, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
// 如果厂内占比大于已经设置的比列,则直接分派外协
if (rate <= Double.parseDouble(craftAbility.getInRate())) {
log.info("{}自动分派按照比例分派给厂内:{},分派比例:{} 应分比例:{}", yieldOrder.getCardNo(), workCenter.getWcName(), rate, craftAbility.getInRate());
dispatchCraftList = this.bindWorkCenter(workCenter.getId(), workCenterMap, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
//如果匹配到了作业单位,则直接停止
if (dispatchCraftList != null && !dispatchCraftList.isEmpty()) {
return;
//如果匹配到了作业单位,则直接停止
if (CollectionUtils.isEmpty(dispatchCraftList)) {
// 外协
log.info("{}自动分派按照比例分派给外协:{},分派比例:{} 应分比例:{}", yieldOrder.getCardNo(), oemCustomer.getOcName(), rate, craftAbility.getInRate());
dispatchCraftList = this.bindOem(oemCustomer, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
}
}
}
// 外协
log.info("{}自动分派按照比例分派给外协:{},分派比例:{} 应分比例:{}", yieldOrder.getCardNo(), oemCustomer.getOcName(), rate, craftAbility.getInRate());
dispatchCraftList = this.bindOem(oemCustomer, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
} else {
if (Boolean.TRUE.equals(factor)) {
@ -295,7 +288,7 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
}
}
if (dispatchCraftList == null || dispatchCraftList.size() == 0) {
if (dispatchCraftList == null || dispatchCraftList.isEmpty()) {
throw new ServiceException("自动分派失败,未找到合适的班组或者供应商!");
}
@ -762,6 +755,7 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
Double totalArea = yieldOrder.getYpArea() * yieldOrder.getYpQty();
BigDecimal areaVal = new BigDecimal(totalArea);
BigDecimal ypArea = new BigDecimal(yieldOrder.getYpArea());
//单批面积规则和单位面积规则取其一,如果单批面积存在则按照单批面积规则
if ((rules.getSingleUpArea() != null && rules.getSingleUpArea().compareTo(BigDecimal.ZERO) > 0) || (rules.getSingleDownArea() != null && rules.getSingleDownArea().compareTo(BigDecimal.ZERO) > 0)) {
@ -784,7 +778,7 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
} else {
//单位面积下限
if (rules.getLowArea() != null && rules.getLowArea().compareTo(BigDecimal.ZERO) > 0) {
if (areaVal.compareTo(rules.getLowArea()) >= 0) {
if (ypArea.compareTo(rules.getLowArea()) >= 0) {
sum = sum + 7;
} else {
return 0;
@ -792,7 +786,7 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
}
//单位面积上限
if (rules.getUpArea() != null && rules.getUpArea().compareTo(BigDecimal.ZERO) > 0) {
if (areaVal.compareTo(rules.getUpArea()) <= 0) {
if (ypArea.compareTo(rules.getUpArea()) <= 0) {
sum = sum + 4;
} else {
return 0;

@ -73,8 +73,8 @@ public class YieldOrderDailyAssignImpl extends BaseServiceImpl<YieldOrderDailyAs
assignDaily.setOemId(oemId);
assignDaily.setArea(area);
assignDaily.setQuantity(quantity);
assignDaily.setBatch(1L);
assignDaily.setNum(1L);
assignDaily.setBatch(0L);
assignDaily.setNum(0L);
assignDaily.setCreateTime(DateUtil.toDate(LocalDate.now()));
this.save(assignDaily);

@ -414,7 +414,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getId, wpr.getWpId()));
// 如果是外协工序,且未报工,清空班组和时间,便于排产
// 如果工序未报工状态,清空班组和时间,便于排产重新分配
if (wp.getStatus().compareTo(WorkPlan.STATUS_WORK_OK) < 0) {
wp.setMakeTeam(null);
wp.setPlanStartTime(null);
@ -495,8 +495,10 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
int days = ProcessCycleEnum.BC_TYPE_CYCLE_HEAT.getValue();
Date date = DateUtil.plusDays(wo.getSendDownTime(), days);
wo.setPlanEndDate(DateUtil.format(date, DateUtil.PATTERN_DATETIME));
// 车间订单状态修改为【未下达】
wo.setRunStatus(WorkOrder.RUN_STATUS_NORMAL);
// 如果当前工序的加工班组和外协商为空,则等待排产,整单状态变为未开始
if (wo.getTsId() == null && wo.getOcId() == null) {
wo.setRunStatus(WorkOrder.RUN_STATUS_NORMAL);
}
//更改订单调度员和计划员
// TeamSet makeTeam = teamSetMapper.selectById(wo.getTsId());

@ -36,6 +36,7 @@
gmo.card_no, gmo.need_quantity, gmo.outed_quantity,
gmo.cur_status, gmo.out_time, gmo.out_user, gmo.out_code, gmo.picker,
gmo.parent_out_code, gmo.complete_quantity,
gmo.produce_quantity, gmo.single_quantity,
-- 物料表字段
g.goods_code,
g.id AS goodsId,

@ -170,8 +170,10 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
preOutStock.setOutCode(outCode);
childNum++;
// preOutStock.setOutCode(stStockInoutRecordService.generateCode());
preOutStock.setNeedQuantity(singleUse * totalNeedSet);
preOutStock.setCompleteQuantity(totalNeed);
preOutStock.setProduceQuantity(totalNeedSet);
preOutStock.setNeedQuantity(singleUse * maxCanMakeSet);
preOutStock.setCompleteQuantity(maxCanMakeSet);
preOutStock.setSingleQuantity(singleUse);
preOutStock.setGoodsId(maxStock.getGoodsId());
StGoods stGoods = stGoodsService.getById(maxStock.getGoodsId());
preOutStock.setGoodsName(stGoods.getGoodsName());
@ -391,8 +393,8 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
this.updateById(outEntity);
resultList.add(outEntity);
if (outEntity.getOutedQuantity() < outEntity.getCompleteQuantity()) {
Double resOccupyQty = outEntity.getCompleteQuantity() - outEntity.getOutedQuantity();
if (outEntity.getOutedQuantity() < outEntity.getNeedQuantity()) {
Double resOccupyQty = outEntity.getNeedQuantity() - outEntity.getOutedQuantity();
realtimeStock.setOccupyQuantity(realtimeStock.getOccupyQuantity() - resOccupyQty);
stRealtimeStockService.updateById(realtimeStock);

Loading…
Cancel
Save