BOM生效

tags/yfai-mes-ext-v1.0
yxw 1 year ago
parent d607f51cc3
commit f5eb7928c8

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.api.busi.jx;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesBomPendingPart;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import io.swagger.annotations.ApiOperation;
public interface IJxBomPendingPartService {
@ApiOperation("按条件分页查询待BOM生效成品")
ListPager<MesBomPendingPart> queryBomPendingPartByPager(MesBomPendingPart bomPendingPart, Pager pager);
}

@ -16,5 +16,4 @@ public interface IJxProductReportService {
@ApiOperation("获取物料绑定记录")
ListPager<MesProdBindRecord> queryMesProdBindRecordByPager(MesProdBindRecordExt prodBindRecordExt, Pager pager);
}

@ -1,4 +1,4 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.busi.jx;
package cn.estsh.i3plus.ext.mes.apiservice.controller.base.jx;
import cn.estsh.i3plus.ext.mes.api.base.jx.IJxBadnessClassifyService;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesBadnessClassify;

@ -1,4 +1,4 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.busi.jx;
package cn.estsh.i3plus.ext.mes.apiservice.controller.base.jx;
import cn.estsh.i3plus.ext.mes.api.base.jx.IJxBadnessClassifyDetailService;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesBadnessClassifyDetail;

@ -1,4 +1,4 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.busi.jx;
package cn.estsh.i3plus.ext.mes.apiservice.controller.base.jx;
import cn.estsh.i3plus.ext.mes.api.base.jx.IJxBadnessTypeService;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesBadnessType;

@ -1,4 +1,4 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.busi.jx;
package cn.estsh.i3plus.ext.mes.apiservice.controller.base.jx;
import cn.estsh.i3plus.ext.mes.api.base.jx.IJxOqcProjectService;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesOqcRuleNoteDetail;

@ -1,7 +1,9 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.busi.jx;
import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxBadStatisticsReportFormService;
import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxBomPendingPartService;
import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxProductReportService;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesBomPendingPart;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesProdBindRecordExt;
import cn.estsh.i3plus.ext.mes.pojo.model.BadStatisticsReportParamModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
@ -38,6 +40,9 @@ public class JxReportController extends MesBaseController {
@Autowired
private IJxBadStatisticsReportFormService badStatisticsReportFormService;
@Autowired
private IJxBomPendingPartService bomPendingPartService;
@GetMapping(value = "/mes-prod-bind-record/query")
@ApiOperation(value = "按条件分页查询MES物料绑定记录数据")
public ResultBean queryMesProdBindRecord(MesProdBindRecordExt prodBindRecordExt, Pager pager) {
@ -69,4 +74,18 @@ public class JxReportController extends MesBaseController {
}
}
@GetMapping(value = "/bom-pending-part/query")
@ApiOperation(value = "待BOM生效成品报表")
public ResultBean query(MesBomPendingPart bomPendingPart, Pager pager) {
try {
bomPendingPart.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setListPager(bomPendingPartService.queryBomPendingPartByPager(bomPendingPart, pager));
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,34 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.jx;
import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxBomPendingPartService;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesBomPendingPart;
import cn.estsh.i3plus.ext.mes.pojo.repository.MesBomPendingPartRepository;
import cn.estsh.i3plus.ext.mes.pojo.sqlpack.MesExtHqlPack;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @PROJECT_NAME: i3plus-mes-panasonic-jx
* @DESCRIPTION:
* @USER: xinwang.yi
* @DATE: 2023-11-20 10:55
*/
@Service
public class JxBomPendingPartService implements IJxBomPendingPartService {
@Autowired
private MesBomPendingPartRepository bomPendingPartRepository;
@Override
public ListPager<MesBomPendingPart> queryBomPendingPartByPager(MesBomPendingPart bomPendingPart, Pager pager) {
DdlPackBean hqlPack = MesExtHqlPack.getBomPendingPart(bomPendingPart);
int count = bomPendingPartRepository.findByHqlWhereCount(hqlPack);
pager = PagerHelper.getPager(pager, count);
hqlPack.setOrderByStr(bomPendingPart.orderBy());
return new ListPager(bomPendingPartRepository.findByHqlWherePage(hqlPack, pager), pager);
}
}

@ -16,10 +16,8 @@ import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.BaseResultBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
@ -843,9 +841,6 @@ public class JxOqcReportFormService implements IJxOqcReportFormService {
if (null == oqcCheck) {
continue;
}
JxOqcCheckReportModel result = new JxOqcCheckReportModel();
BeanUtils.copyProperties(oqcCheck, result);
resultList.add(packResult4OqcCheckReport(oqcCheck, badnessTypeMap, badnessClassifyMap));
}
}
@ -1028,38 +1023,40 @@ public class JxOqcReportFormService implements IJxOqcReportFormService {
.build();
}
//编码规则
String[] serialNoArray = numberRuleModel.getNumberRule().split("}\\{");
//规则属性长度拼接
String[] ruleLengthSpiltArray = numberRuleModel.getRuleLengthSpilt().split(",");
String serialNoStr = "serialno";
int serialNoIndex = -1;
for (int index = 0; index < serialNoArray.length; index++) {
if(serialNoArray[index].contains(serialNoStr)) serialNoIndex = index;
}
int ruleLengthTotal = 0;
if(serialNoIndex != -1){
for (int index = 0; index < serialNoIndex; index++) {
ruleLengthTotal += Integer.parseInt(ruleLengthSpiltArray[index]);
if (!StringUtils.isEmpty(numberRuleModel.getRuleLengthSpilt())) {
//编码规则
String[] serialNoArray = numberRuleModel.getNumberRule().split("}\\{");
//规则属性长度拼接
String[] ruleLengthSpiltArray = numberRuleModel.getRuleLengthSpilt().split(",");
String serialNoStr = "serialno";
int serialNoIndex = -1;
for (int index = 0; index < serialNoArray.length; index++) {
if(serialNoArray[index].contains(serialNoStr)) serialNoIndex = index;
}
}
int finalRuleLengthTotal = ruleLengthTotal;
int finalSerialNoIndex = serialNoIndex;
if (!StringUtils.isEmpty(model.getBatchLimitStart()) && !StringUtils.isEmpty(model.getBatchLimitEnd())) {
oqcPackageDetailList = oqcPackageDetailList.stream().filter(oqcCheckPackageDetail ->
model.getBatchLimitStart() <= Integer.parseInt(oqcCheckPackageDetail.getSerialNumber().substring(finalRuleLengthTotal, finalRuleLengthTotal + Integer.parseInt(ruleLengthSpiltArray[finalSerialNoIndex]))) &&
model.getBatchLimitEnd() >= Integer.parseInt(oqcCheckPackageDetail.getSerialNumber().substring(finalRuleLengthTotal, finalRuleLengthTotal + Integer.parseInt(ruleLengthSpiltArray[finalSerialNoIndex])))
).collect(Collectors.toList());
} else if(!StringUtils.isEmpty(model.getBatchLimitStart())){
oqcPackageDetailList = oqcPackageDetailList.stream().filter(oqcCheckPackageDetail ->
model.getBatchLimitStart() <= Integer.parseInt(oqcCheckPackageDetail.getSerialNumber().substring(finalRuleLengthTotal, finalRuleLengthTotal + Integer.parseInt(ruleLengthSpiltArray[finalSerialNoIndex])))
).collect(Collectors.toList());
} else if(!StringUtils.isEmpty(model.getBatchLimitEnd())){
oqcPackageDetailList = oqcPackageDetailList.stream().filter(oqcCheckPackageDetail ->
model.getBatchLimitEnd() >= Integer.parseInt(oqcCheckPackageDetail.getSerialNumber().substring(finalRuleLengthTotal, finalRuleLengthTotal + Integer.parseInt(ruleLengthSpiltArray[finalSerialNoIndex])))
).collect(Collectors.toList());
int ruleLengthTotal = 0;
if(serialNoIndex != -1){
for (int index = 0; index < serialNoIndex; index++) {
ruleLengthTotal += Integer.parseInt(ruleLengthSpiltArray[index]);
}
}
int finalRuleLengthTotal = ruleLengthTotal;
int finalSerialNoIndex = serialNoIndex;
if (!StringUtils.isEmpty(model.getBatchLimitStart()) && !StringUtils.isEmpty(model.getBatchLimitEnd())) {
oqcPackageDetailList = oqcPackageDetailList.stream().filter(oqcCheckPackageDetail ->
model.getBatchLimitStart() <= Integer.parseInt(oqcCheckPackageDetail.getSerialNumber().substring(finalRuleLengthTotal, finalRuleLengthTotal + Integer.parseInt(ruleLengthSpiltArray[finalSerialNoIndex]))) &&
model.getBatchLimitEnd() >= Integer.parseInt(oqcCheckPackageDetail.getSerialNumber().substring(finalRuleLengthTotal, finalRuleLengthTotal + Integer.parseInt(ruleLengthSpiltArray[finalSerialNoIndex])))
).collect(Collectors.toList());
} else if(!StringUtils.isEmpty(model.getBatchLimitStart())){
oqcPackageDetailList = oqcPackageDetailList.stream().filter(oqcCheckPackageDetail ->
model.getBatchLimitStart() <= Integer.parseInt(oqcCheckPackageDetail.getSerialNumber().substring(finalRuleLengthTotal, finalRuleLengthTotal + Integer.parseInt(ruleLengthSpiltArray[finalSerialNoIndex])))
).collect(Collectors.toList());
} else if(!StringUtils.isEmpty(model.getBatchLimitEnd())){
oqcPackageDetailList = oqcPackageDetailList.stream().filter(oqcCheckPackageDetail ->
model.getBatchLimitEnd() >= Integer.parseInt(oqcCheckPackageDetail.getSerialNumber().substring(finalRuleLengthTotal, finalRuleLengthTotal + Integer.parseInt(ruleLengthSpiltArray[finalSerialNoIndex])))
).collect(Collectors.toList());
}
}
if (!StringUtils.isEmpty(model.getSerialNumber())) {

@ -5,7 +5,6 @@ import cn.estsh.i3plus.ext.mes.pojo.bean.MesPartExt;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesProdBindRecordExt;
import cn.estsh.i3plus.ext.mes.pojo.repository.MesPartExtRepository;
import cn.estsh.i3plus.ext.mes.pojo.repository.MesProdBindRecordExtRepository;
import cn.estsh.i3plus.ext.mes.pojo.repository.MesProduceSnExtRepository;
import cn.estsh.i3plus.ext.mes.pojo.sqlpack.MesExtHqlPack;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -15,14 +14,10 @@ import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdBindRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.sqlpack.MesHqlPack;
import org.apache.shiro.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;

@ -20,10 +20,8 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -99,8 +97,8 @@ public class ProcedureProjectExcelService implements IExcelImportExtService {
List<MesProcedureProject> procedureProjects = procedureProjectRepository.findByProperty(
new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()});
Map<String, List<MesProcedureProject>> procedureProjectMap = CollectionUtils.isEmpty(procedureProjects) ? null :
procedureProjects.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> o.getProjectSortNo() + "&" + o.getProjectCode()));
Map<String, MesProcedureProject> procedureProjectMap = CollectionUtils.isEmpty(procedureProjects) ? null :
procedureProjects.stream().filter(o -> null != o).collect(Collectors.toMap(o -> new StringJoiner(MesExtConstWords.AND).add(o.getProjectSortNo()).add(o.getProjectCode()).toString(), Function.identity(), (x, y) -> y));
//从excel表的第5行数据开始导入getFirstRowNum是从0行开始读取
for (int i = (sheetAt.getFirstRowNum() + 4); i < totalNumberOfRows; i ++) {
@ -162,7 +160,16 @@ public class ProcedureProjectExcelService implements IExcelImportExtService {
if (!existMap.containsKey(key)) {
existMap.put(key, String.valueOf(rowNum));
//校验 项目分类代码+项目代码 是否已经存在数据库
if (StringUtils.isEmpty(errorInfo) && !CollectionUtils.isEmpty(procedureProjectMap) && procedureProjectMap.containsKey(key)) {
MesProcedureProject mesProcedureProject = procedureProjectMap.get(key);
if (mesProcedureProject.getIsValid() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) {
errorNum ++;
cellNum += "A+B;";
errorInfo += "第A+B列数据已存在,状态为禁用;";
}
isExist = true;
}
} else {
@ -182,8 +189,7 @@ public class ProcedureProjectExcelService implements IExcelImportExtService {
if (errorNum == 0) {
MesProcedureProject procedureProject;
if(isExist) {
List<MesProcedureProject> mesProcedureProjects = procedureProjectMap.get(procedureProjectNo + "&" + projectCode);
procedureProject = mesProcedureProjects.get(0);
procedureProject = procedureProjectMap.get(new StringJoiner(MesExtConstWords.AND).add(procedureProjectNo).add(projectCode).toString());
ConvertBean.serviceModelUpdate(procedureProject, userName);
}else{
procedureProject = new MesProcedureProject();

@ -0,0 +1,108 @@
package cn.estsh.i3plus.ext.mes.pojo.bean;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Index;
import javax.persistence.Table;
import java.io.Serializable;
/**
* @Description:
* @Author: xiangming.liao
* @Date: 2021/01/14 20:03
* @Modify:
*/
@Data
@Entity
@DynamicInsert
@DynamicUpdate
@EqualsAndHashCode(callSuper = true)
@Table(name = "MES_BOM_PENDING_PART", indexes = {
@Index(columnList = "SYSTEM_SYNC_STATUS"),
@Index(columnList = "PART_NO"),
@Index(columnList = "ITEM_PART_NO"),
@Index(columnList = "PART_NO,IS_TOOK_EFFECT"),
@Index(columnList = "IS_REMIND,IS_TOOK_EFFECT")
})
@Api("MES_BOM待生效成品表")
public class MesBomPendingPart extends BaseBean implements Serializable {
private static final long serialVersionUID = 5035017176127870246L;
@Column(name = "PART_NO")
@ApiParam("父零件号")
private String partNo;
@Column(name = "PART_NAME")
@ApiParam("父零件名称")
private String partName;
@Column(name = "UNIT")
@ApiParam("单位")
private String unit;
@Column(name = "QTY" )
@ColumnDefault("0")
@ApiParam(value = "数量",example = "0")
private Double qty;
@Column(name = "ITEM_PART_NO")
@ApiParam("子零件编码")
private String itemPartNo;
@Column(name = "ITEM_PART_NAME")
@ApiParam("子零件名称")
private String itemPartName;
@Column(name = "ITEM_UNIT")
@ApiParam("子零件单位")
private String itemUnit;
@Column(name = "ITEM_QTY")
@ColumnDefault("0")
@ApiParam(value = "子零件数量",example = "0")
private Double itemQty;
@Column(name = "BOM_VERSION")
@ApiParam("BOM版本")
private String bomVersion;
@Column(name = "EFF_START_TIME")
@ApiParam("生效时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String effStartTime;
@Column(name = "EFF_END_TIME")
@ApiParam("失效时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String effEndTime;
@Column(name = "IS_REMIND")
@ApiParam("是否已提醒")
@ColumnDefault("2")
@AnnoOutputColumn(refClass = MesExtEnumUtil.TRUE_OR_FALSE.class, refForeignKey = "value", value = "description")
private Integer isReminded;
@Column(name = "IS_TOOK_EFFECT")
@ApiParam("是否已生效")
@ColumnDefault("2")
@AnnoOutputColumn(refClass = MesExtEnumUtil.TRUE_OR_FALSE.class, refForeignKey = "value", value = "description")
private Integer isTookEffect;
@Column(name = "SYSTEM_SYNC_STATUS")
@ColumnDefault("2")
@ApiParam(value = "系统同步标志")
public Integer systemSyncStatus = 2;
}

@ -141,6 +141,10 @@ public class MesEquipmentCheckDetail extends BaseBean implements Serializable {
@ApiParam("结果值")
private String resultValue;
@Column(name = "PROBE_NO")
@ApiParam("探头号")
private String probeNo;
@Transient
@ApiParam(value = "班组确认名称")
public String shiftGroupCheckName;

@ -59,6 +59,9 @@ public class JxOqcCheckReportModel implements Serializable {
@ApiParam("产品条码")
private String serialNumber;
@ApiParam("产品条码")
private String productSn;
@ApiParam("包装条码")
private String packageNo;

@ -0,0 +1,15 @@
package cn.estsh.i3plus.ext.mes.pojo.repository;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesBomPendingPart;
import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository;
import org.springframework.stereotype.Repository;
/**
* @author xinwang.yi
* @version 1.0
* @date 2023/11/16 9:17
**/
@Repository
public interface MesBomPendingPartRepository extends BaseRepository<MesBomPendingPart, Long> {
}

@ -924,5 +924,17 @@ public class MesExtHqlPack {
return packBean;
}
public static DdlPackBean getBomPendingPart(MesBomPendingPart bomPendingPart) {
DdlPackBean packBean = getAllValidData(bomPendingPart.getOrganizeCode());
DdlPreparedPack.getStringLikerPack(bomPendingPart.getPartNo(), MesExtConstWords.PART_NO, packBean);
DdlPreparedPack.getStringLikerPack(bomPendingPart.getItemPartNo(), MesExtConstWords.ITEM_PART_NO, packBean);
DdlPreparedPack.getNumEqualPack(bomPendingPart.getIsReminded(), "isReminded", packBean);
DdlPreparedPack.getNumEqualPack(bomPendingPart.getIsTookEffect(), "isTookEffect", packBean);
if (!StringUtils.isEmpty(bomPendingPart.getModifyDateTimeStart()) || !StringUtils.isEmpty(bomPendingPart.getModifyDateTimeEnd())) {
DdlPreparedPack.timeBuilder(bomPendingPart.getModifyDateTimeStart(), bomPendingPart.getModifyDateTimeEnd(), MesExtConstWords.MODIFY_DATE_TIME, packBean, true);
}
return packBean;
}
}

Loading…
Cancel
Save