|
|
|
@ -8,16 +8,34 @@ import org.springblade.core.secure.BladeUser; |
|
|
|
import org.springblade.core.secure.utils.AuthUtil; |
|
|
|
import org.springblade.core.secure.utils.AuthUtil; |
|
|
|
import org.springblade.core.tool.utils.DateUtil; |
|
|
|
import org.springblade.core.tool.utils.DateUtil; |
|
|
|
import org.springblade.core.tool.utils.Func; |
|
|
|
import org.springblade.core.tool.utils.Func; |
|
|
|
|
|
|
|
import org.springblade.desk.basic.pojo.entity.CoatingThickness; |
|
|
|
|
|
|
|
import org.springblade.desk.basic.pojo.entity.MaterialQuota; |
|
|
|
|
|
|
|
import org.springblade.desk.basic.service.ICoatingThicknessService; |
|
|
|
|
|
|
|
import org.springblade.desk.basic.service.IMaterialQuotaService; |
|
|
|
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity; |
|
|
|
|
|
|
|
import org.springblade.desk.dashboard.service.IDsCraftService; |
|
|
|
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.BsPlatingEntity; |
|
|
|
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity; |
|
|
|
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; |
|
|
|
|
|
|
|
import org.springblade.desk.dashboard.service.IBsPlatingService; |
|
|
|
|
|
|
|
import org.springblade.desk.dashboard.service.IDsPartService; |
|
|
|
|
|
|
|
import org.springblade.desk.dashboard.service.IDsProcessService; |
|
|
|
|
|
|
|
import org.springblade.desk.order.constant.PlateGoodsConst; |
|
|
|
|
|
|
|
import org.springblade.desk.order.constant.YieldOrderConst; |
|
|
|
import org.springblade.desk.order.mapper.PlateGoodsRecordMapper; |
|
|
|
import org.springblade.desk.order.mapper.PlateGoodsRecordMapper; |
|
|
|
import org.springblade.desk.order.pojo.entity.PlateGoodsRecord; |
|
|
|
import org.springblade.desk.order.pojo.entity.PlateGoodsRecord; |
|
|
|
import org.springblade.desk.order.pojo.entity.PlateGoodsRecordDetail; |
|
|
|
import org.springblade.desk.order.pojo.entity.PlateGoodsRecordDetail; |
|
|
|
import org.springblade.desk.order.pojo.entity.YieldOrder; |
|
|
|
import org.springblade.desk.order.pojo.entity.YieldOrder; |
|
|
|
import org.springblade.desk.order.pojo.enums.PlateGoodsEnum; |
|
|
|
import org.springblade.desk.order.pojo.enums.PlateGoodsEnum; |
|
|
|
|
|
|
|
import org.springblade.desk.order.pojo.enums.YieldOrderEnum; |
|
|
|
import org.springblade.desk.order.service.IPlateGoodsRecordDetailService; |
|
|
|
import org.springblade.desk.order.service.IPlateGoodsRecordDetailService; |
|
|
|
import org.springblade.desk.order.service.IPlateGoodsRecordService; |
|
|
|
import org.springblade.desk.order.service.IPlateGoodsRecordService; |
|
|
|
import org.springblade.desk.order.service.IYieldOrderService; |
|
|
|
import org.springblade.desk.order.service.IYieldOrderService; |
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import org.springframework.util.CollectionUtils; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.List; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
@ -33,7 +51,12 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor |
|
|
|
|
|
|
|
|
|
|
|
private final IPlateGoodsRecordDetailService detailService; |
|
|
|
private final IPlateGoodsRecordDetailService detailService; |
|
|
|
private final IYieldOrderService yieldOrderService; |
|
|
|
private final IYieldOrderService yieldOrderService; |
|
|
|
|
|
|
|
private final IDsPartService dsPartService; |
|
|
|
|
|
|
|
private final IBsPlatingService bsPlatingService; |
|
|
|
|
|
|
|
private final ICoatingThicknessService coatingThicknessService; |
|
|
|
|
|
|
|
private final IDsCraftService dsCraftService; |
|
|
|
|
|
|
|
private final IDsProcessService dsProcessService; |
|
|
|
|
|
|
|
private final IMaterialQuotaService materialQuotaService; |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public IPage<PlateGoodsRecord> selectPage(IPage<PlateGoodsRecord> page, PlateGoodsRecord entity) { |
|
|
|
public IPage<PlateGoodsRecord> selectPage(IPage<PlateGoodsRecord> page, PlateGoodsRecord entity) { |
|
|
|
List<PlateGoodsRecord> dataList = baseMapper.selectPage(page, entity); |
|
|
|
List<PlateGoodsRecord> dataList = baseMapper.selectPage(page, entity); |
|
|
|
@ -137,4 +160,164 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor |
|
|
|
return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); |
|
|
|
return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* 生成订单-计算镀层物料 |
|
|
|
|
|
|
|
* @param yieldOrder |
|
|
|
|
|
|
|
* @return |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public boolean calculateCoatingMaterial(YieldOrder yieldOrder){ |
|
|
|
|
|
|
|
//零件号
|
|
|
|
|
|
|
|
String partCode=yieldOrder.getPartCode(); |
|
|
|
|
|
|
|
//零件版本
|
|
|
|
|
|
|
|
String partVersion=yieldOrder.getPartVersion(); |
|
|
|
|
|
|
|
//生产标识/质量等级
|
|
|
|
|
|
|
|
String productIdent=yieldOrder.getProductIdent(); |
|
|
|
|
|
|
|
//根据零件号查询零件
|
|
|
|
|
|
|
|
DsPartEntity dsPart = dsPartService.selectDsPartByPatCode(partCode); |
|
|
|
|
|
|
|
if(null==dsPart){ |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//镀层物料编码
|
|
|
|
|
|
|
|
String plateGoodsCode=dsPart.getPlateGoodsCode(); |
|
|
|
|
|
|
|
//面积(㎡)
|
|
|
|
|
|
|
|
Double ypArea=yieldOrder.getYpArea(); |
|
|
|
|
|
|
|
//生产数量
|
|
|
|
|
|
|
|
Double ypQty=yieldOrder.getYpQty(); |
|
|
|
|
|
|
|
//计算单批面积(d㎡)
|
|
|
|
|
|
|
|
Double singleArea=ypArea*ypQty*100; |
|
|
|
|
|
|
|
//大批量/小批量标志
|
|
|
|
|
|
|
|
int batchFlag=0;//大批量1;小批量0
|
|
|
|
|
|
|
|
//判断是否是大批量
|
|
|
|
|
|
|
|
if(singleArea>=30){ |
|
|
|
|
|
|
|
//是大批量
|
|
|
|
|
|
|
|
batchFlag=1; |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
//是小批量
|
|
|
|
|
|
|
|
batchFlag=0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//金钾、银钾标志
|
|
|
|
|
|
|
|
int goldSilverFlag=0;//金钾1;银钾0
|
|
|
|
|
|
|
|
//判断是否有镀层物料编码
|
|
|
|
|
|
|
|
if(Func.isEmpty(plateGoodsCode)){ |
|
|
|
|
|
|
|
//查询不到镀层物料编码
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
//可以查询到镀层物料编码
|
|
|
|
|
|
|
|
//判断是否是金钾或银钾
|
|
|
|
|
|
|
|
if(plateGoodsCode.equals(PlateGoodsConst.GOLD_POTASSIUM)||plateGoodsCode.equals(PlateGoodsConst.SILVER_POTASSIUM)){ |
|
|
|
|
|
|
|
//是金钾或银钾
|
|
|
|
|
|
|
|
if(plateGoodsCode.equals(PlateGoodsConst.GOLD_POTASSIUM)){ |
|
|
|
|
|
|
|
goldSilverFlag=1; |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
goldSilverFlag=0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//从零件号获取配置码
|
|
|
|
|
|
|
|
if(partCode.contains("-")){ |
|
|
|
|
|
|
|
String partCodeArr[]=partCode.split("-"); |
|
|
|
|
|
|
|
//配置码
|
|
|
|
|
|
|
|
String configCode=partCodeArr[partCodeArr.length-1]; |
|
|
|
|
|
|
|
//根据配置码查询镀种信息
|
|
|
|
|
|
|
|
BsPlatingEntity bsPlatingEntity =bsPlatingService.selectBsPlatingConfigNo(configCode); |
|
|
|
|
|
|
|
//镀层代码
|
|
|
|
|
|
|
|
String matCode=bsPlatingEntity.getMatCode(); |
|
|
|
|
|
|
|
//根据零件号、镀层代码、质量等级,从镀层厚度对应表中查询镀层厚度
|
|
|
|
|
|
|
|
int start_f21e8=0; |
|
|
|
|
|
|
|
if(partCode.startsWith("21E8-210")){ |
|
|
|
|
|
|
|
start_f21e8=1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
CoatingThickness CoatingThickness=coatingThicknessService.queryCoatingThickness(matCode,productIdent,start_f21e8); |
|
|
|
|
|
|
|
//镀层厚度
|
|
|
|
|
|
|
|
Long thickness=CoatingThickness.getThickness(); |
|
|
|
|
|
|
|
//未找到镀层厚度
|
|
|
|
|
|
|
|
if(Func.isEmpty(thickness)){ |
|
|
|
|
|
|
|
//将订单状态标记为数据异常,记录异常原因,并退出
|
|
|
|
|
|
|
|
this.updateYieldOrder(yieldOrder); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
//根据生产订单(YieldOrder)对象中的零件号和零件版本(与关系),查询DS_CRAFT表
|
|
|
|
|
|
|
|
DsCraftEntity dsCraftEntity = dsCraftService.selectDsCraftByPartCodeAndVersion(dsPart.getId(),partVersion); |
|
|
|
|
|
|
|
//工艺表(DS_CRAFT)id
|
|
|
|
|
|
|
|
Long dsCraftId=dsCraftEntity.getId(); |
|
|
|
|
|
|
|
//查询生产工序列表
|
|
|
|
|
|
|
|
List<DsProcessEntity> dsProcessList=dsProcessService.selectDsProcessByCraftId(dsCraftId); |
|
|
|
|
|
|
|
// 1. 空列表校验
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(dsProcessList)) { |
|
|
|
|
|
|
|
//将订单状态标记为数据异常,记录异常原因,并退出
|
|
|
|
|
|
|
|
this.updateYieldOrder(yieldOrder); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else{ |
|
|
|
|
|
|
|
//取出工艺能力
|
|
|
|
|
|
|
|
for (DsProcessEntity process : dsProcessList) { |
|
|
|
|
|
|
|
//DS_PROCESS表id
|
|
|
|
|
|
|
|
Long dsProcessId=process.getCaId(); |
|
|
|
|
|
|
|
//工艺能力编码
|
|
|
|
|
|
|
|
String craftCode=process.getCraftCode(); |
|
|
|
|
|
|
|
//根据镀层厚度、工艺能力,到物料定额表中查询定额
|
|
|
|
|
|
|
|
MaterialQuota materialQuota=materialQuotaService.queryMaterialQuota(thickness,dsProcessId); |
|
|
|
|
|
|
|
if(null==materialQuota){ |
|
|
|
|
|
|
|
this.updateYieldOrder(yieldOrder); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//定额
|
|
|
|
|
|
|
|
Long quota=materialQuota.getQuota(); |
|
|
|
|
|
|
|
//未找到定额
|
|
|
|
|
|
|
|
if(Func.isEmpty(quota)){ |
|
|
|
|
|
|
|
this.updateYieldOrder(yieldOrder); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
//计算物料需求
|
|
|
|
|
|
|
|
Double demand=0.0; |
|
|
|
|
|
|
|
if(goldSilverFlag==0){ |
|
|
|
|
|
|
|
//银钾
|
|
|
|
|
|
|
|
demand=singleArea*quota*0.105; |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
//金钾
|
|
|
|
|
|
|
|
//小批量且工艺能力为(E379、E10120、E10060、E007、E9600、E12340)
|
|
|
|
|
|
|
|
if(batchFlag==0&&(craftCode.equals("E379")||craftCode.equals("E10120")||craftCode.equals("E10060")||craftCode.equals("E007")||craftCode.equals("E9600")||craftCode.equals("E12340"))){ |
|
|
|
|
|
|
|
demand=singleArea*quota*0.2829 * 1.2; |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
//金钾其他情况
|
|
|
|
|
|
|
|
demand=singleArea*quota*0.2829; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//构建镀层物料需求申报对象, 调用保存方法,保存镀层物料需求申报
|
|
|
|
|
|
|
|
PlateGoodsRecord plateGoodsRecord=new PlateGoodsRecord(); |
|
|
|
|
|
|
|
plateGoodsRecord.setGoodsCode(plateGoodsCode); |
|
|
|
|
|
|
|
plateGoodsRecord.setGoodsName(plateGoodsCode.equals(PlateGoodsConst.GOLD_POTASSIUM)?"氢化亚金钾":"氢化银钾"); |
|
|
|
|
|
|
|
plateGoodsRecord.setGoodsDemand(BigDecimal.valueOf(demand)); |
|
|
|
|
|
|
|
plateGoodsRecord.setDeclaredStatus((long) PlateGoodsEnum.STATUS_WAITING.getCode()); |
|
|
|
|
|
|
|
plateGoodsRecord.setWcId(yieldOrder.getWorkCenterId()); |
|
|
|
|
|
|
|
List<PlateGoodsRecordDetail> detailList=new ArrayList<>(); |
|
|
|
|
|
|
|
PlateGoodsRecordDetail plateGoodsRecordDetail=new PlateGoodsRecordDetail(); |
|
|
|
|
|
|
|
plateGoodsRecordDetail.setYoId(yieldOrder.getId()); |
|
|
|
|
|
|
|
this.save(plateGoodsRecord, detailList); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
//查询不到配置码
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}else { |
|
|
|
|
|
|
|
//不是金钾或银钾
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//保存成功
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* 将订单状态标记为数据异常,记录异常原因 |
|
|
|
|
|
|
|
* @param yieldOrder |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public void updateYieldOrder(YieldOrder yieldOrder){ |
|
|
|
|
|
|
|
yieldOrder.setStatus(YieldOrderEnum.STATUS_EXCEPTION.getCode()); |
|
|
|
|
|
|
|
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); |
|
|
|
|
|
|
|
yieldOrderService.updateById(yieldOrder); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|