生成订单计算镀层物料需求方法 开发人:张高

liweidong
DESKTOP-10680M4\Admin 1 month ago
parent 413db2e5a1
commit 2d8eea3584
  1. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CoatingThicknessMapper.java
  2. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CoatingThicknessMapper.xml
  3. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/MaterialQuotaMapper.java
  4. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/MaterialQuotaMapper.xml
  5. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/ICoatingThicknessService.java
  6. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IMaterialQuotaService.java
  7. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/CoatingThicknessServiceImpl.java
  8. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/MaterialQuotaServiceImpl.java
  9. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsPlatingMapper.java
  10. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml
  11. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java
  12. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PlatingMapper.xml
  13. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsPlatingService.java
  14. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java
  15. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
  16. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsPlatingServiceImpl.java
  17. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java
  18. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
  19. 19
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/PlateGoodsRecordController.java
  20. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IPlateGoodsRecordService.java
  21. 185
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java

@ -37,4 +37,13 @@ public interface CoatingThicknessMapper extends BaseMapper<CoatingThickness> {
* @return List<CoatingThicknessExcel>
*/
List<CoatingThicknessExcel> exportCoatingThickness(@Param("ew") Wrapper<CoatingThickness> queryWrapper);
/**
* 根据镀层代码质量等级查询镀层厚度对应表
* @param matCode
* @param productIdent
* @param start_f21e8 是否是21E8-210开头的零件号
* @return
*/
CoatingThickness queryCoatingThickness(@Param("matCode") String matCode, @Param("productIdent") String productIdent, @Param("start_f21e8") int start_f21e8);
}

@ -20,4 +20,9 @@
<select id="exportCoatingThickness" resultType="org.springblade.desk.basic.excel.CoatingThicknessExcel">
SELECT * FROM BA_COATING_THICKNESS ${ew.customSqlSegment}
</select>
<select id="queryCoatingThickness"
resultType="org.springblade.desk.basic.pojo.entity.CoatingThickness">
SELECT * FROM BS_COATING_THICKNESS WHERE THICKNESS_CODE=#{matCode} AND LEVEL_NUM=#{productIdent} and START_F21E8=#{start_f21e8} and ROWNUM = 1
</select>
</mapper>

@ -37,4 +37,12 @@ public interface MaterialQuotaMapper extends BaseMapper<MaterialQuota> {
* @return List<MaterialQuotaExcel>
*/
List<MaterialQuotaExcel> exportMaterialQuota(@Param("ew") Wrapper<MaterialQuota> queryWrapper);
/**
* 根据镀层厚度工艺能力查询
* @param thickness
* @param dsProcessId
* @return
*/
MaterialQuota queryMaterialQuota(@Param("thickness")Long thickness,@Param("dsProcessId") Long dsProcessId);
}

@ -22,4 +22,8 @@
<select id="exportMaterialQuota" resultType="org.springblade.desk.basic.excel.MaterialQuotaExcel">
SELECT * FROM BA_MATERIAL_QUOTA ${ew.customSqlSegment}
</select>
<select id="queryMaterialQuota"
resultType="org.springblade.desk.basic.pojo.entity.MaterialQuota">
SELECT * FROM BS_MATERIAL_QUOTA WHERE THICKNESS=#{thickness} AND PROCESS_ABILITY_ID=#{dsProcessId} AND ROWNUM = 1
</select>
</mapper>

@ -41,4 +41,13 @@ public interface ICoatingThicknessService extends BaseService<CoatingThickness>
* @param vo
*/
void setVOValue(CoatingThicknessVO vo);
/**
* 根据镀层代码质量等级查询镀层厚度对应表
* @param matCode
* @param productIdent
* @param start_f21e8 是否是21E8-210开头的零件号
* @return
*/
CoatingThickness queryCoatingThickness(String matCode,String productIdent,int start_f21e8);
}

@ -41,4 +41,12 @@ public interface IMaterialQuotaService extends BaseService<MaterialQuota> {
* @param vo
*/
void setVOValue(MaterialQuotaVO vo);
/**
* 根据镀层厚度工艺能力查询
* @param thickness
* @param dsProcessId
* @return
*/
MaterialQuota queryMaterialQuota(Long thickness, Long dsProcessId);
}

@ -58,4 +58,15 @@ public class CoatingThicknessServiceImpl extends BaseServiceImpl<CoatingThicknes
public void setVOValue(CoatingThicknessVO vo) {
}
/**
* 根据镀层代码质量等级查询镀层厚度对应表
* @param matCode
* @param productIdent
* @param start_f21e8 是否是21E8-210开头的零件号
* @return
*/
public CoatingThickness queryCoatingThickness(String matCode,String productIdent,int start_f21e8){
return baseMapper.queryCoatingThickness(matCode,productIdent,start_f21e8);
}
}

@ -58,4 +58,15 @@ public class MaterialQuotaServiceImpl extends BaseServiceImpl<MaterialQuotaMappe
public void setVOValue(MaterialQuotaVO vo) {
}
/**
* 根据镀层厚度工艺能力查询
* @param thickness
* @param dsProcessId
* @return
*/
@Override
public MaterialQuota queryMaterialQuota(Long thickness, Long dsProcessId){
return baseMapper.queryMaterialQuota(thickness,dsProcessId);
}
}

@ -66,4 +66,10 @@ public interface BsPlatingMapper extends BaseMapper<BsPlatingEntity> {
* @return
*/
BsPlatingEntity selectBsPlatingByPlate(@Param("plate")String plate);
/**
* 根据配置码查询镀种信息
* @param configNo
* @return
*/
BsPlatingEntity selectBsPlatingConfigNo(@Param("configNo")String configNo);
}

@ -79,6 +79,8 @@
and PART_ID = #{partId}
and REWORK_ORDER = #{changeNo}
</select>
<select id="selectDsCraftByPartCodeAndVersion" resultType="org.springblade.desk.dashboard.pojo.entity.DsCraftEntity">
SELECT * FROM DS_CRAFT WHERE PART_ID=#{partCode} AND PART_VERSIONS=#{partVersion} and ROWNUM = 1
</select>
</mapper>

@ -74,5 +74,11 @@ public interface DsCraftMapper extends BaseMapper<DsCraftEntity> {
DsCraftEntity getPartCraft(@Param("partId")Long partId, @Param("rank")String rank);
DsCraftEntity getReworkCraft(@Param("partId")Long partId,@Param("changeNo") String changeNo);
/**
* 根据零件号零件版本查询
* @param partCode
* @param partVersion
* @return
*/
DsCraftEntity selectDsCraftByPartCodeAndVersion(@Param("partCode")Long partCode,@Param("partVersion")String partVersion);
}

@ -43,4 +43,10 @@
select * from BS_PLATING where PLATE= #{plate} and ROWNUM = 1
</select>
<select id="selectBsPlatingConfigNo"
resultType="org.springblade.desk.dashboard.pojo.entity.BsPlatingEntity">
select * from BS_PLATING where config_no= #{configNo} and ROWNUM = 1
</select>
</mapper>

@ -64,4 +64,11 @@ public interface IBsPlatingService extends BaseService<BsPlatingEntity> {
* @return
*/
BsPlatingEntity selectBsPlatingByPlate(String plate);
/**
* 根据配置码查询镀种信息
* @param configNo
* @return
*/
BsPlatingEntity selectBsPlatingConfigNo(String configNo);
}

@ -176,4 +176,12 @@ public interface IDsCraftService extends BaseService<DsCraftEntity> {
* @return
*/
boolean craftBatchRemoval(String id);
/**
* 根据零件号零件版本查询
* @param partCode
* @param partVersion
* @return
*/
DsCraftEntity selectDsCraftByPartCodeAndVersion(Long partCode,String partVersion);
}

@ -213,4 +213,11 @@ public interface IDsPartService extends BaseService<DsPartEntity> {
// List<DsPartTreeVO> getSimpleTree(String partCode);
/**
* 根据零件号查询零件
* @param partCode
* @return
*/
DsPartEntity selectDsPartByPatCode(String partCode);
}

@ -69,5 +69,14 @@ public class BsPlatingServiceImpl extends BaseServiceImpl<BsPlatingMapper, BsPla
public BsPlatingEntity selectBsPlatingByPlate(String plate) {
return bsPlatingMapper.selectBsPlatingByPlate(plate);
}
/**
* 根据配置码查询镀种信息
* @param configNo
* @return
*/
@Override
public BsPlatingEntity selectBsPlatingConfigNo(String configNo){
return bsPlatingMapper.selectBsPlatingConfigNo(configNo);
}
}

@ -340,4 +340,15 @@ public class DsCraftServiceImpl extends BaseServiceImpl<DsCraftMapper, DsCraftEn
return results;
}
/**
* 根据零件号零件版本查询
* @param partCode
* @param partVersion
* @return
*/
@Override
public DsCraftEntity selectDsCraftByPartCodeAndVersion(Long partCode,String partVersion){
return craftMapper.selectDsCraftByPartCodeAndVersion(partCode,partVersion);
}
}

@ -336,7 +336,6 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
}
@Override
public DsPartSynthesisVO detail(String partCode, String partVersion) {
@ -491,6 +490,7 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
// sb.append(" ) b where rownum=1 ");
return null;
}
@Override
public String findNameByRoamNo(String partCode, String roamNo) {
//TODO 到ERP数据中查询数据
@ -498,4 +498,15 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
// sb.append(" where a.prtno=:partCode and a.firseq=:roamNo ");
return null;
}
/**
* 根据零件号查询零件
*
* @param partCode
* @return
*/
@Override
public DsPartEntity selectDsPartByPatCode(String partCode) {
return dsPartMapper.selectDsPartByPatCode(partCode);
}
}

@ -140,4 +140,23 @@ public class PlateGoodsRecordController extends BladeController {
Boolean result = goodsRecordService.changeStatus(Func.toLongList(ids), PlateGoodsEnum.STATUS_CLOSE.getCode());
return R.status(result);
}
/**
* 生成订单-计算镀层物料测试方法
* @return
*/
@PostMapping("/testCalculateCoatingMaterial")
public R testCalculateCoatingMaterial(){
YieldOrder yieldOrder=new YieldOrder();
yieldOrder.setId(2020699009243373570L);
yieldOrder.setPartCode("21E8-164-486-E9");
yieldOrder.setPartVersion("V2.1");
yieldOrder.setWorkCenterId(111l);
// yieldOrder.setProductIdent("JII");
yieldOrder.setProductIdent("2");//生产标识即质量等级
yieldOrder.setYpArea(100.0);
yieldOrder.setYpQty(1.0);
Boolean result = goodsRecordService.calculateCoatingMaterial(yieldOrder);
return R.status(result);
}
}

@ -76,4 +76,11 @@ public interface IPlateGoodsRecordService extends BaseService<PlateGoodsRecord>
* @return
*/
List<YieldOrder> listDetailYieldOrder(Long id);
/**
* 生成订单-计算镀层物料
* @param yieldOrder
* @return
*/
boolean calculateCoatingMaterial(YieldOrder yieldOrder);
}

@ -8,16 +8,34 @@ import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.DateUtil;
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.pojo.entity.PlateGoodsRecord;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecordDetail;
import org.springblade.desk.order.pojo.entity.YieldOrder;
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.IPlateGoodsRecordService;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -33,7 +51,12 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
private final IPlateGoodsRecordDetailService detailService;
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
public IPage<PlateGoodsRecord> selectPage(IPage<PlateGoodsRecord> page, PlateGoodsRecord 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);
}
/**
* 生成订单-计算镀层物料
* @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);
}
}

Loading…
Cancel
Save