Compare commits

...

127 Commits

Author SHA1 Message Date
王杰 123ac16c08 红外焊超差预警 3 months ago
王杰 bf114910e2 Merge branch 'uat-temp-wj-2501090000-44517' into test 4 months ago
王杰 585a8edc62 Merge remote-tracking branch 'origin/uat-temp-castle-2501101619-44817' into test 4 months ago
王杰 1c33dce687 Merge remote-tracking branch 'origin/dev-temp-xw-202501130000-44813' into test 4 months ago
xiangwei.zhang 6e756d0065 44813 PC: 缺陷类型与零件类型关系导入后,没有关联显示出来缺陷类型名称和零件类型名称 4 months ago
王杰 082acc3901 merge origin/uat-temp-castle-2412301457-44643 解决冲突 4 months ago
王杰 87f42674da Merge remote-tracking branch 'origin/dev-temp-xw-202501090000-44270' into test 4 months ago
王杰 132f7d53d7 Merge branch 'uat-temp-wj-2501090000-44746' into test 4 months ago
王杰 f3dd964e48 Merge remote-tracking branch 'origin/dev-temp-xw-202501071939-44728' into test 4 months ago
王杰 d7e9810924 Merge remote-tracking branch 'origin/dev-temp-xw-202501151600-44670' into test 4 months ago
王杰 8e29e74429 merge dev-temp-ljs-202501091824-44656 解决冲突 4 months ago
xiangwei.zhang d8fcc8abfd 44670 PC: 模板导入时报错问题 4 months ago
xiangwei.zhang 471967fd7e 44756 版本回退 4 months ago
王杰 3c152132ca Merge remote-tracking branch 'origin/uat-temp-castle-2501090952-44747' into test 4 months ago
王杰 663f430d23 Merge branch 'dev-temp-xw-202412301219-44255' into test 4 months ago
王杰 5faa656bd2 Merge branch 'dev-temp-xw-202412301219-44255' into test 4 months ago
王杰 4f5f24f84a Merge branch 'uat-temp-wj-2412300000-44653' into test 4 months ago
王杰 f1294f551c Merge branch 'uat-temp-wj-2412300000-44615' into test 4 months ago
jun e42cdd4f76 44656 报工调整报表中原因为空 测试问题修复 4 months ago
xiangwei.zhang 620ae11ebd 44255-优化:非排序工艺路线支持所有路线主表明细批量导入 4 months ago
xiangwei.zhang 6ff07cd721 44813 PC: 缺陷类型与零件类型关系导入后,没有关联显示出来缺陷类型名称和零件类型名称 4 months ago
xiangwei.zhang ce6e53fd72 44270 PC:非排序产品加工规则的批量导入 4 months ago
jun f08ab29045 44656 报工调整报表中原因为空 提示信息错误 4 months ago
王杰 d4725e67c2 44517 装箱防错后吐条码需求(芜湖) 4 months ago
王杰 29026a1051 44746 产量统计报表增加报工调整数据查询 4 months ago
王杰 c0b76c9800 44746 产量统计报表增加报工调整数据查询 4 months ago
王杰 99386ba5a0 44746 产量统计报表增加报工调整数据查询 4 months ago
臧学普 1b61155d64 fix bug 44817 离线生成的装配件数据缺少 4 months ago
xiangwei.zhang 9cdc9c3b1c 44270 非排序产品加工规则的批量导入 4 months ago
王杰 46e28e7efe 44746 产量统计报表增加报工调整数据查询 4 months ago
王杰 ffa9deb112 revert 7831a81822
revert  44746 产量统计报表增加报工调整数据查询
4 months ago
xiangwei.zhang 42721ff26b 44270 非排序产品加工规则的批量导入 4 months ago
jun 4d34673835 44656 报工调整报表中原因为空 4 months ago
王杰 7831a81822 44746 产量统计报表增加报工调整数据查询 4 months ago
王杰 7a2d89eda0 44517 装箱防错后吐条码需求(芜湖) 4 months ago
臧学普 87ef87ccc9 fix bug 44747 同一个原零件对应多个PTR逻辑优化 4 months ago
xiangwei.zhang b9b38e7e4f 44756 零件生产组配置-启用Bom版本号”逻辑优化 4 months ago
xiangwei.zhang 5e233d6d65 44728: 包装定义明细菜单需要导入按钮 4 months ago
xiangwei.zhang 21ceb1064d 44756 零件生产组配置-“启用Bom版本号”逻辑优化 4 months ago
xiangwei.zhang a0b0442720 44756-零件生产组配置-“启用Bom版本号”逻辑优化 4 months ago
xiangwei.zhang c735e3068c 44255-优化:非排序工艺路线支持所有路线主表明细批量导入 4 months ago
王杰 b8977cffb8 Merge branch 'uat-temp-wj-2501030000-00000' into test 4 months ago
王杰 ddecc828f7 44704 PC-批量报工和报工调整,根据生效时间和bom_code查询时,bom_code查询条件未生效 4 months ago
王杰 b75b23e6f0 44653 电子化检验输入数量支持小数点输入 4 months ago
xiangwei.zhang f3e7ec6eaf hotfix-报工工作中心不对 4 months ago
xiangwei.zhang 191704bbae 44255-优化:非排序工艺路线支持所有路线主表明细批量导入 4 months ago
xiangwei.zhang 9317426969 44255-优化:非排序工艺路线支持所有路线主表明细批量导入 4 months ago
王杰 15066f676b merge dev-temp-castle-241223-44172 解决冲突 4 months ago
臧学普 25893a29b5 44643 正式环境发运明细报表,条码查询条件无效 4 months ago
王杰 fada312113 44615 发运明细报表增加客户订单号、发运组名称字段模糊查询 4 months ago
王杰 49c072cc44 44615 发运明细报表增加客户订单号、发运组名称字段模糊查询 4 months ago
臧学普 6a90f0f54d Merge remote-tracking branch 'origin/test' into test 4 months ago
臧学普 be6816c3dd 43316 修复bomVersion启用问题 4 months ago
王杰 bdc5db8ea2 Merge branch 'test-temp-castle-2412271558-44316' into test 4 months ago
臧学普 f5f2a4b31d 43316 修复bomVersion启用问题 4 months ago
王杰 62d27d7b53 Merge branch 'uat-temp-wj-2412270000-44628' into test 4 months ago
王杰 219353cde2 合并 test-temp-castle-2412271558-44316 44316 排序工单BOM拆分逻辑更新 --- 解决冲突 4 months ago
王杰 3db69d968e 合并 test-temp-castle-2412271558-44316 44316 排序工单BOM拆分逻辑更新 --- 解决冲突 4 months ago
臧学普 bc76beab75 43316 4 months ago
王杰 6c54c40e68 44628 生产工单重新打印目视单,数据不对 4 months ago
王杰 95f55d8df7 merge dev-temp-castle-241223-44022 解决冲突 4 months ago
王杰 5601754a02 Merge branch 'uat-temp-wj-2412240000-44335' into test 4 months ago
王杰 407de709fc 44022 芜湖正式:产线看板,需要关联显示异常停线时间 merge 解决冲突 4 months ago
王杰 e11a9e7ffc Merge branch 'uat-temp-wj-20241223-44377' into test 4 months ago
王杰 4bd1ea7aac Merge branch 'dev-temp-castle-2412191445-44381' into test 4 months ago
王杰 4ca5148569 merge 44316 bom是否启动bomVersion 解决冲突 4 months ago
王杰 2469dba755 Merge branch 'dev-temp-xw-202412261219-44576' into test 4 months ago
xiangwei.zhang a774301a9a 44576 BTO工单看板查询
44510 bom失效查询问题
4 months ago
臧学普 549e8023f5 43316 4 months ago
臧学普 8074411c3c 43316 4 months ago
臧学普 559a1c456a 43316 4 months ago
王杰 f824ce25ee 44335 非排序加工规则页面,在“设备代码”列后增加“设备名称”列 5 months ago
王杰 b2fec000c5 44377 检验产品数据总报表目前是动态表单配置查询很慢,需要重新开发 5 months ago
王杰 955a5c8d8b 44377 检验产品数据总报表目前是动态表单配置查询很慢,需要重新开发 5 months ago
臧学普 2be5ccc1e4 fix bug PC-发运明细报表:增加vin和条码的查询条件-44172 5 months ago
臧学普 e53ddfa6ef fix bug 44022 芜湖正式:产线看板,需要关联显示异常停线时间 5 months ago
王杰 b6aa88449d 44377 检验产品数据总报表目前是动态表单配置查询很慢,需要重新开发 5 months ago
臧学普 ee8c085bb0 fix bug 44022 芜湖正式:产线看板,需要关联显示异常停线时间 5 months ago
王杰 36660c865f Merge branch 'uat-temp-wj-20241223-44377' into test 5 months ago
王杰 adb0cf7a8b 44376 武汉 加工记录统计报表 需求变更 5 months ago
王杰 ced040beb2 Merge branch 'dev-temp-castle-241223-44172' into uat 5 months ago
王杰 1e83f4ef07 Merge branch 'dev-temp-castle-241223-44172' into test 5 months ago
臧学普 42033f7d57 fix bug 44172 PC-发运明细报表:增加vin和条码的查询条件 5 months ago
臧学普 69a47d9a77 bom是否启动bomVersion 5 months ago
臧学普 402a961a1f bom是否启动bomVersion 5 months ago
臧学普 889a6516e1 通用客户CBR 5 months ago
臧学普 e1a6521c00 通用客户CBR 5 months ago
王杰 a8df173fa3 Merge branch 'test' into uat 5 months ago
王杰 e0525ff78a Merge branch 'dev-temp-castle-2412181729-44421' into dev 5 months ago
王杰 37827fb343 Merge branch 'dev-temp-ljs-20241219141200-44437' into uat 5 months ago
臧学普 c5b6d239e7 修复bug 44421 PTR逻辑优化 5 months ago
王杰 e7ecccdbf4 Merge branch 'dev-temp-ljs-20241219141200-44437' into dev 5 months ago
王杰 2955dccadb Merge branch 'test' into dev 5 months ago
jun 030c731427 44437 CKPT安全件信息导出 5 months ago
王杰 0431e3c860 BOM查询条件是否携带effEndTime,根据系统配置MES_REPORT_FIND_BOM_WITH_EFFENDTIME,维护1则携带 5 months ago
王杰 361ccc63b4 Merge branch 'test' into dev 5 months ago
王杰 bdf60eeb03 BOM查询条件是否携带effEndTime,根据系统配置MES_REPORT_FIND_BOM_WITH_EFFENDTIME,维护1则携带 5 months ago
王杰 a08defc46c Merge branch 'test' into dev 5 months ago
王杰 d32999bef2 BOM查询条件是否携带effEndTime,根据系统配置MES_REPORT_FIND_BOM_WITH_EFFENDTIME,维护1则携带 5 months ago
王杰 8f86f5aa89 Merge branch 'dev-temp-castle-2412181729-44421' into dev 5 months ago
臧学普 64002c88f4 修复bug 44421 PTR逻辑优化 5 months ago
王杰 f5a85d3364 Merge branch 'dev-temp-wj-2412160000-00001' into dev 5 months ago
王杰 79dc62a687 产量统计报表 5 months ago
王杰 f0e6a7522a 71 5 months ago
王杰 ab386358a3 Merge branch 'dev-temp-wj-2412160000-00001' into dev 5 months ago
王杰 a122d33853 Merge branch 'master' into dev 5 months ago
王杰 1b0d0c5756 产量统计报表 5 months ago
王杰 195f7dae2a 产量统计报表 5 months ago
王杰 622280c66b 排序工单 关闭 队列未改成未同步 5 months ago
王杰 2f388460cc 加工记录统计报表 5 months ago
王杰 e2bd615eb5 Merge branch 'dev-temp-wj-2412130000-44336' into dev 5 months ago
王杰 7650769d8b 合并冲突 5 months ago
臧学普 ef0e52289b POM逻辑修改 5 months ago
王杰 93d9c8e7f2 44336 PC-非排序加工规则-需要支持维护一个进料对应多个产成 和多个进料对应一个产成 5 months ago
王杰 ae7afeda60 44334 生产工单页面工单排序逻辑优化 5 months ago
王杰 38b5c63ef8 Merge branch 'dev-temp-wj-2412120000-44252' into dev 5 months ago
王杰 3a6c27a3ce Merge branch 'dev-temp-wj-2412120000-00001' into dev 5 months ago
王杰 23de55a6eb 解决冲突 5 months ago
王杰 151c3820a6 Merge branch 'dev-temp-wj-2412110000-44273' into dev 5 months ago
王杰 5e7b8e4356 查询BOM信息考虑失效时间 5 months ago
王杰 cd2aa7005c 代码回退 5 months ago
王杰 32dfbdc8d7 点检删除功能 发现代码错误 少了一个感叹号 5 months ago
王杰 0608896664 设备数据查询报表提示信息提示 生产线[%s]工位[%s]为查询到设备信息:?,? 问题修复 5 months ago
王杰 f04c95c785 44252 产线屏放在边端,无需登录 5 months ago
王杰 1d7f753064 44252 产线屏放在边端,无需登录 5 months ago
jun ba92f57af1 查询bom信息考虑失效时间 5 months ago
王杰 ac41c050a5 44273 生产工单页面增加上/下线时间查询条件 5 months ago

@ -63,6 +63,14 @@ public interface IMesBomService extends IBaseMesService<MesBom> {
*/
MesBom findBom(String organizeCode, String bomVersion,String partNo);
/**
* bom
* @param organizeCode
* @param partNo
* @return
*/
MesBom findBom(String organizeCode, String partNo);
@ApiOperation(value = "bom反向查询")
List<MesBom> queryMesBomReverse(MesBom mesBom);
}

@ -0,0 +1,6 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesCimGmCbrRule;
public interface IMesCimGmCbrRuleService extends IBaseMesService<MesCimGmCbrRule>{
}

@ -0,0 +1,7 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail;
public interface IMesPackingRuleDetailService extends IBaseMesService<MesPackingRuleDetail> {
}

@ -0,0 +1,7 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule;
public interface IMesPackingRuleService extends IBaseMesService<MesPackingRule> {
}

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import io.swagger.annotations.ApiOperation;
/**
* @Description:
@ -9,6 +10,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
*/
public interface IMesProdRuleNosortCfgService extends IBaseMesService<MesProdRuleNosortCfg> {
@ApiOperation(value = "根据产线和物料查询非排序产品加工规则配置", notes = "根据产线和物料查询非排序产品加工规则配置")
MesProdRuleNosortCfg findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode);
}

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.api.busi.report;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesInspectionProductDataAmountReportModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import io.swagger.annotations.ApiOperation;
public interface IMesInspectionProductDataReportService {
@ApiOperation(value = "检验产品数据总报表")
ListPager<MesInspectionProductDataAmountReportModel> queryInspectionProductDataAmountReport(MesInspectionProductDataAmountReportModel model, Pager pager);
}

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.api.busi.report;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProductionRecordReportExtModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import io.swagger.annotations.ApiOperation;
public interface IMesProductionRecordReportExtService {
@ApiOperation(value = "加工记录合并批量汇报查询报表")
ListPager<MesProductionRecordReportExtModel> queryProductionRecordUnionWorkOrderLogReport(MesProductionRecordReportExtModel model, Pager pager);
}

@ -10,7 +10,6 @@ import cn.estsh.i3plus.platform.common.tool.ExcelTool;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.i3plus.pojo.model.common.ExportDataModel;
@ -26,6 +25,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityManager;
@ -63,9 +63,10 @@ public class BaseExtDataController extends MesBaseController {
@GetMapping(value = "/enumlist")
@ApiOperation(value = "获取MES系统所有枚举")
public ResultBean enumlist(@RequestParam(name = "enumName") String enumName) {
public ResultBean enumlistByOrg(@RequestParam(name = "enumName") String enumName, @RequestParam(name = "organizeCode", required = false) String organizeCode) {
try {
Map<String, Object> map = enumService.doGetMesEnumByEnumName(AuthUtil.getOrganize().getOrganizeCode(), enumName);
organizeCode = StringUtils.isEmpty(organizeCode) ? AuthUtil.getOrganize().getOrganizeCode() : organizeCode;
Map<String, Object> map = enumService.doGetMesEnumByEnumName(organizeCode, enumName);
return ResultBean.success("查询成功")
.setResultObject(map)
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());

@ -35,6 +35,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -270,9 +271,8 @@ public class ExtProdOrgController extends MesBaseController {
@ApiOperation(value = "按条件查询生产线所有数据")
public ResultBean queryMesWorkCenterByProperties(MesWorkCenter workCenter) {
try {
workCenter.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
if (StringUtils.isEmpty(workCenter.getOrganizeCode())) workCenter.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
List<MesWorkCenter> workCenterList = prodOrgService.queryMesWorkCenterByProperties(workCenter);
return ResultBean.success("操作成功").setResultList(workCenterList)
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {

@ -1,10 +1,26 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesAssemblyNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesTimeEfficientCfg;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
*
@ -13,4 +29,36 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesAssemblyNosortCfg")
public class MesAssemblyNosortCfgController extends BaseMesController<MesAssemblyNosortCfg>{
@PostMapping(value = "/import-data")
@ApiOperation(value = "导入数据")
public ResultBean importNew(@RequestParam("file") MultipartFile file, @RequestParam("sourceId")Long sourceId) {
try {
MesExcelTool excelTool = new MesExcelTool(entityManager, RedisCacheTool.getImppRedis());
List<MesAssemblyNosortCfg> beanList = excelTool.importData(file.getOriginalFilename(), file.getInputStream(), mesClass);
beanList.forEach(mesAssemblyNosortCfg -> {
mesAssemblyNosortCfg.setPid(sourceId);
});
String userName = AuthUtil.getSessionUser().getUserName();
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
// 导入数据初始化
for (MesAssemblyNosortCfg bean : beanList) {
ConvertBean.serviceModelInitialize(bean, userName);
bean.setOrganizeCode(organizeCode);
bean.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
}
baseService.insertBatch(beanList);
// 导入后
afterImport(beanList);
return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,16 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.bean.MesCimGmCbrRule;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* CBR
*/
@Api(value ="通用CBR功能" )
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mes_cim_gm_cbr_rule")
public class MesCimGmCbrRuleController extends BaseMesController<MesCimGmCbrRule>{
}

@ -1,13 +1,122 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteDetailService;
import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesCraftDao;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.ExcelTool;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesCraftRoute;
import cn.estsh.i3plus.pojo.mes.bean.MesCraftRouteDetail;
import cn.estsh.i3plus.pojo.mes.repository.MesCraftRouteRepository;
import cn.estsh.i3plus.pojo.model.wms.WmsAgImportModel;
import cn.estsh.i3plus.pojo.wms.bean.*;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
@Api(description = "工艺路线")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCraftRoute")
public class MesCraftRouteController extends BaseMesController<MesCraftRoute> {
public static final Logger LOGGER = LoggerFactory.getLogger(MesCraftRouteController.class);
@Autowired
private IMesCraftRouteDetailService mesCraftRouteDetailService;
@Autowired
private MesCraftRouteRepository mesCraftRouteRepository;
@PostMapping(value = "/all/import")
@ApiOperation(value = "流程导入")
public ResultBean allImport(@RequestParam("file") MultipartFile file) {
try {
String organizeCode = AuthUtil.getOrganizeCode();
//数据空校验以及转换
ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis());
List<MesCraftRoute> routeList = getDataAndInitValid(excelTool, file.getOriginalFilename(), file.getInputStream(),
MesCraftRoute.class, "MesCraftRoute", true);
List<MesCraftRouteDetail> routeDetailList = getDataAndInitValid(excelTool, file.getOriginalFilename(), file.getInputStream(),
MesCraftRouteDetail.class, "MesCraftRouteDetail", true);
String userName = AuthUtil.getSessionUser().getUserName();
//String userName ="zxw";
routeList.forEach(mesCraftRoute -> {
mesCraftRoute.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(mesCraftRoute,userName);
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesCraftRoute.getCraftRouteCode(), "craftRouteCode", roadPackBean);
boolean flg = mesCraftRouteRepository.isExitByHql(roadPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("工艺路线代码【%s】已经存在请检查数据", mesCraftRoute.getCraftRouteCode())
.build();
}
});
routeDetailList.forEach(mesCraftRouteDetail -> {
mesCraftRouteDetail.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(mesCraftRouteDetail,userName);
});
baseService.insertBatch(routeList);
mesCraftRouteDetailService.insertBatch(routeDetailList);
return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
/**
* SHEET
*
* @param excelTool
* @param fileName
* @param inputStream
* @param dataBean
* @param sheetName
* @param <T>
* @return
* @throws Exception
*/
private <T> List<T> getDataAndInitValid(ExcelTool excelTool, String fileName, InputStream inputStream,
Class<T> dataBean, String sheetName, boolean isCheckDataEmpty) throws Exception {
List<T> beanList = excelTool.importData(fileName, inputStream, dataBean, sheetName);
LOGGER.info("导入的【" + sheetName + "】数据" + JsonUtilTool.getJSONArrayByList(beanList));
if (isCheckDataEmpty && CollectionUtils.isEmpty(beanList)) {
MesException.throwBusiException(String.format("导入的【%s】数据为空", sheetName));
}
return beanList;
}
}

@ -1,9 +1,24 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @Description :
@ -15,4 +30,39 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesEquipmentProdParamCfg")
public class MesEquipmentProdParamCfgController extends BaseMesController<MesEquipmentProdParamCfg> {
@PostMapping(value = "/import-data")
@ApiOperation(value = "导入数据")
public ResultBean importNew(@RequestParam("file") MultipartFile file, @RequestParam("sourceId")Long sourceId) {
try {
MesExcelTool excelTool = new MesExcelTool(entityManager, RedisCacheTool.getImppRedis());
List<MesEquipmentProdParamCfg> beanList = excelTool.importData(file.getOriginalFilename(), file.getInputStream(), mesClass);
// 校验导入数据
baseService.validateImport(beanList);
beanList.forEach(mesEquipmentProdParamCfg -> {
mesEquipmentProdParamCfg.setSourceId(sourceId);
});
String userName = AuthUtil.getSessionUser().getUserName();
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
// 导入数据初始化
for (MesEquipmentProdParamCfg bean : beanList) {
ConvertBean.serviceModelInitialize(bean, userName);
bean.setOrganizeCode(organizeCode);
bean.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
}
baseService.insertBatch(beanList);
// 导入后
afterImport(beanList);
return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api("成品包装规则")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPackingRule")
public class MesPackingRuleController extends BaseMesController<MesPackingRule>{
}

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api("成品包装明细规则")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPackingRuleDetail")
public class MesPackingRuleDetailController extends BaseMesController<MesPackingRuleDetail>{
}

@ -1,11 +1,41 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesTimeEfficientCfg;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.ExcelTool;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.repository.MesAssemblyNosortCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesTimeEfficientCfgRepository;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.stream.Collector;
import java.util.stream.Collectors;
/**
*
@ -14,4 +44,93 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesProdRuleNosortCfg")
public class MesProdRuleNosortCfgController extends BaseMesController<MesProdRuleNosortCfg>{
public static final Logger LOGGER = LoggerFactory.getLogger(MesProdRuleNosortCfgController.class);
@Autowired
private MesAssemblyNosortCfgRepository assemblyNosortCfgRepository;
@Autowired
private MesEquipmentProdParamCfgRepository equipmentProdParamCfgRepository;
@Autowired
private MesTimeEfficientCfgRepository timeEfficientCfgRepository;
@PostMapping(value = "/all/import")
@ApiOperation(value = "流程导入")
public ResultBean allImport(@RequestParam("file") MultipartFile file) {
try {
String organizeCode = AuthUtil.getOrganizeCode();
//String organizeCode = "CK01";
//数据空校验以及转换
ExcelTool excelTool = new ExcelTool(entityManager, RedisCacheTool.getImppRedis());
List<MesProdRuleNosortCfg> ruleNosortCfgList = getDataAndInitValid(excelTool, file.getOriginalFilename(), file.getInputStream(),
MesProdRuleNosortCfg.class, "MesProdRuleNosortCfg", true);
List<MesAssemblyNosortCfg> assemblyNosortCfgList = getDataAndInitValid(excelTool, file.getOriginalFilename(), file.getInputStream(),
MesAssemblyNosortCfg.class, "MesAssemblyNosortCfg", true);
List<MesEquipmentProdParamCfg> equipmentProdParamCfgList = getDataAndInitValid(excelTool, file.getOriginalFilename(), file.getInputStream(),
MesEquipmentProdParamCfg.class, "MesEquipmentProdParamCfg", true);
List<MesTimeEfficientCfg> timeEfficientCfgList = getDataAndInitValid(excelTool, file.getOriginalFilename(), file.getInputStream(),
MesTimeEfficientCfg.class, "MesTimeEfficientCfg", true);
String userName = AuthUtil.getSessionUser().getUserName();
//String userName ="zxw";
ruleNosortCfgList.forEach(ruleNosortCfg -> {
ruleNosortCfg.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(ruleNosortCfg,userName);
});
List<MesProdRuleNosortCfg> ruleNosortCfgs = baseService.insertBatch(ruleNosortCfgList);
Map<String, List<MesProdRuleNosortCfg>> ruleNosortCfgMap = ruleNosortCfgs.stream().collect(Collectors.groupingBy(MesProdRuleNosortCfg::getNo));
assemblyNosortCfgList.forEach(assemblyNosortCfg -> {
List<MesProdRuleNosortCfg> mesProdRuleNosortCfgs = ruleNosortCfgMap.get(assemblyNosortCfg.getNo());
assemblyNosortCfg.setPid(mesProdRuleNosortCfgs.get(0).getId());
assemblyNosortCfg.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(assemblyNosortCfg,userName);
});
assemblyNosortCfgRepository.saveAll(assemblyNosortCfgList);
equipmentProdParamCfgList.forEach(equipmentProdParamCfg -> {
List<MesProdRuleNosortCfg> mesProdRuleNosortCfgs = ruleNosortCfgMap.get(equipmentProdParamCfg.getNo());
equipmentProdParamCfg.setSourceId(mesProdRuleNosortCfgs.get(0).getId());
equipmentProdParamCfg.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(equipmentProdParamCfg,userName);
});
equipmentProdParamCfgRepository.saveAll(equipmentProdParamCfgList);
timeEfficientCfgList.forEach(timeEfficientCfg -> {
List<MesProdRuleNosortCfg> mesProdRuleNosortCfgs = ruleNosortCfgMap.get(timeEfficientCfg.getNo());
timeEfficientCfg.setSourceId(mesProdRuleNosortCfgs.get(0).getId());
timeEfficientCfg.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(timeEfficientCfg,userName);
});
timeEfficientCfgRepository.saveAll(timeEfficientCfgList);
return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
/**
* SHEET
*
* @param excelTool
* @param fileName
* @param inputStream
* @param dataBean
* @param sheetName
* @param <T>
* @return
* @throws Exception
*/
private <T> List<T> getDataAndInitValid(ExcelTool excelTool, String fileName, InputStream inputStream,
Class<T> dataBean, String sheetName, boolean isCheckDataEmpty) throws Exception {
List<T> beanList = excelTool.importData(fileName, inputStream, dataBean, sheetName);
LOGGER.info("导入的【" + sheetName + "】数据" + JsonUtilTool.getJSONArrayByList(beanList));
if (isCheckDataEmpty && CollectionUtils.isEmpty(beanList)) {
MesException.throwBusiException(String.format("导入的【%s】数据为空", sheetName));
}
return beanList;
}
}

@ -1,11 +1,27 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesTimeEfficientCfg;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
*
@ -16,5 +32,37 @@ import org.springframework.web.bind.annotation.RestController;
public class MesTimeEfficientCfgController extends BaseMesController<MesTimeEfficientCfg>{
@PostMapping(value = "/import-data")
@ApiOperation(value = "导入数据")
public ResultBean importNew(@RequestParam("file") MultipartFile file, @RequestParam("sourceId")Long sourceId) {
try {
MesExcelTool excelTool = new MesExcelTool(entityManager, RedisCacheTool.getImppRedis());
List<MesTimeEfficientCfg> beanList = excelTool.importData(file.getOriginalFilename(), file.getInputStream(), mesClass);
// 校验导入数据
baseService.validateImport(beanList);
beanList.forEach(mesEquipmentProdParamCfg -> {
mesEquipmentProdParamCfg.setSourceId(sourceId);
});
String userName = AuthUtil.getSessionUser().getUserName();
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
// 导入数据初始化
for (MesTimeEfficientCfg bean : beanList) {
ConvertBean.serviceModelInitialize(bean, userName);
bean.setOrganizeCode(organizeCode);
bean.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
}
baseService.insertBatch(beanList);
// 导入后
afterImport(beanList);
return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -12,6 +12,7 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -39,8 +40,7 @@ public class MesWorkCenterBoardController {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
.notNull("timeRangeIdentification", conditionModel.getTimeRangeIdentification());
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
conditionModel.setOrganizeCode(organizeCode);
if (StringUtils.isEmpty(conditionModel.getOrganizeCode())) conditionModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询产线状态").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).
setResultList(mesYfBoardService.queryWorkCenterStatus(conditionModel));
} catch (ImppBusiException e) {
@ -57,8 +57,7 @@ public class MesWorkCenterBoardController {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
.notNull("timeRangeIdentification", conditionModel.getTimeRangeIdentification());
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
conditionModel.setOrganizeCode(organizeCode);
if (StringUtils.isEmpty(conditionModel.getOrganizeCode())) conditionModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询产线生产完成率").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).
setResultObject(mesYfBoardService.queryWorkCenterProductionCompletionRate(conditionModel));
} catch (ImppBusiException e) {
@ -75,8 +74,7 @@ public class MesWorkCenterBoardController {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
.notNull("timeRangeIdentification", conditionModel.getTimeRangeIdentification());
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
conditionModel.setOrganizeCode(organizeCode);
if (StringUtils.isEmpty(conditionModel.getOrganizeCode())) conditionModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询产线工单完成情况").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).
setResultList(mesYfBoardService.queryWorkCenterWorkOrderCompletionStatus(conditionModel));
} catch (ImppBusiException e) {
@ -93,8 +91,7 @@ public class MesWorkCenterBoardController {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
.notNull("timeRangeIdentification", conditionModel.getTimeRangeIdentification());
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
conditionModel.setOrganizeCode(organizeCode);
if (StringUtils.isEmpty(conditionModel.getOrganizeCode())) conditionModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询单位小时完工数").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).
setResultList(mesYfBoardService.queryUnitHourCompletionRate(conditionModel));
} catch (ImppBusiException e) {
@ -111,8 +108,7 @@ public class MesWorkCenterBoardController {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
.notNull("timeRangeIdentification", conditionModel.getTimeRangeIdentification());
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
conditionModel.setOrganizeCode(organizeCode);
if (StringUtils.isEmpty(conditionModel.getOrganizeCode())) conditionModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询产线一次下线合格率").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).
setResultList(mesYfBoardService.queryWorkCenterFirstTimeOfflineQualificationRate(conditionModel));
} catch (ImppBusiException e) {
@ -129,8 +125,7 @@ public class MesWorkCenterBoardController {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
.notNull("timeRangeIdentification", conditionModel.getTimeRangeIdentification());
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
conditionModel.setOrganizeCode(organizeCode);
if (StringUtils.isEmpty(conditionModel.getOrganizeCode())) conditionModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询点检结果").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).
setResultList(mesYfBoardService.queryInspectionResults(conditionModel));
} catch (ImppBusiException e) {
@ -147,8 +142,7 @@ public class MesWorkCenterBoardController {
ValidatorBean.beginValid(conditionModel)
.notNull("workCenterCodeList", conditionModel.getWorkCenterCodeList())
.notNull("timeRangeIdentification", conditionModel.getTimeRangeIdentification());
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
conditionModel.setOrganizeCode(organizeCode);
if (StringUtils.isEmpty(conditionModel.getOrganizeCode())) conditionModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询异常停线时间").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).
setResultObject(mesYfBoardService.queryAbnormalDowntime(conditionModel));
} catch (ImppBusiException e) {

@ -0,0 +1,42 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.report;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesInspectionProductDataReportService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesInspectionProductDataAmountReportModel;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.impp.framework.base.controller.BaseController;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api("检验产品数据总报表")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN)
public class MesInspectionProductDataReportController extends BaseController {
@Autowired
private IMesInspectionProductDataReportService inspectionProductDataReportService;
@GetMapping(value = "/inspection-product-data-amount/report/query")
@ApiOperation(value = "检验产品数据总报表")
public ResultBean queryInspectionProductDataAmountReport(MesInspectionProductDataAmountReportModel model, Pager pager) {
try {
model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询成功").setListPager(inspectionProductDataReportService.queryInspectionProductDataAmountReport(model, pager))
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,47 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.report;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesProductionRecordReportExtService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProductionRecordReportExtModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.impp.framework.base.controller.BaseController;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api("加工记录合并批量汇报查询报表")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN)
public class MesProductionRecordReportExtController extends BaseController {
@Autowired
private IMesProductionRecordReportExtService productionRecordReportExtService;
@GetMapping(value = "/production-record/union/work-order-log/report/query")
@ApiOperation(value = "加工记录合并批量汇报查询报表")
public ResultBean queryProductionRecordUnionWorkOrderLogReport(MesProductionRecordReportExtModel model, Pager pager) {
try {
ValidatorBean.beginValid(model)
.notNull(MesExtConstWords.COMPLETE_DATE_TIME_START, model.getCompleteDateTimeStart())
.notNull(MesExtConstWords.COMPLETE_DATE_TIME_END, model.getCompleteDateTimeEnd());
model.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
return ResultBean.success("查询成功").setListPager(productionRecordReportExtService.queryProductionRecordUnionWorkOrderLogReport(model, pager))
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -2,13 +2,16 @@ package cn.estsh.i3plus.ext.mes.apiservice.dao;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesProdRuleNosortCfgDao {
@ApiOperation(value = "根据产线和物料查询非排序产品加工规则配置", notes = "根据产线和物料查询非排序产品加工规则配置")
List<MesProdRuleNosortCfg> findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode);
@ApiOperation(value = "根据工位和物料查询非排序产品加工规则配置", notes = "根据工位和物料查询非排序产品加工规则配置")
List<MesProdRuleNosortCfg> findMesProdRuleNosortCfgByWorkCellCode(String workCellCode, String partNo, String organizeCode);
}

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.apiservice.dao.report;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesInspectionProductDataAmountReportModel;
import cn.estsh.i3plus.pojo.base.common.Pager;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesInspectionProductDataReportDao {
@ApiOperation(value = "检验产品数据总报表-数量")
int queryInspectionProductDataAmountReportCount(MesInspectionProductDataAmountReportModel model);
@ApiOperation(value = "检验产品数据总报表")
List<MesInspectionProductDataAmountReportModel> queryInspectionProductDataAmountReport(MesInspectionProductDataAmountReportModel model, Pager pager);
}

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.apiservice.dao.report;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProductionRecordReportExtModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : wangjie
* @CreateDate : 2024/9/29 10:21
* @Modify:
**/
public interface IMesProductionRecordReportExtDao {
ListPager<MesProductionRecordReportExtModel> queryProductionRecordUnionWorkOrderLogReport(MesProductionRecordReportExtModel model, Pager pager, List<Integer> reportStatusList2Pr, List<Integer> reportStatusList2Wo);
}

@ -0,0 +1,229 @@
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report;
import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesInspectionProductDataReportDao;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesInspectionProductDataAmountReportModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.report.ShippingReportModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class MesInspectionProductDataReportDao implements IMesInspectionProductDataReportDao {
@Autowired
private EntityManager entityManager;
/**
* -
* @param model
* @return
*/
@Override
public int queryInspectionProductDataAmountReportCount(MesInspectionProductDataAmountReportModel model) {
StringBuffer hql = new StringBuffer();
hql.append(" select count(1) ");
packHqlForQuery(hql, model);
Query query = entityManager.createQuery(hql.toString(), Long.class);
packParameterForQuery(query, model);
return ((Long) query.getSingleResult()).intValue();
}
/**
*
* @param model
* @param pager
* @return
*/
@Override
public List<MesInspectionProductDataAmountReportModel> queryInspectionProductDataAmountReport(MesInspectionProductDataAmountReportModel model, Pager pager) {
StringBuffer hql = new StringBuffer();
hql.append("select new ").append(MesInspectionProductDataAmountReportModel.class.getName()).append(" ( ");
// 添加所有需要查询的字段
hql.append("mpi.id,");
hql.append("mpid.id AS pid,");
hql.append("mpi.inspectionDate,");
hql.append("mpi.modifyDatetime,");
hql.append("mpi.partName,");
hql.append("mpi.partNo,");
hql.append("mpi.sn,");
hql.append("mpi.qty,");
hql.append("mpi.workCenterCode,");
hql.append("mpi.createUser,");
hql.append("mpi.modifyUser AS ncModifyUser,");
hql.append("mpi.inspectionStatus,");
hql.append("mpi.ncStatus,");
hql.append("mpid.defectLocation,");
hql.append("mpid.frontBack,");
hql.append("mpid.defectTypeName,");
hql.append("mm.lgort,");
hql.append("mm.umlgo,");
hql.append("mm.zrsum,");
hql.append("mrt.status AS taskStatus,");
hql.append("mrt.reworkOrder,");
hql.append("mrt.modifyUser,");
hql.append("mp.partTypeCode,");
hql.append("mwc.workCenterName");
hql.append(")");
packHqlForQuery(hql, model);
hql.append(" order by mpi.createDatetime asc ");
Query query = entityManager.createQuery(hql.toString(), MesInspectionProductDataAmountReportModel.class);
packParameterForQuery(query, model);
query.setMaxResults(pager.getPageSize());
if (pager.getCurrentPage() == 0) {
pager.setCurrentPage(1);
}
query.setFirstResult(pager.getCurrentPage() * pager.getPageSize() - pager.getPageSize());
return query.getResultList();
}
private void packHqlForQuery(StringBuffer hql, MesInspectionProductDataAmountReportModel model) {
hql.append(" from MesPartInspection as mpi ");
hql.append(" left join MesPartInspectionDetail as mpid on (mpi.id = mpid.pid and mpid.organizeCode = :organizeCode and mpid.isDeleted = :isDeleted and mpid.isValid = :isValid) ");
hql.append(" left join MesMove as mm on (mpi.id = mm.partInspectionId and mm.organizeCode = :organizeCode and mm.isDeleted = :isDeleted and mm.isValid = :isValid) ");
hql.append(" left join MesReworkTask as mrt on (mpi.id = mrt.partInspectionId and mrt.organizeCode = :organizeCode and mrt.isDeleted = :isDeleted and mrt.isValid = :isValid) ");
hql.append(" left join MesPart as mp on (mpi.partNo = mp.partNo and mp.organizeCode = :organizeCode and mp.isDeleted = :isDeleted and mp.isValid = :isValid) ");
hql.append(" left join MesWorkCenter as mwc on (mpi.workCenterCode = mwc.workCenterCode and mwc.organizeCode = :organizeCode and mwc.isDeleted = :isDeleted and mwc.isValid = :isValid) ");
hql.append(" where mpi.organizeCode = :organizeCode ");
hql.append(" and mpi.isValid = :isValid ");
hql.append(" and mpi.isDeleted = :isDeleted ");
if (!StringUtils.isEmpty(model.getInspectionDateStart())) {
hql.append(" and mpi.inspectionDate >= :inspectionDateStart ");
}
if (!StringUtils.isEmpty(model.getInspectionDateEnd())) {
hql.append(" and mpi.inspectionDate <= :inspectionDateEnd ");
}
if (!StringUtils.isEmpty(model.getModifyDateTimeStart())) {
hql.append(" and mpi.modifyDatetime >= :modifyDateTimeStart ");
}
if (!StringUtils.isEmpty(model.getModifyDateTimeEnd())) {
hql.append(" and mpi.modifyDatetime <= :modifyDateTimeEnd ");
}
if (!StringUtils.isEmpty(model.getPartNo())) {
hql.append(" and mpi.partNo like :partNo ");
}
if (!StringUtils.isEmpty(model.getPartName())) {
hql.append(" and mpi.partName like :partName ");
}
if (!StringUtils.isEmpty(model.getProductSn())) {
hql.append(" and mpi.sn like :productSn ");
}
if (!StringUtils.isEmpty(model.getWorkCenterCode())) {
hql.append(" and mpi.workCenterCode = :workCenterCode ");
}
if (!StringUtils.isEmpty(model.getCreateUser())) {
hql.append(" and mpi.createUser like :createUser ");
}
if (!StringUtils.isEmpty(model.getInspectionStatus())) {
hql.append(" and mpi.inspectionStatus = :inspectionStatus ");
}
if (!StringUtils.isEmpty(model.getNcStatus())) {
hql.append(" and mpi.ncStatus = :ncStatus ");
}
if (!StringUtils.isEmpty(model.getDefectLocation())) {
hql.append(" and mpid.defectLocation like :defectLocation ");
}
if (!StringUtils.isEmpty(model.getFrontBack())) {
hql.append(" and mpid.frontBack = :frontBack ");
}
if (!StringUtils.isEmpty(model.getDefectTypeName())) {
hql.append(" and mpid.defectTypeName like :defectTypeName ");
}
if (!StringUtils.isEmpty(model.getUmlgo())) {
hql.append(" and mm.umlgo = :umlgo ");
}
if (!StringUtils.isEmpty(model.getTaskStatus())) {
hql.append(" and mrt.status = :taskStatus ");
}
if (!StringUtils.isEmpty(model.getModifyUser())) {
hql.append(" and mrt.modifyUser like :modifyUser ");
}
if (!StringUtils.isEmpty(model.getReworkOrder())) {
hql.append(" and mrt.reworkOrder like :reworkOrder ");
}
if (!StringUtils.isEmpty(model.getPartTypeCode())) {
hql.append(" and mp.partTypeCode like :partTypeCode ");
}
}
private void packParameterForQuery(Query query, MesInspectionProductDataAmountReportModel model) {
query.setParameter(MesExtConstWords.ORGANIZE_CODE, model.getOrganizeCode());
query.setParameter(MesExtConstWords.IS_VALID, CommonEnumUtil.IS_VAILD.VAILD.getValue());
query.setParameter(MesExtConstWords.IS_DELETED, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
if (!StringUtils.isEmpty(model.getInspectionDateStart())) {
query.setParameter(MesExtConstWords.INSPECTION_DATE_START, model.getInspectionDateStart());
}
if (!StringUtils.isEmpty(model.getInspectionDateEnd())) {
query.setParameter(MesExtConstWords.INSPECTION_DATE_END, model.getInspectionDateEnd());
}
if (!StringUtils.isEmpty(model.getModifyDateTimeStart())) {
query.setParameter(MesExtConstWords.MODIFY_DATE_TIME_START, model.getModifyDateTimeStart());
}
if (!StringUtils.isEmpty(model.getModifyDateTimeEnd())) {
query.setParameter(MesExtConstWords.MODIFY_DATE_TIME_END, model.getModifyDateTimeEnd());
}
if (!StringUtils.isEmpty(model.getPartNo())) {
query.setParameter(MesExtConstWords.PART_NO, MesExtConstWords.PERCENT + model.getPartNo() + MesExtConstWords.PERCENT);
}
if (!StringUtils.isEmpty(model.getPartName())) {
query.setParameter(MesExtConstWords.PART_NAME, MesExtConstWords.PERCENT + model.getPartName() + MesExtConstWords.PERCENT);
}
if (!StringUtils.isEmpty(model.getProductSn())) {
query.setParameter(MesExtConstWords.PRODUCT_SN, MesExtConstWords.PERCENT + model.getProductSn() + MesExtConstWords.PERCENT);
}
if (!StringUtils.isEmpty(model.getWorkCenterCode())) {
query.setParameter(MesExtConstWords.WORK_CENTER_CODE, model.getWorkCenterCode());
}
if (!StringUtils.isEmpty(model.getCreateUser())) {
query.setParameter(MesExtConstWords.CREATE_USER, MesExtConstWords.PERCENT + model.getCreateUser() + MesExtConstWords.PERCENT);
}
if (!StringUtils.isEmpty(model.getInspectionStatus())) {
query.setParameter(MesExtConstWords.INSPECTION_STATUS, model.getInspectionStatus());
}
if (!StringUtils.isEmpty(model.getNcStatus())) {
query.setParameter(MesExtConstWords.NC_STATUS, model.getNcStatus());
}
if (!StringUtils.isEmpty(model.getDefectLocation())) {
query.setParameter(MesExtConstWords.DEFECT_LOCATION, MesExtConstWords.PERCENT + model.getDefectLocation() + MesExtConstWords.PERCENT);
}
if (!StringUtils.isEmpty(model.getFrontBack())) {
query.setParameter(MesExtConstWords.FRONT_BACK, model.getFrontBack());
}
if (!StringUtils.isEmpty(model.getDefectTypeName())) {
query.setParameter(MesExtConstWords.DEFECT_TYPE_NAME, MesExtConstWords.PERCENT + model.getDefectTypeName() + MesExtConstWords.PERCENT);
}
if (!StringUtils.isEmpty(model.getUmlgo())) {
query.setParameter(MesExtConstWords.UMLGO, model.getUmlgo());
}
if (!StringUtils.isEmpty(model.getTaskStatus())) {
query.setParameter(MesExtConstWords.TASK_STATUS, model.getTaskStatus());
}
if (!StringUtils.isEmpty(model.getModifyUser())) {
query.setParameter(MesExtConstWords.MODIFY_USER, MesExtConstWords.PERCENT + model.getModifyUser() + MesExtConstWords.PERCENT);
}
if (!StringUtils.isEmpty(model.getReworkOrder())) {
query.setParameter(MesExtConstWords.REWORK_ORDER, MesExtConstWords.PERCENT + model.getReworkOrder() + MesExtConstWords.PERCENT);
}
if (!StringUtils.isEmpty(model.getPartTypeCode())) {
query.setParameter(MesExtConstWords.PART_TYPE_CODE, MesExtConstWords.PERCENT + model.getPartTypeCode() + MesExtConstWords.PERCENT);
}
}
}

@ -0,0 +1,283 @@
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl.report;
import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesProductionRecordReportExtDao;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProductionRecordReportExtModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
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 cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.ArrayList;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : wangjie
* @CreateDate : 2024/9/29 10:21
* @Modify:
**/
@Slf4j
@Service
public class MesProductionRecordReportExtDao implements IMesProductionRecordReportExtDao {
@Autowired
private EntityManager entityManager;
@Override
public ListPager<MesProductionRecordReportExtModel> queryProductionRecordUnionWorkOrderLogReport(
MesProductionRecordReportExtModel model, Pager pager, List<Integer> reportStatusList2Pr, List<Integer> reportStatusList2Wo) {
List<MesProductionRecordReportExtModel> resultList = new ArrayList<>();
StringBuilder queryHql = new StringBuilder();
StringBuilder countHql = new StringBuilder();
StringBuilder unionQueryHql = new StringBuilder();
StringBuilder countQueryHql = new StringBuilder();
StringBuilder prQueryHql = new StringBuilder();
StringBuilder woQueryHql = new StringBuilder();
StringBuilder endHql = new StringBuilder();
StringBuilder limitHql = new StringBuilder();
if (!CollectionUtils.isEmpty(reportStatusList2Pr) && !CollectionUtils.isEmpty(reportStatusList2Wo)) {
unionQueryHql.append("SELECT " +
" o.workCenterCode, " +
" o.workCellCode, " +
" o.partNo, " +
" o.partName, " +
" o.shiftCode, " +
" o.equipmentCode, " +
" o.equipmentName, " +
" o.reportStatus, " +
" o.dataSource, " +
" o.statisticsQty " +
" FROM " +
" (( ");
countQueryHql.append("SELECT count(1) " +
" FROM " +
" (( ");
} else {
countQueryHql.append("SELECT count(1) FROM ( ");
}
if (!CollectionUtils.isEmpty(reportStatusList2Pr)) {
prQueryHql.append("" +
" SELECT " +
" a.work_center_code AS workCenterCode, " +
" a.work_cell_code AS workCellCode, " +
" a.part_no AS partNo, " +
" a.part_name AS partName, " +
" a.shift_code AS shiftCode, " +
" a.equipment_code AS equipmentCode, " +
" a.equipment_name AS equipmentName, " +
" a.report_status AS reportStatus, " +
" 1 AS dataSource, " +
" SUM( qty ) AS statisticsQty " +
" FROM ");
prQueryHql.append(" mes_production_record a " +
" WHERE " +
" a.organize_code = :organizeCode " +
" AND a.is_deleted = :isDeleted " +
" AND a.is_valid = :isValid " +
" AND a.complete_date_time >= :completeDateTimeStart " +
" AND a.complete_date_time <= :completeDateTimeEnd ");
if (reportStatusList2Pr.size() == 1) {
prQueryHql.append(" AND a.report_status = :reportStatus ");
} else {
prQueryHql.append(" AND a.report_status in (:reportStatus) ");
}
if (!StringUtils.isEmpty(model.getPartNo())) {
prQueryHql.append(" AND a.part_no = :partNo ");
}
if (!StringUtils.isEmpty(model.getWorkCenterCode())) {
prQueryHql.append(" AND a.work_center_code = :workCenterCode ");
}
if (!StringUtils.isEmpty(model.getWorkCellCode())) {
prQueryHql.append(" AND a.work_cell_code = :workCellCode ");
}
if (!StringUtils.isEmpty(model.getShiftCode())) {
prQueryHql.append(" AND a.shift_code = :shiftCode ");
}
if (!StringUtils.isEmpty(model.getEquipmentCode())) {
prQueryHql.append(" AND a.equipment_code = :equipmentCode ");
}
prQueryHql.append(" GROUP BY " +
" a.work_center_code, " +
" a.work_cell_code, " +
" a.part_no, " +
" a.shift_code, " +
" a.report_status " +
" ORDER BY " +
" a.complete_date_time DESC ");
}
if (!CollectionUtils.isEmpty(reportStatusList2Pr) && !CollectionUtils.isEmpty(reportStatusList2Wo)) {
prQueryHql.append(" ) UNION ALL ( ");
}
if (!CollectionUtils.isEmpty(reportStatusList2Wo)) {
woQueryHql.append("" +
" SELECT " +
" b.work_center_code AS workCenterCode, " +
" ' ' AS workCellCode, " +
" b.part_no AS partNo, " +
" b.part_name AS partName, " +
" b.shift_code AS shiftCode, " +
" ' ' AS equipmentCode, " +
" ' ' AS equipmentName, " +
" b.type AS reportStatus, " +
" 2 AS dataSource, " +
" SUM( modify_qty ) AS statisticsQty " +
" FROM ");
woQueryHql.append(" mes_work_order_log b " +
" WHERE " +
" b.organize_code = :organizeCode " +
" AND b.is_deleted = :isDeleted " +
" AND b.is_valid = :isValid " +
" AND b.modify_date_time >= :completeDateTimeStart " +
" AND b.modify_date_time <= :completeDateTimeEnd ");
if (reportStatusList2Wo.size() == 1) {
woQueryHql.append(" AND b.type = :messageType ");
} else {
woQueryHql.append(" AND b.type in (:messageType) ");
}
if (!StringUtils.isEmpty(model.getPartNo())) {
woQueryHql.append(" AND b.part_no = :partNo ");
}
if (!StringUtils.isEmpty(model.getWorkCenterCode())) {
woQueryHql.append(" AND b.work_center_code = :workCenterCode ");
}
if (!StringUtils.isEmpty(model.getShiftCode())) {
woQueryHql.append(" AND b.shift_code = :shiftCode ");
}
woQueryHql.append(" GROUP BY " +
" b.work_center_code, " +
" b.part_no, " +
" b.shift_code " +
" ORDER BY " +
" b.modify_date_time DESC ");
}
if (!CollectionUtils.isEmpty(reportStatusList2Pr) && !CollectionUtils.isEmpty(reportStatusList2Wo)) {
endHql.append(" )) AS o ");
} else {
endHql.append(" ) AS o ");
}
limitHql.append(" LIMIT :startRow , :pageSize ");
if (!CollectionUtils.isEmpty(reportStatusList2Pr) && !CollectionUtils.isEmpty(reportStatusList2Wo)) {
queryHql.append(unionQueryHql).append(prQueryHql).append(woQueryHql).append(endHql).append(limitHql);
countHql.append(countQueryHql).append(prQueryHql).append(woQueryHql).append(endHql);
} else {
if (!CollectionUtils.isEmpty(reportStatusList2Pr)) {
queryHql.append(prQueryHql).append(limitHql);
countHql.append(countQueryHql).append(prQueryHql).append(endHql);
} else {
queryHql.append(woQueryHql).append(limitHql);
countHql.append(countQueryHql).append(woQueryHql).append(endHql);
}
}
// log.info("queryHql: --- {}", queryHql.toString());
// log.info("countHql: --- {}", countHql.toString());
Query dataQuery = entityManager.createNativeQuery(queryHql.toString());
setQueryParams(dataQuery, model, reportStatusList2Pr, reportStatusList2Wo, pager);
Query countQuery = entityManager.createNativeQuery(countHql.toString());
setQueryParams(countQuery, model, reportStatusList2Pr, reportStatusList2Wo, null);
Object o = countQuery.getSingleResult();
int count = Integer.parseInt(o.toString());
List list = dataQuery.getResultList();
if (!CollectionUtils.isEmpty(list)) {
for (Object object : list) {
if (null == object) continue;
Object[] objectArr = (Object[]) object;
if (null == objectArr || objectArr.length != 10) continue;
MesProductionRecordReportExtModel result = new MesProductionRecordReportExtModel(
objectArr[0], objectArr[1], objectArr[2], objectArr[3], objectArr[4], objectArr[5], objectArr[6], objectArr[7], objectArr[8], objectArr[9]);
if (!StringUtils.isEmpty(result.getDataSource()) && !StringUtils.isEmpty(result.getReportStatus())) {
if (result.getDataSource().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) {
if (result.getReportStatus().compareTo(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()) == 0) result.setReportStatusName(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getDescription());
else result.setReportStatusName(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getDescription());
} else {
result.setReportStatusName(MesExtEnumUtil.WORK_ORDER_LOG_TYPE.valueOfDescription(result.getReportStatus()));
}
}
resultList.add(result);
}
}
pager = PagerHelper.getPager(pager, count);
return new ListPager(resultList, pager);
}
private void setQueryParams(Query query, MesProductionRecordReportExtModel model, List<Integer> reportStatusList2Pr, List<Integer> reportStatusList2Wo, Pager pager) {
query.setParameter(MesExtConstWords.ORGANIZE_CODE, model.getOrganizeCode());
query.setParameter(MesExtConstWords.IS_DELETED, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
query.setParameter(MesExtConstWords.IS_VALID, CommonEnumUtil.IS_VAILD.VAILD.getValue());
query.setParameter(MesExtConstWords.COMPLETE_DATE_TIME_START, model.getCompleteDateTimeStart());
query.setParameter(MesExtConstWords.COMPLETE_DATE_TIME_END, model.getCompleteDateTimeEnd());
if (!CollectionUtils.isEmpty(reportStatusList2Pr)) {
if (reportStatusList2Pr.size() == 1) {
query.setParameter(MesExtConstWords.REPORT_STATUS, reportStatusList2Pr.get(0));
} else {
query.setParameter(MesExtConstWords.REPORT_STATUS, reportStatusList2Pr);
}
}
if (!CollectionUtils.isEmpty(reportStatusList2Wo)) {
if (reportStatusList2Wo.size() == 1) {
query.setParameter(MesExtConstWords.MESSAGE_TYPE, reportStatusList2Wo.get(0));
} else {
query.setParameter(MesExtConstWords.MESSAGE_TYPE, reportStatusList2Wo);
}
}
if (!StringUtils.isEmpty(model.getPartNo())) {
query.setParameter(MesExtConstWords.PART_NO, model.getPartNo());
}
if (!StringUtils.isEmpty(model.getWorkCenterCode())) {
query.setParameter(MesExtConstWords.WORK_CENTER_CODE, model.getWorkCenterCode());
}
if (!StringUtils.isEmpty(model.getWorkCellCode())) {
query.setParameter(MesExtConstWords.WORK_CELL_CODE, model.getWorkCellCode());
}
if (!StringUtils.isEmpty(model.getShiftCode())) {
query.setParameter(MesExtConstWords.SHIFT_CODE, model.getShiftCode());
}
if (!StringUtils.isEmpty(model.getEquipmentCode())) {
query.setParameter(MesExtConstWords.EQUIPMENT_CODE, model.getEquipmentCode());
}
if (null != pager) {
Integer startRow = (pager.getCurrentPage() - 1) * pager.getPageSize();
query.setParameter("startRow", startRow);
query.setParameter("pageSize", pager.getPageSize());
}
}
}

@ -201,17 +201,18 @@ public class MesYfReportDaoImpl implements IMesYfReportDao {
private String getGeneralExportCommonHql(MesGeneralExportReportModel model) {
StringBuilder commonHql = new StringBuilder();
commonHql.append(" from MesWorkOrderAssembly orderAssembly left join MesWorkOrder workOrder on orderAssembly.workOrderNo = workOrder.workOrderNo and workOrder.organizeCode = :organizeCode and workOrder.isDeleted=:isDeleted and workOrder.isValid=:isValid");
commonHql.append(" left join MesProductionAssembly assembly on workOrder.custSn = assembly.custSn and orderAssembly.organizeCode=:organizeCode and orderAssembly.isDeleted=:isDeleted and orderAssembly.isValid=:isValid ");
commonHql.append(" left join MesProdRuleSortCfg sortCfg on orderAssembly.pid = sortCfg.id and sortCfg.organizeCode = :organizeCode and sortCfg.isDeleted=:isDeleted and sortCfg.isValid=:isValid");
commonHql.append(" left join MesPartType partType on sortCfg.partTypeCode = partType.partTypeCode and partType.organizeCode = :organizeCode and partType.isDeleted=:isDeleted and partType.isValid=:isValid");
commonHql.append(" from MesWorkOrderAssembly orderAssembly left join MesWorkOrder workOrder on workOrder.organizeCode = :organizeCode and workOrder.isDeleted=:isDeleted and workOrder.isValid=:isValid and orderAssembly.workOrderNo = workOrder.workOrderNo ");
commonHql.append(" left join MesProductionAssembly assembly on assembly.organizeCode=:organizeCode and assembly.isDeleted=:isDeleted and assembly.isValid=:isValid and workOrder.custSn = assembly.custSn and orderAssembly.assemblyPartNo = assembly.assemblyPartNo ");
commonHql.append(" left join MesProdRuleSortCfg sortCfg on sortCfg.organizeCode = :organizeCode and sortCfg.isDeleted=:isDeleted and sortCfg.isValid=:isValid and orderAssembly.pid = sortCfg.id and orderAssembly.assemblyPartNo = sortCfg.assemblyPartNo ");
commonHql.append(" left join MesPartType partType on partType.organizeCode = :organizeCode and partType.isDeleted=:isDeleted and partType.isValid=:isValid and sortCfg.partTypeCode = partType.partTypeCode ");
commonHql.append(" where orderAssembly.organizeCode=:organizeCode and orderAssembly.isDeleted=:isDeleted and orderAssembly.isValid=:isValid and workOrder.organizeCode = :organizeCode");
commonHql.append(" and workOrder.isDeleted=:isDeleted and workOrder.isValid=:isValid and assembly.organizeCode = :organizeCode and assembly.isDeleted=:isDeleted and assembly.isValid=:isValid");
commonHql.append(" and sortCfg.organizeCode = :organizeCode and sortCfg.isDeleted=:isDeleted and sortCfg.isValid=:isValid and partType.organizeCode = :organizeCode and partType.isDeleted=:isDeleted and partType.isValid=:isValid ");
commonHql.append(" and partType.assemblyDescription = '通用追溯' and workOrder.workOrderStatus in (:workOrderStatus) ");
commonHql.append(" and assembly.assemblySn != '' and assembly.assemblySn is not null ");
if (!StringUtils.isEmpty(model.getWorkCenterCode())) commonHql.append(" and workOrder.workCenterCode like '%").append(model.getWorkCenterCode()).append("%' ");
if (!StringUtils.isEmpty(model.getCustSn())) commonHql.append(" and orderAssembly.custSn like '%").append(model.getCustSn()).append("%' ");
if (!StringUtils.isEmpty(model.getAssemblySn())) commonHql.append(" and orderAssembly.assemblySn like '%").append(model.getAssemblySn()).append("%' ");
if (!StringUtils.isEmpty(model.getCustSn())) commonHql.append(" and workOrder.custSn like '%").append(model.getCustSn()).append("%' ");
if (!StringUtils.isEmpty(model.getAssemblySn())) commonHql.append(" and assembly.assemblySn like '%").append(model.getAssemblySn()).append("%' ");
if (!StringUtils.isEmpty(model.getWorkOrderNo())) commonHql.append(" and workOrder.workOrderNo like '%").append(model.getWorkOrderNo()).append("%' ");
if (!StringUtils.isEmpty(model.getShippingTimeStart())) commonHql.append(" and workOrder.shippingTime >= :shippingTimeStart ");
if (!StringUtils.isEmpty(model.getShippingTimeEnd())) commonHql.append(" and workOrder.shippingTime <= :shippingTimeEnd ");

@ -103,6 +103,15 @@ public class ShipmentDetailReportDaoImpl implements IShipmentDetailReportDao {
commonQueryHql.append("AND ms.isValid = :isValid ");
// 动态添加其他查询条件
if (!StringUtils.isEmpty(model.getVin())) {
commonQueryHql.append("AND momd.vin like :vin ");
}
if (!StringUtils.isEmpty(model.getCustOrderNo())) {
commonQueryHql.append("AND momd.custOrderNo like :custOrderNo ");
}
if (!StringUtils.isEmpty(model.getBarCode())) {
commonQueryHql.append("AND momd.barcode like :barcode ");
}
if (!StringUtils.isEmpty(model.getShippingCode())) {
commonQueryHql.append("AND ms.shippingCode like :shippingCode ");
}
@ -118,6 +127,9 @@ public class ShipmentDetailReportDaoImpl implements IShipmentDetailReportDao {
if (!StringUtils.isEmpty(model.getCustCode())) {
commonQueryHql.append("AND ms.custCode like :custCode ");
}
if (!StringUtils.isEmpty(model.getShippingGroupName())) {
commonQueryHql.append("AND ms.shippingGroupName like :shippingGroupName ");
}
if (!StringUtils.isEmpty(model.getCustOrganizeCode())) {
commonQueryHql.append("AND ms.custOrganizeCode = :custOrganizeCode ");
}
@ -152,6 +164,16 @@ public class ShipmentDetailReportDaoImpl implements IShipmentDetailReportDao {
dataQuery.setParameter("organizeCode", model.getOrganizeCode());
dataQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
dataQuery.setParameter("isValid", CommonEnumUtil.IS_VAILD.VAILD.getValue());
if (!StringUtils.isEmpty(model.getVin())) {
dataQuery.setParameter("vin", model.getVin() + "%");
}
if (!StringUtils.isEmpty(model.getCustOrderNo())) {
dataQuery.setParameter("custOrderNo", model.getCustOrderNo() + "%");
}
if (!StringUtils.isEmpty(model.getBarCode())) {
dataQuery.setParameter("barcode", model.getBarCode() + "%");
}
if (!StringUtils.isEmpty(model.getShippingCode())) {
dataQuery.setParameter("shippingCode", model.getShippingCode() + "%");
}
@ -167,6 +189,9 @@ public class ShipmentDetailReportDaoImpl implements IShipmentDetailReportDao {
if (!StringUtils.isEmpty(model.getCustCode())) {
dataQuery.setParameter("custCode", model.getCustCode() + "%");
}
if (!StringUtils.isEmpty(model.getShippingGroupName())) {
dataQuery.setParameter("shippingGroupName", "%" + model.getShippingGroupName() + "%");
}
if (!StringUtils.isEmpty(model.getCustOrganizeCode())) {
dataQuery.setParameter("custOrganizeCode", model.getCustOrganizeCode());
}

@ -23,7 +23,7 @@ public class MesAssemblyNosortCfgService extends BaseMesService<MesAssemblyNosor
for (MesAssemblyNosortCfg item : beanList) {
// 数据校验
ValidatorBean.checkNotNull(item.getPid(), "非排序加工规则ID");
ValidatorBean.checkNotNull(item.getPid(), "非排序加工规则ID不能为空");
ValidatorBean.checkNotNull(item.getAssemblyPartNo(), "原料零件号不能为空");
}

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesBomService;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesBomDao;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.model.MesBomTreeModel;
@ -15,6 +16,7 @@ import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesBom;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
@ -23,6 +25,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
@ -34,9 +37,12 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
@Autowired
private IMesBomDao mesBomDao;
@Autowired
private IMesConfigService mesConfigService;
protected void setPackQueryBean(MesBom bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getBomVersion(), "bomVersion", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getBomVersion(), MesExtConstWords.BOM_VERSION, packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), MesExtConstWords.PART_NO, packBean);
}
@Override
@ -60,7 +66,7 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
organize.setName("LML");
// organize.setName(AuthUtil.getOrganize().getName());
List<MesBom> bomList = baseRDao.findByProperty(new String[]{MesConstWords.IS_VALID, MesConstWords.IS_DELETED, MesConstWords.ORGANIZE_CODE, "partNo"},
List<MesBom> bomList = baseRDao.findByProperty(new String[]{MesConstWords.IS_VALID, MesConstWords.IS_DELETED, MesConstWords.ORGANIZE_CODE, MesExtConstWords.PART_NO},
new Object[]{CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue(), bom.getOrganizeCode(), bom.getPartNo()});
if (!CollectionUtils.isEmpty(bomList)) {
@ -84,13 +90,19 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
organize.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue());
organize.setName(AuthUtil.getOrganize().getName());
//organize.setName("zxw");
DdlPackBean packBean = DdlPackBean.getDdlPackBean(bom.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bom.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomVersion(), "bomVersion", packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomCode(), "bomCode", packBean);
DdlPreparedPack.getStringSmallerPack(bom.getEffStartTime(), "effStartTime", packBean);
DdlPreparedPack.getStringEqualPack(bom.getPartNo(), MesExtConstWords.PART_NO, packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomVersion(), MesExtConstWords.BOM_VERSION, packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomCode(), MesExtConstWords.BOM_CODE, packBean);
DdlPreparedPack.getStringSmallerPack(bom.getEffStartTime(), MesExtConstWords.EFF_START_TIME, packBean);
String sql = " and (model.effEndTime = '' or model.effEndTime is null or model.effEndTime >= '" + bom.getEffStartTime() + "' )" ;
packBean.setWhereAppend(packBean.getWhereAppend() + sql);
packBean.setOrderByStr(" order by createDatetime desc ");
pager = PagerHelper.getPager(pager, baseRDao.findByHqlWhereCount(packBean));
List<MesBom> bomList = baseRDao.findByHqlWherePage(packBean, pager);
@ -116,10 +128,10 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
organize.setName(AuthUtil.getOrganize().getName());
//organize.setName("zxw");
DdlPackBean packBean = DdlPackBean.getDdlPackBean(bom.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bom.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomVersion(), "bomVersion", packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomCode(), "bomCode", packBean);
DdlPreparedPack.getStringSmallerPack(bom.getEffStartTime(), "effStartTime", packBean);
DdlPreparedPack.getStringEqualPack(bom.getPartNo(), MesExtConstWords.PART_NO, packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomVersion(), MesExtConstWords.BOM_VERSION, packBean);
DdlPreparedPack.getStringEqualPack(bom.getBomCode(), MesExtConstWords.BOM_CODE, packBean);
DdlPreparedPack.getStringSmallerPack(bom.getEffStartTime(), MesExtConstWords.EFF_START_TIME, packBean);
packBean.setOrderByStr(" order by createDatetime desc ");
pager = PagerHelper.getPager(pager, baseRDao.findByHqlWhereCount(packBean));
@ -131,12 +143,13 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
return new ListPager<>(list, pager);
}
//报表使用的方法
public List<MesBom> findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion, String bomCode, String effStartTime) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", ddlPackBean);
DdlPreparedPack.getStringSmallerPack(effStartTime, "effStartTime", ddlPackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomVersion, MesExtConstWords.BOM_VERSION, ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomCode, MesExtConstWords.BOM_CODE, ddlPackBean);
DdlPreparedPack.getStringSmallerPack(effStartTime, MesExtConstWords.EFF_START_TIME, ddlPackBean);
DdlPreparedPack.getOrderBy(null, null, ddlPackBean);
List<MesBom> mesBoms = baseRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesBoms)) {
@ -145,19 +158,33 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
return mesBoms;
}
//生产汇报使用的方法
public List<MesBom> findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion) {
//MES汇报查询BOM是否携带结束查询条件
MesConfig config = mesConfigService.getCfgValueByCode(organizeCode, MesExtConstWords.MES_REPORT_FIND_BOM_WITH_EFFENDTIME);
Boolean isWithEffEndTime = (null != config && !StringUtils.isEmpty(config.getCfgValue()) && config.getCfgValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? true : false;
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", ddlPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", ddlPackBean);
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean);
List<MesBom> mesBoms = baseRDao.findByHqlWhere(ddlPackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, ddlPackBean);
if (!StringUtils.isEmpty(bomVersion)) {
DdlPreparedPack.getStringEqualPack(bomVersion, MesExtConstWords.BOM_VERSION, ddlPackBean);
}
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_START_TIME, ddlPackBean);
if (isWithEffEndTime) DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_END_TIME, ddlPackBean);
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean);
List<MesBom> mesBoms = baseRDao.findByHqlTopWhere(ddlPackBean,1);
if (CollectionUtils.isEmpty(mesBoms)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", partNo, bomVersion);
}
MesBom next = mesBoms.iterator().next();
//如果存在多个bomCode取最新的一个
return mesBoms.stream().collect(Collectors.groupingBy(t -> t.getBomCode() + t.getEffStartTime())).get(next.getBomCode() + next.getEffStartTime());
MesBom mesBom = mesBoms.get(0);
String bomCode = mesBom.getBomCode();
String effStartTime = mesBom.getEffStartTime();
DdlPackBean ddlPackBean1= DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, ddlPackBean1);
DdlPreparedPack.getStringEqualPack(bomCode, MesExtConstWords.BOM_CODE, ddlPackBean1);
DdlPreparedPack.getStringSmallerPack(effStartTime, MesExtConstWords.EFF_START_TIME, ddlPackBean1);
return baseRDao.findByHqlWhere(ddlPackBean1);
}
@Override
@ -202,8 +229,28 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
@Override
public MesBom findBom(String organizeCode, String bomVersion, String partNo) {
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean);
DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", bomPackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomPackBean);
if (bomVersion != null){
DdlPreparedPack.getStringEqualPack(bomVersion, MesExtConstWords.BOM_VERSION, bomPackBean);
}
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomPackBean);
List<MesBom> bomList = this.baseRDao.findByHqlTopWhere(bomPackBean,1);
return bomList.isEmpty() ? null : bomList.get(0);
}
@Override
public MesBom findBom(String organizeCode, String partNo) {
//MES汇报查询BOM是否携带结束查询条件
MesConfig config = mesConfigService.getCfgValueByCode(organizeCode, MesExtConstWords.MES_REPORT_FIND_BOM_WITH_EFFENDTIME);
Boolean isWithEffEndTime = (null != config && !StringUtils.isEmpty(config.getCfgValue()) && config.getCfgValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? true : false;
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_START_TIME, bomPackBean);
if (isWithEffEndTime){
DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_END_TIME, bomPackBean);
}
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomPackBean);
List<MesBom> bomList = this.baseRDao.findByHqlTopWhere(bomPackBean,1);
return bomList.isEmpty() ? null : bomList.get(0);
}
@ -212,8 +259,8 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
public List<MesBom> queryMesBomReverse(MesBom mesBom) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesBom.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesBom.getPartNo(), "itemPartNo", packBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", packBean);
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), packBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_START_TIME, packBean);
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), packBean);
List<MesBom> mesBomList = baseRDao.findByHqlWhere(packBean);
if(CollectionUtils.isEmpty(mesBomList)){
return new ArrayList<>();
@ -234,8 +281,8 @@ public class MesBomService extends BaseMesService<MesBom> implements IMesBomServ
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "itemPartNo", packBean);
DdlPreparedPack.getStringEqualPack("X", "partType", packBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", packBean);
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), packBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_START_TIME, packBean);
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), packBean);
List<MesBom> mesBomList = baseRDao.findByHqlWhere(packBean);
if(CollectionUtils.isEmpty(mesBomList)) return;
Map<String, List<MesBom>> mesBomMap = mesBomList.stream().collect(Collectors.groupingBy(bom -> bom.getPartNo() + bom.getItemPartNo()));

@ -0,0 +1,9 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesCimGmCbrRuleService;
import cn.estsh.i3plus.pojo.mes.bean.MesCimGmCbrRule;
import org.springframework.stereotype.Service;
@Service
public class MesCimGmCbrRuleServiceImpl extends BaseMesService<MesCimGmCbrRule> implements IMesCimGmCbrRuleService {
}

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesEquipmentSpotCheckDetailService;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -37,9 +38,10 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipm
private MesEquipmentVariableRepository mesEquipmentVariableRepository;
protected void setPackQueryBean(MesEquipmentSpotCheckDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getNumEqualPack(bean.getPid(), "pid", packBean);
DdlPreparedPack.getNumEqualPack(bean.getPid(), MesExtConstWords.PID, packBean);
DdlPreparedPack.getStringLikerPack(bean.getSpotCheckItemCode(), "spotCheckItemCode", packBean);
DdlPreparedPack.getStringLikerPack(bean.getSpotCheckItemName(), "spotCheckItemName", packBean);
DdlPreparedPack.getStringLikerPack(bean.getEquipCode(), MesExtConstWords.EQUIP_CODE, packBean);
DdlPreparedPack.getNumEqualPack(bean.getDataType(), "dataType", packBean);
DdlPreparedPack.getNumEqualPack(bean.getSpotCheckItemType(), "spotCheckItemType", packBean);
//43100 设备点检设置明细导入完成后,期望序列号可以正排
@ -53,7 +55,7 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipm
ValidatorBean.checkNotNull(item.getSpotCheckItemCode(), "点检项代码不能为空");
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), "pid", roadPackBean);
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.PID, roadPackBean);
DdlPreparedPack.getStringEqualPack(item.getSpotCheckItemCode(), "spotCheckItemCode", roadPackBean);
boolean flg = baseRDao.isExitByHql(roadPackBean);
if (flg) {
@ -63,6 +65,19 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipm
.setErrorDetail("点检项代码【%s】已经存在请检查数据", item.getSpotCheckItemCode())
.build();
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.ID, packBean);
MesEquipmentSpotCheck equipmentSpotCheck = equipmentSpotCheckRepository.getByProperty(packBean);
if (null == equipmentSpotCheck) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("点检方案ID【%s】信息不存在请检查数据", item.getPid())
.build();
}
item.setEquipCode(equipmentSpotCheck.getEquipCode());
}
@Override
@ -71,9 +86,9 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipm
ValidatorBean.checkNotNull(item.getSpotCheckItemCode(), "点检项代码不能为空");
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), "pid", roadPackBean);
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.PID, roadPackBean);
DdlPreparedPack.getStringEqualPack(item.getSpotCheckItemCode(), "spotCheckItemCode", roadPackBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", roadPackBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), MesExtConstWords.ID, roadPackBean);
boolean flg = baseRDao.isExitByHql(roadPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
@ -82,6 +97,19 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipm
.setErrorDetail("点检项代码【%s】已经存在请检查数据", item.getSpotCheckItemCode())
.build();
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.ID, packBean);
MesEquipmentSpotCheck equipmentSpotCheck = equipmentSpotCheckRepository.getByProperty(packBean);
if (null == equipmentSpotCheck) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("点检方案ID【%s】信息不存在请检查数据", item.getPid())
.build();
}
item.setEquipCode(equipmentSpotCheck.getEquipCode());
}
@Override
public void validateImport(List<MesEquipmentSpotCheckDetail> beanList) {
@ -91,7 +119,7 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipm
ValidatorBean.checkNotNull(item.getSpotCheckItemCode(), "点检项代码不能为空");
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), "pid", roadPackBean);
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.PID, roadPackBean);
DdlPreparedPack.getStringEqualPack(item.getSpotCheckItemCode(), "spotCheckItemCode", roadPackBean);
boolean flg = baseRDao.isExitByHql(roadPackBean);
if (flg) {
@ -101,6 +129,19 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipm
.setErrorDetail("点检项代码【%s】已经存在请检查数据", item.getSpotCheckItemCode())
.build();
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.ID, packBean);
MesEquipmentSpotCheck equipmentSpotCheck = equipmentSpotCheckRepository.getByProperty(packBean);
if (null == equipmentSpotCheck) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("点检方案ID【%s】信息不存在请检查数据", item.getPid())
.build();
}
item.setEquipCode(equipmentSpotCheck.getEquipCode());
}
}
@Override
@ -125,19 +166,33 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService<MesEquipm
.build();
}
item.setPid(itemFlg.getId());
item.setEquipCode(itemFlg.getEquipCode());
}else {
ValidatorBean.checkNotNull(item.getId(), "点检项目id不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean);
DdlPreparedPack.getNumEqualPack(item.getId(), MesExtConstWords.ID, seriesPackBean);
if (!baseRDao.isExitByHql(seriesPackBean)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("【%s】点检项目id不存在请检查数据", item.getPid())
.setErrorDetail("【%s】点检项目id不存在请检查数据", item.getId())
.build();
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.ID, packBean);
MesEquipmentSpotCheck equipmentSpotCheck = equipmentSpotCheckRepository.getByProperty(packBean);
if (null == equipmentSpotCheck) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("点检方案ID【%s】信息不存在请检查数据", item.getPid())
.build();
}
item.setEquipCode(equipmentSpotCheck.getEquipCode());
}
//实际值地址id
if (!Objects.isNull(variableMap) && !StringUtil.isEmpty(item.getRealValueAddress()) && variableMap.containsKey(item.getRealValueAddress())) {

@ -5,13 +5,18 @@ import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheck;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheckPart;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentSpotCheckRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -25,37 +30,85 @@ public class MesEquipmentSpotCheckPartService extends BaseMesService<MesEquipmen
@Autowired
private MesEquipmentSpotCheckRepository equipmentSpotCheckRepository;
@Autowired
private MesPartRepository mesPartRepository;
@Override
protected void setPackQueryBean(MesEquipmentSpotCheckPart bean, DdlPackBean packBean) {
DdlPreparedPack.getNumEqualPack(bean.getPid(), "pid", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);
DdlPreparedPack.getNumEqualPack(bean.getPid(), MesExtConstWords.PID, packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), MesExtConstWords.PART_NO, packBean);
DdlPreparedPack.getStringLikerPack(bean.getEquipCode(), MesExtConstWords.EQUIP_CODE, packBean);
}
@Override
public void validateImport(List<MesEquipmentSpotCheckPart> beanList) {
protected void onInsertBean(MesEquipmentSpotCheckPart item) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.ID, packBean);
MesEquipmentSpotCheck equipmentSpotCheck = equipmentSpotCheckRepository.getByProperty(packBean);
if (null == equipmentSpotCheck) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("点检方案ID【%s】信息不存在请检查数据", item.getPid())
.build();
}
item.setEquipCode(equipmentSpotCheck.getEquipCode());
}
@Override
protected void onUpdateBean(MesEquipmentSpotCheckPart item) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.ID, packBean);
MesEquipmentSpotCheck equipmentSpotCheck = equipmentSpotCheckRepository.getByProperty(packBean);
if (null == equipmentSpotCheck) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("点检方案ID【%s】信息不存在请检查数据", item.getPid())
.build();
}
item.setEquipCode(equipmentSpotCheck.getEquipCode());
}
@Override
public void validateImport(List<MesEquipmentSpotCheckPart> beanList) {
String organizeCode = AuthUtil.getOrganizeCode();
for (MesEquipmentSpotCheckPart item : beanList) {
// 数据校验
if (StringUtil.isEmpty(item.getPid())) {
ValidatorBean.checkNotNull(item.getSpotCheckCode(), "点检项目代码不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getSpotCheckCode(), "spotCheckCode", seriesPackBean);
MesEquipmentSpotCheck itemFlg = equipmentSpotCheckRepository.getByProperty(seriesPackBean);
if (StringUtil.isEmpty(itemFlg)) {
MesException.throwMesBusiException("点检项目代码【%s】不存在请检查数据", item.getSpotCheckCode());
}
item.setPid(itemFlg.getId());
item.setEquipCode(itemFlg.getEquipCode());
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getPartNo(), MesExtConstWords.PART_NO, partPackBean);
MesPart mesPart = mesPartRepository.getByProperty(partPackBean);
if (mesPart == null) {
MesException.throwMesBusiException("零件号【%s】不存在", item.getPartNo());
}
item.setPartName(mesPart.getPartName());
} else {
ValidatorBean.checkNotNull(item.getPid(), "点检项目id不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), "id", seriesPackBean);
if (!equipmentSpotCheckRepository.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("点检项目id【%s】不存在请检查数据", item.getPid());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.ID, packBean);
MesEquipmentSpotCheck equipmentSpotCheck = equipmentSpotCheckRepository.getByProperty(packBean);
if (null == equipmentSpotCheck) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("点检方案ID【%s】信息不存在请检查数据", item.getPid())
.build();
}
item.setEquipCode(equipmentSpotCheck.getEquipCode());
}
item.setId(null);
item.setSystemSyncStatus(CommonEnumUtil.FALSE);
@ -79,15 +132,22 @@ public class MesEquipmentSpotCheckPartService extends BaseMesService<MesEquipmen
MesException.throwMesBusiException("点检项目代码【%s】不存在请检查数据", item.getSpotCheckCode());
}
item.setPid(itemFlg.getId());
item.setEquipCode(itemFlg.getEquipCode());
} else {
ValidatorBean.checkNotNull(item.getPid(), "点检项目id不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), "id", seriesPackBean);
if (!equipmentSpotCheckRepository.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("点检项目id【%s】不存在请检查数据", item.getPid());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(item.getPid(), MesExtConstWords.ID, packBean);
MesEquipmentSpotCheck equipmentSpotCheck = equipmentSpotCheckRepository.getByProperty(packBean);
if (null == equipmentSpotCheck) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("点检方案ID【%s】信息不存在请检查数据", item.getPid())
.build();
}
item.setEquipCode(equipmentSpotCheck.getEquipCode());
}
}
return beanList;

@ -2,13 +2,22 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesPackingDefineDetailsService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefineDetails;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Description :
* @Reference :
@ -20,6 +29,9 @@ import org.springframework.stereotype.Service;
@Slf4j
public class MesPackingDefineDetailsServiceImpl extends BaseMesService<MesPackingDefineDetails> implements IMesPackingDefineDetailsService {
@Autowired
private MesPartRepository mesPartRepository;
@Override
protected void setPackQueryBean(MesPackingDefineDetails bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getPackCode(), "packCode", packBean);
@ -59,4 +71,35 @@ public class MesPackingDefineDetailsServiceImpl extends BaseMesService<MesPackin
MesException.throwMesBusiException("箱类别代号【%s】物料号【%s】已经存在请检查数据", item.getPackCode(),item.getPartNo());
}
}
@Override
public List<MesPackingDefineDetails> validateReturnImport(List<MesPackingDefineDetails> beanList) {
for (MesPackingDefineDetails item : beanList) {
String organizeCode = AuthUtil.getOrganizeCode();
// 数据校验
ValidatorBean.checkNotNull(item.getPackCode(), "箱类别代号不能为空");
ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空");
DdlPackBean partQueryPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringLikerPack(item.getPartNo(), "partNo", partQueryPackBean);
MesPart mesPart = mesPartRepository.getByProperty(partQueryPackBean);
if (mesPart == null) {
MesException.throwMesBusiException("物料号【%s】不存在请检查数据",item.getPartNo());
}
item.setPartName(mesPart.getPartName());
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPackCode(), "packCode", roadPackBean);
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", roadPackBean);
boolean flg = baseRDao.isExitByHql(roadPackBean);
if (flg) {
MesException.throwMesBusiException("箱类别代号【%s】物料号【%s】已经存在请检查数据", item.getPackCode(),item.getPartNo());
}
}
return beanList;
}
}

@ -0,0 +1,22 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesPackingRuleDetailService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class MesPackingRuleDetailService extends BaseMesService<MesPackingRuleDetail> implements IMesPackingRuleDetailService {
@Override
protected void setPackQueryBean(MesPackingRuleDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getPackageCode(), MesExtConstWords.PACKAGE_CODE, packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), MesExtConstWords.PART_NO, packBean);
DdlPreparedPack.getStringEqualPack(bean.getPartType(), MesExtConstWords.PART_TYPE, packBean);
}
}

@ -0,0 +1,26 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesPackingRuleService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class MesPackingRuleService extends BaseMesService<MesPackingRule> implements IMesPackingRuleService {
@Override
protected void setPackQueryBean(MesPackingRule bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getPackageCode(), MesExtConstWords.PACKAGE_CODE, packBean);
DdlPreparedPack.getNumEqualPack(bean.getDefaultFlag(), MesExtConstWords.DEFAULT_FLAG, packBean);
DdlPreparedPack.getNumEqualPack(bean.getGenerateType(), MesExtConstWords.GENERATE_TYPE, packBean);
DdlPreparedPack.getStringLikerPack(bean.getPackCode(), MesExtConstWords.PACK_CODE, packBean);
DdlPreparedPack.getStringLikerPack(bean.getPackageBarcodeRule(), MesExtConstWords.PACKAGE_BARCODE_RULE, packBean);
DdlPreparedPack.getStringLikerPack(bean.getPackageTemplate(), MesExtConstWords.PACKAGE_TEMPLATE, packBean);
DdlPreparedPack.getStringLikerPack(bean.getPrinter(), MesExtConstWords.PRINTER, packBean);
}
}

@ -5,10 +5,16 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesDefectType;
import cn.estsh.i3plus.pojo.mes.bean.MesPartType;
import cn.estsh.i3plus.pojo.mes.bean.MesPartTypeDefect;
import cn.estsh.i3plus.pojo.mes.repository.MesDefectTypeRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartTypeRepository;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@ -17,6 +23,11 @@ import java.util.List;
@Slf4j
public class MesPartTypeDefectService extends BaseMesService<MesPartTypeDefect> implements IBaseMesService<MesPartTypeDefect> {
@Autowired
private MesPartTypeRepository partTypeRepository;
@Autowired
private MesDefectTypeRepository defectTypeRepository;
@Override
protected void setPackQueryBean(MesPartTypeDefect bean, DdlPackBean packBean) {
@ -87,4 +98,52 @@ public class MesPartTypeDefectService extends BaseMesService<MesPartTypeDefect>
}
}
}
@Override
public List<MesPartTypeDefect> validateReturnImport(List<MesPartTypeDefect> beanList) {
for (MesPartTypeDefect item : beanList) {
// 数据校验
ValidatorBean.checkNotNull(item.getDefectTypeCode(), "缺陷类型不能为空");
ValidatorBean.checkNotNull(item.getPartTypeCode(), "零件类型不能为空");
DdlPackBean roadPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getDefectTypeCode(), "defectTypeCode", roadPackBean);
DdlPreparedPack.getStringEqualPack(item.getPartTypeCode(), "partTypeCode", roadPackBean);
boolean flg = baseRDao.isExitByHql(roadPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("缺陷类型【%s】零件类型【%s】已经存在请检查数据", item.getDefectTypeCode(), item.getPartTypeCode())
.build();
}
DdlPackBean partTypePackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartTypeCode(), "partTypeCode", partTypePackBean);
MesPartType partType = partTypeRepository.getByProperty(partTypePackBean);
if (partType == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("零件类型【%s】不存在请检查数据", item.getPartTypeCode())
.build();
}
item.setPartTypeName(partType.getPartTypeName());
DdlPackBean defectTypePackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getDefectTypeCode(), "defectTypeCode", defectTypePackBean);
MesDefectType defectType = defectTypeRepository.getByProperty(defectTypePackBean);
if (defectType == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("缺陷类型【%s】不存在请检查数据", item.getDefectTypeCode())
.build();
}
item.setDefectTypeName(defectType.getDefectTypeName());
}
return beanList;
}
}

@ -4,18 +4,20 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.api.base.IMesProdCraftRouteService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.util.MesConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesCraftRoute;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdCraftRoute;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProdRouteCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -24,6 +26,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
@ -42,6 +45,8 @@ public class MesProdCraftRouteServiceImpl extends BaseMesService<MesProdCraftRou
@Autowired
private MesWorkCenterRepository mesWorkCenterRDao;
@Autowired
private MesPartRepository mesPartRepository;
@Autowired
private IMesPartService mesPartService;
@Autowired
private MesProdRouteCfgRepository mesProdRouteCfgRepository;
@ -61,7 +66,39 @@ public class MesProdCraftRouteServiceImpl extends BaseMesService<MesProdCraftRou
// 数据校验
checkData(item);
}
@Override
public List<MesProdCraftRoute> validateReturnImport(List<MesProdCraftRoute> beanList) {
if (CollectionUtils.isEmpty(beanList)) return beanList;
String organizeCode = AuthUtil.getOrganizeCode();
String userName = AuthUtil.getSessionUser().getUserName();
for (MesProdCraftRoute item : beanList) {
ValidatorBean.checkNotNull(item.getCraftRouteCode(), "工艺路线代码不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteName(), "工艺路线名称不能为空");
ValidatorBean.checkNotNull(item.getCraftRouteType(), "工艺路线类型不能为空");
DdlPackBean centePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(),"workCenterCode", centePackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(centePackBean);
if (mesWorkCenter == null) {
MesException.throwMesBusiException("产线代码【%s】不存在", item.getWorkCenterCode());
}
item.setAreaCode(mesWorkCenter.getAreaCode());
if (!StringUtils.isEmpty(item.getPartNo())) {
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getPartNo(),"partNo", partPackBean);
MesPart mesPart = mesPartRepository.getByProperty(partPackBean);
if (mesPart == null) {
MesException.throwMesBusiException("零件号【%s】不存在", item.getPartNo());
}
item.setPartName(mesPart.getPartName());
}
item.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(item, userName);
}
return beanList;
}
@Override
protected void onUpdateBean(MesProdCraftRoute item) {

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesEquitmentService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartSapService;
import cn.estsh.i3plus.ext.mes.api.base.IMesProdRuleNosortCfgService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesProdRuleNosortCfgDao;
@ -8,6 +9,7 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipment;
import cn.estsh.i3plus.pojo.mes.bean.MesPartSap;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
@ -19,6 +21,8 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@Slf4j
@ -30,14 +34,31 @@ public class MesProdRuleNosortCfgService extends BaseMesService<MesProdRuleNosor
@Autowired
private IMesPartSapService partSapService;
@Autowired
private IMesEquitmentService equitmentService;
@Override
protected void setPackQueryBean(MesProdRuleNosortCfg bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getInPartNo(), "inPartNo", packBean);
DdlPreparedPack.getStringLikerPack(bean.getInPartNoRule(), "inPartNoRule", packBean);
DdlPreparedPack.getStringLikerPack(bean.getOutPartNo(), "outPartNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getEquipmentCode(), "equipmentCode", packBean);
}
@Override
protected void setBeanModel(List<MesProdRuleNosortCfg> prodRuleNosortCfgList) {
if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) return;
List<MesEquipment> equipmentList = equitmentService.findAll(DdlPackBean.getDdlPackBean(prodRuleNosortCfgList.get(0).getOrganizeCode()));
Map<String, List<MesEquipment>> equipmentCodeMap = CollectionUtils.isEmpty(equipmentList) ? null :
equipmentList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipmentCode()))).collect(Collectors.groupingBy(MesEquipment::getEquipmentCode));
if (CollectionUtils.isEmpty(equipmentCodeMap)) return;
prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipmentCode()))).forEach(o -> {
if (equipmentCodeMap.containsKey(o.getEquipmentCode())) o.setEquipmentName(equipmentCodeMap.get(o.getEquipmentCode()).get(0).getEquipmentName());
});
}
@Override
public MesProdRuleNosortCfg insert(MesProdRuleNosortCfg bean) {
//插入前构造并校验数据
onInsertBean(bean);
@ -47,17 +68,9 @@ public class MesProdRuleNosortCfgService extends BaseMesService<MesProdRuleNosor
}
protected void onInsertBean(MesProdRuleNosortCfg item) {
// 数据校验
//ValidatorBean.checkNotNull(item.getInPartNo(), "进件零件号不能为空");
ValidatorBean.checkNotNull(item.getOutPartNo(), "产成零件号不能为空");
ValidatorBean.checkNotNull(item.getOutPartNo(), "设备不能为空");
ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
if (StringUtils.isEmpty(item.getInPartNo())) {
DdlPreparedPack.getStringEqualPack(item.getInPartNo(), "inPartNo", seriesPackBean);
}
DdlPreparedPack.getStringEqualPack(item.getOutPartNo(), "outPartNo", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", seriesPackBean);
if (!StringUtils.isEmpty(item.getInPartNo())) {
MesPartSap inPart = partSapService.getMesPartSapByPartNo(item.getInPartNo(), item.getOrganizeCode());
if (inPart == null) {
@ -78,57 +91,19 @@ public class MesProdRuleNosortCfgService extends BaseMesService<MesProdRuleNosor
.build();
}
}
boolean flg = baseRDao.isExitByHql(seriesPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("该非排序加工规则已存在,请检查数据")
.build();
}
}
protected void onUpdateBean(MesProdRuleNosortCfg item) {
ValidatorBean.checkNotNull(item.getOutPartNo(), "产成零件号不能为空");
ValidatorBean.checkNotNull(item.getOutPartNo(), "设备不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
if (StringUtils.isEmpty(item.getInPartNo())) {
DdlPreparedPack.getStringEqualPack(item.getInPartNo(), "inPartNo", seriesPackBean);
}
DdlPreparedPack.getStringEqualPack(item.getOutPartNo(), "outPartNo", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", seriesPackBean);
if (!StringUtils.isEmpty(item.getInPartNo())) {
MesPartSap inPart = partSapService.getMesPartSapByPartNo(item.getInPartNo(), item.getOrganizeCode());
if (inPart == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("进料零件号不存在,请检查数据")
.build();
}
}
if (!StringUtils.isEmpty(item.getOutPartNo())) {
MesPartSap outPart = partSapService.getMesPartSapByPartNo(item.getOutPartNo(), item.getOrganizeCode());
if (outPart == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产成零件号不存在,请检查数据")
.build();
}
}
}
protected void onUpdateBean(MesProdRuleNosortCfg item) { onInsertBean(item); }
@Override
public MesProdRuleNosortCfg findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode) {
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = mesProdRuleNosortCfgDao.findMesProdRuleNosortCfgByWorkCenterCode(workCenterCode, partNo, organizeCode);
if(CollectionUtils.isEmpty(prodRuleNosortCfgList)){
MesException.throwMesBusiException("产线【%s】产出零件【%s】对应的非排序工艺路线信息不存在",workCenterCode,partNo);
MesException.throwMesBusiException("产线【%s】产出零件【%s】对应的非排序产品加工规则配置不存在",workCenterCode,partNo);
}
return prodRuleNosortCfgList.iterator().next();
}
@Override
public void validateImport(List<MesProdRuleNosortCfg> beanList) {
@ -136,23 +111,6 @@ public class MesProdRuleNosortCfgService extends BaseMesService<MesProdRuleNosor
// 数据校验
ValidatorBean.checkNotNull(item.getOutPartNo(), "产成零件号不能为空");
ValidatorBean.checkNotNull(item.getEquipmentCode(), "设备不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
if (StringUtils.isEmpty(item.getInPartNo())) {
DdlPreparedPack.getStringEqualPack(item.getInPartNo(), "inPartNo", seriesPackBean);
}
DdlPreparedPack.getStringEqualPack(item.getOutPartNo(), "outPartNo", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getEquipmentCode(), "equipmentCode", seriesPackBean);
boolean flg = baseRDao.isExitByHql(seriesPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("该非排序加工规则已存在,请检查数据")
.build();
}
}
}
}

@ -64,7 +64,7 @@ public class MesQmsScrapService extends BaseMesService<MesQmsScrap> implements I
mesQmsScrap.setAsnNo("");
mesQmsScrap.setSource("MES");
double sum = mesPartInspections.stream().mapToDouble(MesPartInspection::getRejectQty).sum();
mesQmsScrap.setRejectQty((int) sum);
mesQmsScrap.setRejectQty(sum);
mesQmsScrap.setPartNo(keyPartNo);
mesQmsScrap.setPartName(next.getPartName());
String defectTypeName = mesPartInspectionDetails.stream().map(MesPartInspectionDetail::getDefectTypeName).collect(Collectors.joining(";"));

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesQmsSuspiciousService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
@ -153,28 +154,28 @@ public class MesQmsSuspiciousService extends BaseMesService<MesQmsSuspicious> im
//检验数量是全部数量汇总
double sumQty = mesPartInspections.stream().mapToDouble(MesPartInspection::getQty).sum();
mesQmsSuspicious.setInspectionQty((int) sumQty);
mesQmsSuspicious.setInspectionQty(sumQty);
//一次合格数 nc_status=10 inspection_status=10
double qualifiedQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue()
&& m.getInspectionStatus() == MesExtEnumUtil.PART_INSPECTION_STATUS.QUALIFIED.getValue()).mapToDouble(MesPartInspection::getQty).sum();
mesQmsSuspicious.setQualifiedQty((int) qualifiedQty);
mesQmsSuspicious.setQualifiedQty(qualifiedQty);
//不合格数 nc_status=10 inspection_status=20
double unqualifiedQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue()
&& m.getInspectionStatus() == MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue()).mapToDouble(MesPartInspection::getQty).sum();
mesQmsSuspicious.setUnqualifiedQty((int) unqualifiedQty);
mesQmsSuspicious.setUnqualifiedQty(unqualifiedQty);
//误判数量 nc_status=30 inspection_status=20
double misjudgmentQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.RELEASE.getValue()).mapToDouble(MesPartInspection::getQty).sum();
mesQmsSuspicious.setMisjudgmentQty((int) misjudgmentQty);
mesQmsSuspicious.setMisjudgmentQty(misjudgmentQty);
//一次报废数 nc_status=40 inspection_status=20
double scrappedQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue() && m.getInspectionStatus() == MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue()).mapToDouble(MesPartInspection::getQty).sum();
mesQmsSuspicious.setScrappedQty((int) scrappedQty);
mesQmsSuspicious.setScrappedQty(scrappedQty);
//返工合格数 nc_status=50 返工单 status=20
Integer reworkQualified = 0;
Double reworkQualified = new Double(0);
//返工pending创建返工单未处理
Integer reworkPending = 0;
Double reworkPending = new Double(0);
//返工数
Integer reworkQty = 0;
Double reworkQty = new Double(0);
List<MesPartInspectionDetail> mesPartInspectionDetails = new ArrayList<>();
for (MesPartInspection mesPartInspection : mesPartInspections) {
if (!StringUtil.isEmpty(idDetailListMap.get(mesPartInspection.getId()))) {
@ -188,21 +189,21 @@ public class MesQmsSuspiciousService extends BaseMesService<MesQmsSuspicious> im
if (!StringUtil.isEmpty(reworkTask)) {
//返工是否完成
if (reworkTask.getStatus() == MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue()) {
reworkQualified += mesPartInspection.getQty();
reworkQualified = MathOperation.add(reworkQualified, mesPartInspection.getQty());
} else {
reworkPending += mesPartInspection.getQty();
reworkPending = MathOperation.add(reworkPending, mesPartInspection.getQty());
}
} else {
reworkPending += mesPartInspection.getQty();
reworkPending = MathOperation.add(reworkPending, mesPartInspection.getQty());
}
reworkQty += mesPartInspection.getQty();
reworkQty = MathOperation.add(reworkQty, mesPartInspection.getQty());
}
}
mesQmsSuspicious.setReworkQty(reworkQty);
mesQmsSuspicious.setReworkQualified(reworkQualified);
mesQmsSuspicious.setReworkPending(reworkPending);
mesQmsSuspicious.setNcPending(0);
mesQmsSuspicious.setReworkScrapped(0);
mesQmsSuspicious.setNcPending(new Double(0));
mesQmsSuspicious.setReworkScrapped(new Double(0));
mesQmsSuspicious.setPartNo(key);
mesQmsSuspicious.setPartName(next.getPartName());
//缺陷分类缺陷数量JOSN格式:【批次&单件数量汇总时需要根据检验时间段合并】

@ -3,7 +3,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.*;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao;
import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.TestJob;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
@ -28,8 +27,6 @@ import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel;
import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.DateUtilExt;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -186,6 +183,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired
private EntityManager entityManager;
@Autowired
private MesPartProdGroupRepository mesPartProdGroupRao;
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
// 数据校验
@ -292,10 +292,23 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
DdlPreparedPack.getInPackList(Arrays.stream(bean.getWorkOrderStatusQuery().split(MesExtConstWords.COMMA)).map(Integer::parseInt).collect(Collectors.toList()), MesExtConstWords.WORK_ORDER_STATUS, packBean);
} else DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), MesExtConstWords.WORK_ORDER_STATUS, packBean);
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), MesExtConstWords.WORK_ORDER_TYPE, packBean);
DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, false);
DdlPreparedPack.timeBuilder(bean.getStartTimeStart(), bean.getStartTimeEnd(), MesExtConstWords.PLAN_START_TIME, packBean, false);
DdlPreparedPack.timeBuilder(bean.getEndTimeStart(), bean.getEndTimeEnd(), MesExtConstWords.PLAN_END_TIME, packBean, false);
packBean.setOrderByStr(" order by workOrderSeq desc, createDatetime desc, productSeq asc, workOrderNo asc ");
if (!StringUtils.isEmpty(bean.getCreateDateTimeStart()) || !StringUtils.isEmpty(bean.getCreateDateTimeEnd())) {
DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, false);
}
if (!StringUtils.isEmpty(bean.getStartTimeStart()) || !StringUtils.isEmpty(bean.getStartTimeEnd())) {
DdlPreparedPack.timeBuilder(bean.getStartTimeStart(), bean.getStartTimeEnd(), MesExtConstWords.PLAN_START_TIME, packBean, false);
}
if (!StringUtils.isEmpty(bean.getEndTimeStart()) || !StringUtils.isEmpty(bean.getEndTimeEnd())) {
DdlPreparedPack.timeBuilder(bean.getEndTimeStart(), bean.getEndTimeEnd(), MesExtConstWords.PLAN_END_TIME, packBean, false);
}
if (!StringUtils.isEmpty(bean.getOnlineTimeStart()) || !StringUtils.isEmpty(bean.getOnlineTimeEnd())) {
DdlPreparedPack.timeBuilder(bean.getOnlineTimeStart(), bean.getOnlineTimeEnd(), MesExtConstWords.ONLINE_TIME, packBean, false);
}
if (!StringUtils.isEmpty(bean.getOfflineTimeStart()) || !StringUtils.isEmpty(bean.getOfflineTimeEnd())) {
DdlPreparedPack.timeBuilder(bean.getOfflineTimeStart(), bean.getOfflineTimeEnd(), MesExtConstWords.OFFLINE_TIME, packBean, false);
}
packBean.setOrderByStr(" order by createDatetime desc, productSeq desc ");
}
@Override
@ -506,7 +519,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) {
//获取生产版本
mesProductVersion = getMesProductVersion(item.getOrganizeCode(),item.getPartNo());
item.setProductVersion(mesProductVersion.getProductVersion());
if (mesProductVersion != null) {
item.setProductVersion(mesProductVersion.getProductVersion());
}
}
//是否自动发布
return isAuto(item, mesProductVersion);
@ -535,10 +550,20 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
}
Integer enableBomVersion = mesPartProdGroup.getEnableBomVersion();
String bomVersion ="";
/**
* 2024-12-20 bomVersion
*/
if (enableBomVersion == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
if(!Objects.isNull(mesProductVersion)){
bomVersion = mesProductVersion.getAlternativePartList();
}
}
// 打散bom
List<MesWorkOrderPart> workOrderPartList = new ArrayList<>();
if (mesPartProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && !Objects.isNull(mesProductVersion)) {
workOrderPartList = dismantleBom(findBomList(item.getOrganizeCode(), iMesPartService.getPartByPartNo(item.getPartNo(), item.getOrganizeCode()),mesProductVersion.getAlternativePartList()), item.getQty(), item.getOrganizeCode(), item.getWorkCellCode(), item.getWorkOrderNo());
if (mesPartProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
workOrderPartList = dismantleBom(findBomList(item.getOrganizeCode(), iMesPartService.getPartByPartNo(item.getPartNo(), item.getOrganizeCode()),bomVersion), item.getQty(), item.getOrganizeCode(), item.getWorkCellCode(), item.getWorkOrderNo());
}
return workOrderPartList;
}
@ -941,10 +966,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getOrganizeCode());
//查询产线信息
MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode());
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion());
//物料+生产版本获取bom信息
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
//报工类型
if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) {
mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty()));
@ -990,7 +1017,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
String nowTime = StringUtil.isEmpty(mesWorkOrder.getDescription())?TimeTool.getNowTime(true):mesWorkOrder.getDescription();
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size()));
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, nowTime,mesBoms.size()));
}
mesProductOffLineService.insertBatch(mesProductOffLineList);
}
@ -1041,10 +1068,21 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
mesWorkOrder.getAdjustQty(), mesWorkOrder.getReportedQty());
}
}
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion());
//物料+生产版本获取bom信息
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
String partProdGroupCode = mesWorkOrder.getPartProdGroupCode();
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(partProdGroupCode,"partProdGroupCode",ddlPackBean);
List<MesPartProdGroup> mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(ddlPackBean, 1);
String bomVersion = "";
MesProductVersion mesProductVersion = new MesProductVersion();
if (!mesPartProdGroupList.isEmpty()){
MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.get(0);
if (mesPartProdGroup.getEnableBomVersion() == null || mesPartProdGroup.getEnableBomVersion() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
//获取生产版本
mesProductVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion());
bomVersion = mesProductVersion.getAlternativePartList();
}
}
//生成条码
String sn = getStringList(mesWorkOrderNew.getOrganizeCode(), AuthUtilExt.getUserName());
//保存数据
@ -1055,9 +1093,17 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
String nowTime = TimeTool.getNowTime(true);
//排序工单
if (MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == mesWorkOrder.getWorkOrderType()) {
//报工类型
if (MesExtEnumUtil.REPORT_TYPE.WRITE_OFF.getValue() == mesWorkOrder.getReportType()) {
MesException.throwMesBusiException("工单【%s】为排序工单不允许冲销", mesWorkOrder.getWorkOrderNo());
//排序线不能做报工调整ESD属性类型
if (MesExtEnumUtil.REPORT_TYPE.WRITE_OFF.getValue() == mesWorkOrderNew.getReportType()) {
MesConfig config = mesConfigService.getCfgValueByCode(mesWorkOrder.getOrganizeCode(), MesExtConstWords.NOT_ALLOW_WRITE_OFF);
if (!Objects.isNull(config) && config.getCfgValue().contains(mesPart.getEsd())) {
MesException.throwMesBusiException("物料特殊移库类型为【%s】,不允许冲销", mesPart.getEsd());
}
}
//查询工单零件表
List<MesWorkOrderPart> partList = mesWorkOrderPartService.findMesWorkOrderPart(mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getOrganizeCode());
if(CollectionUtils.isEmpty(partList)){
MesException.throwMesBusiException("工单【%s】工单零件表信息不存在不允许冲销", mesWorkOrder.getWorkOrderNo());
}
//排序加工规则
MesProdRuleSortCfg mesProdRuleSortCfg = getMesProdRuleSortCfg(mesWorkOrder);
@ -1069,7 +1115,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
isReport = true;
isMove = true;
} else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) {
customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,true);
customerSupplyMoveSort(mesWorkOrderNew, mesProductVersion, partList, sn, mesProductOffLineList, mesMoveList, nowTime);
} else {
log.info("工单{}排序加工规则报工类型未维护", mesWorkOrder.getWorkOrderNo());
return;
@ -1080,8 +1126,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
//成品汇报
if (isReport) {
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size()));
for (MesWorkOrderPart orderPart : partList) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, orderPart,false,nowTime,partList.size()));
}
}
//成品移库
@ -1092,18 +1138,23 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
}
} else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) {
//物料+生产版本获取bom信息
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, bomVersion);
MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
if (MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == mesProdRuleNoSortCfg.getReportType()) {
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime,mesBoms.size()));
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, nowTime,mesBoms.size()));
}
}else if(MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleNoSortCfg.getReportType()) {
customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime,false);
customerSupplyMove(mesWorkOrderNew, mesProductVersion, mesBoms, sn, mesProductOffLineList, mesMoveList,nowTime);
}
} else {
log.info("工单{}排序规则不属于排序工单和非排序工单", mesWorkOrder.getWorkOrderNo());
return;
}
//原因备注
mesWorkOrder.setRemark(mesWorkOrderNew.getRemark());
mesWorkOrder.setDescription(mesWorkOrderNew.getDescription());
//更新工单
updateMesWorkOrder(mesWorkOrder, (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrderNew.getReportType()) ? MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT : MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST,mesWorkOrderNew.getNum());
@ -1170,6 +1221,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (StringUtil.isEmpty(model.getSn())) {
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(model.getOrganizeCode(),model.getPartNo());
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", model.getPartNo());
}
//获取bom
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
//生成流水码
@ -1469,7 +1523,56 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return newMesProductOffLine;
}
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String nowTime,boolean isSort) {
private void customerSupplyMoveSort(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesWorkOrderPart> orderPartList, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String nowTime) {
boolean isItemMove;
boolean isItemReport;
MesMoveRule moveRule;
MesPart itemPart;
//查询零件生产组的移库规则
List<MesMoveRule> moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode(), MesExtEnumUtil.MOVE_RULE_GROUP_TYPE.MOVE_RULE_GROUP_TYPE_20.getValue());
Map<String, List<MesMoveRule>> mesMoveRuleMap = moveRules.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.groupingBy(MesMoveRule::getSrcType));
List<String> itemPartNoList = orderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList());
//子物料SAP下发信息
Map<String, List<MesPartSap>> mesPartSapMap = getPartSapMap(mesWorkOrder, itemPartNoList);
//获取物料信息
Map<String, List<MesPart>> itemPartMap = getItemPartMap(mesWorkOrder, itemPartNoList);
for (MesWorkOrderPart orderPart : orderPartList) {
isItemReport = false;
isItemMove = false;
moveRule = null;
itemPart = null;
if (itemPartMap.containsKey(orderPart.getPartNo())) {
itemPart = itemPartMap.get(orderPart.getPartNo()).iterator().next();
if (!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())) {
moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next();
if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) {
isItemMove = true;
isItemReport = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT.getValue() == moveRule.getReportType()) {
isItemReport = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) {
isItemMove = true;
}
}
}
//汇报
if (isItemReport) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, orderPart, true, nowTime, null));
}
//移库
if (isItemMove) {
MesPartSap mesPartSap = null;
if (mesPartSapMap.containsKey(orderPart.getPartNo())) {
mesPartSap = mesPartSapMap.get(orderPart.getPartNo()).iterator().next();
}
MesMove move = createMove(mesPartSap, moveRule.getErpSrcLocateNo(), moveRule.getErpDestLocateNo(), orderPart.getOrganizeCode(), mesWorkOrder.getWorkCenterCode(), orderPart.getItemQty(), MesExtConstWords.EMPTY, MesExtEnumUtil.MOVE_TYPE.RAW_MATERIAL_MOVE.getValue());
move.setMatnr(orderPart.getPartNo());
mesMoveList.add(move);
}
}
}
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String nowTime) {
boolean isItemMove;
boolean isItemReport;
MesMoveRule moveRule;
@ -1502,9 +1605,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
}
//汇报
if (isItemReport && isSort) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, null));
} else if (isItemReport) {
if (isItemReport) {
String reportSn = String.valueOf(snowflakeIdMaker.nextId());
MesProductVersion itemVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesBom.getItemPartNo(), mesProductVersion.getProductVersion());
List<MesBom> bomList = null;
@ -1515,10 +1616,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//bom下的子节汇报
if (!CollectionUtils.isEmpty(bomList)) {
for (MesBom bom : bomList) {
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true,bomList.size(), nowTime));
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true, bomList.size(), nowTime, MesExtConstWords.SAVE_PRODUCT_VERSION_FLAG.equals(itemPart.getEsd())));
}
} else {
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true,MesExtConstWords.ONE, nowTime));
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true,MesExtConstWords.ONE, nowTime,false));
}
}
//移库
@ -1534,9 +1635,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
//bom下的子节汇报总成也需要汇报
if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) {
if (!CollectionUtils.isEmpty(mesProductOffLineList)) {
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false,mesBoms.size(), nowTime));
mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false,mesBoms.size(), nowTime,false));
}
}
}
@ -1568,7 +1669,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom,Double itemQty, boolean isItemReport,Integer bomSize,String nowTime) {
String sn, MesBom mesBom,Double itemQty, boolean isItemReport,
Integer bomSize,String nowTime,boolean saveProductVersionFlag) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS);
newMesProductOffLine.setReportPartNo(mesBom.getPartNo());
@ -1577,6 +1679,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
newMesProductOffLine.setQty(MathOperation.mul(mesWorkOrder.getNum(),itemQty));
newMesProductOffLine.setItemQty(MathOperation.mul(newMesProductOffLine.getQty(), mesBom.getItemQty()));
//装配费没有bom情况
if (isItemReport && mesBom.getPartNo().equals(mesWorkOrder.getPartNo())) {
newMesProductOffLine.setReportPartNo(mesBom.getItemPartNo());
newMesProductOffLine.setReportPartNameRdd(mesBom.getItemPartName());
@ -1595,7 +1698,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
if (Objects.equals(MesExtEnumUtil.ORDER_TYPE.BTO.getValue(), mesWorkOrder.getWorkOrderType())){
newMesProductOffLine.setWorkCenterCode(mesProductVersion.getWorkCenterCode());
}
newMesProductOffLine.setSapWorkCenter(saveProductVersionFlag ? mesProductVersion.getProductVersion() : mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
newMesProductOffLine.setBomTotalSize(bomSize);
@ -1604,14 +1710,45 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return newMesProductOffLine;
}
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom, boolean isItemReport,String nowTime,Integer bomTotalSize) {
String sn, MesWorkOrderPart workOrderPart, boolean isItemReport,String nowTime,Integer bomTotalSize) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
if (!isItemReport) {
if(!isItemReport){
newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo());
newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName());
}
newMesProductOffLine.setReportSn(sn);
newMesProductOffLine.setItemPartNo(workOrderPart.getPartNo());
newMesProductOffLine.setItemPartName(workOrderPart.getPartName());
newMesProductOffLine.setItemQty(MathOperation.mul(mesWorkOrder.getNum(), workOrderPart.getItemQty()));
if (mesProductVersion != null){
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
}
newMesProductOffLine.setQty(Double.valueOf(mesWorkOrder.getNum()));
newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion());
newMesProductOffLine.setSerialNumber(sn);
newMesProductOffLine.setItemUnit(workOrderPart.getItemUnit());
newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
newMesProductOffLine.setWorkOrderType(mesWorkOrder.getWorkOrderType());
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
newMesProductOffLine.setBomTotalSize(bomTotalSize);
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser());
return newMesProductOffLine;
}
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom, String nowTime, Integer bomTotalSize) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo());
newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName());
newMesProductOffLine.setReportSn(sn);
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
@ -1628,8 +1765,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setWorkOrderType(mesWorkOrder.getWorkOrderType());
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
newMesProductOffLine.setWorkCenterCode(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getErpWorkCenter());
newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
@ -2054,7 +2191,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
sqlStr += " and mwo.work_center_code = :workCenterCode ";
}
sqlStr += "order by mwo.create_date_time limit 16";
sqlStr += "order by mwo.create_date_time ";
String dateTime = new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 30)) + " 00:00:00";
Query query = entityManager.createNativeQuery(sqlStr);
@ -2145,7 +2282,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
}
mesWorkOrderBoardResModels = mesWorkOrderBoardResModels.stream().filter(mesWorkOrderBoardResModel -> mesWorkOrderBoardResModel.getQty() > mesWorkOrderBoardResModel.getCompleteQty()).collect(Collectors.toList());
mesWorkOrderBoardResModels = mesWorkOrderBoardResModels.subList(0, 16);
return mesWorkOrderBoardResModels;
}
@ -2183,7 +2320,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
// 递归展开 BOM
expendBomChild(organizeCode, mesPart.getPartNo(), bomVersion, bomData);
if (bomData.size() == 0) {
if (bomData.isEmpty()) {
MesException.throwMesBusiException("零件号 %s 没找找到 ERP 同步的原始 BOM 数据,请检查接口是否正常!", mesPart.getPartNo());
}
@ -2242,20 +2379,36 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
}
}
public List<MesBom> findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion) {
//MES汇报查询BOM是否携带结束查询条件
MesConfig config = mesConfigService.getCfgValueByCode(organizeCode, MesExtConstWords.MES_REPORT_FIND_BOM_WITH_EFFENDTIME);
boolean isWithEffEndTime = null != config && !StringUtils.isEmpty(config.getCfgValue()) && config.getCfgValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomVersion, MesExtConstWords.BOM_VERSION, ddlPackBean);
if (!StringUtils.isEmpty(partNo)) {
DdlPreparedPack.getStringEqualPack(bomVersion, MesExtConstWords.BOM_VERSION, ddlPackBean);
}
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_START_TIME, ddlPackBean);
DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_END_TIME, ddlPackBean);
if(isWithEffEndTime)DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime(true), MesExtConstWords.EFF_END_TIME, ddlPackBean);
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean);
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
List<MesBom> mesBoms = mesBomRDao.findByHqlTopWhere(ddlPackBean,1);
if (org.springframework.util.CollectionUtils.isEmpty(mesBoms)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", partNo, bomVersion);
MesException.throwMesBusiException("物料【%s】对应bom信息不存在", partNo);
}
MesBom next = mesBoms.iterator().next();
MesBom mesBom = mesBoms.get(0);
String effStartTime = mesBom.getEffStartTime();
String bomCode = mesBom.getBomCode();
DdlPackBean ddlPackBean1 = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, ddlPackBean1);
DdlPreparedPack.getStringEqualPack(effStartTime, MesExtConstWords.EFF_START_TIME, ddlPackBean1);
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", ddlPackBean1);
//如果存在多个bomCode取最新的一个
return mesBoms.stream().collect(Collectors.groupingBy(t -> t.getBomCode() + t.getEffStartTime())).get(next.getBomCode() + next.getEffStartTime());
return mesBomRDao.findByHqlWhere(ddlPackBean1);
}
@ -2661,9 +2814,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo, MesExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue(), MesExtConstWords.STATUS, packBean);
queueOrderRao.updateByProperties(
new String[]{MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME, MesExtConstWords.STATUS},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.QUEUE_ORDER_STATUS.CLOSED.getValue()}, packBean);
queueOrderRao.updateByPropertiesNoSync(
new String[]{MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME, MesExtConstWords.SYSTEM_SYNC_STATUS, MesExtConstWords.STATUS},
new Object[]{userName, TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.QUEUE_ORDER_STATUS.CLOSED.getValue()}, packBean);
}
private void closeMesPullingOrderInfo(String workOrderNo, String organizeCode, String userName) {
@ -2704,18 +2857,18 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
private MesProductVersion getMesProductVersion(String organizeCode, String partNo, String productVersion) {
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, productVersion);
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion);
MesProductVersion mesProductVersion = new MesProductVersion();
if (!StringUtils.isEmpty(productVersion)){
mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, productVersion);
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion);
}
}
return mesProductVersion;
}
private MesProductVersion getMesProductVersion(String organizeCode, String partNo) {
MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, null);
if (Objects.isNull(mesProductVersion)) {
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", partNo);
}
return mesProductVersion;
}

@ -1,11 +1,13 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.roundness;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.base.IMesCustSoftInfoService;
import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesWorkOrderService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.MesCreateWorkOrderImpl;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
@ -101,6 +103,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy {
@Autowired
private MesCreateWorkOrderImpl mesCreateWorkOrder;
@Autowired
private IMesConfigService mesConfigService;
@Override
public void execute(MesPartProdGroup partProdGroup, List<MesCustSortInfo> sortInfoList, List<MesPartProdGroupDetail> details) {
try {
@ -791,12 +796,18 @@ public class MesPackageRoundnessService implements IRoundnessStrategy {
private List<MesBom> getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) {
//MES汇报查询BOM是否携带结束查询条件
MesConfig config = mesConfigService.getCfgValueByCode(organizeCode, MesExtConstWords.MES_REPORT_FIND_BOM_WITH_EFFENDTIME);
Boolean isWithEffEndTime = (null != config && !org.springframework.util.StringUtils.isEmpty(config.getCfgValue()) && config.getCfgValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? true : false;
if (bomCode == null) {
//首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode
DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean);
DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false);
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomCodePackBean);
DdlPreparedPack.getStringSmallerPack(effectiveTime, MesExtConstWords.EFF_START_TIME, bomCodePackBean);
if (isWithEffEndTime) DdlPreparedPack.getStringBiggerPack(effectiveTime, MesExtConstWords.EFF_END_TIME, bomCodePackBean);
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean);
List<MesBom> bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1);
if (bomList == null || bomList.isEmpty()) {
return new ArrayList<>();
@ -806,9 +817,9 @@ public class MesPackageRoundnessService implements IRoundnessStrategy {
List<MesBom> bomResultList = new ArrayList<>();
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean);
DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean);
DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomPackBean);
DdlPreparedPack.getStringSmallerPack(effectiveTime, MesExtConstWords.EFF_START_TIME, bomPackBean);
if (isWithEffEndTime) DdlPreparedPack.getStringBiggerPack(effectiveTime, MesExtConstWords.EFF_END_TIME, bomPackBean);
List<MesBom> bomList = bomRao.findByHqlWhere(bomPackBean);
for (MesBom bom : bomList) {

@ -18,6 +18,7 @@ import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.repository.wh.MesCimGmGepicsRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import com.xxl.job.core.util.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -61,6 +62,10 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
@Autowired
private MesCimGmGepicsRepository mesCimGmGepicsRepository;
@Autowired
private MesDowntimeRecordRepository mesDowntimeRecordRDao;
private static final String START_TIME = "START_TIME";
private static final String END_TIME = "END_TIME";
@ -339,9 +344,47 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
public MesWorkCenterBoardResultModel queryAbnormalDowntime(MesWorkCenterBoardConditionModel conditionModel) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
//获取查询时间区间(需求未明确,暂时注释,返回固定值)
// Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
// conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
resultModel.setAbnormalDowntime("00:00");
Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
if(!timeZoneMap.isEmpty()){
Set<String> keySet = timeZoneMap.keySet();
for (String key : keySet) {
Map<String, String> map = timeZoneMap.get(key);
String startTime = map.get("START_TIME");
String endTime = map.get("END_TIME");
//根据产线查询停机记录表汇总
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
DdlPreparedPack.getStringBiggerPack(startTime,"createDatetime",ddlPackBean);
DdlPreparedPack.getStringSmallerPack(endTime,"createDatetime",ddlPackBean);
DdlPreparedPack.getInPackList(conditionModel.getWorkCenterCodeList(), "workCenterCode", ddlPackBean);
List<MesDowntimeRecord> recordList = mesDowntimeRecordRDao.findByHqlWhere(ddlPackBean);
//遍历recordList汇总停机时间
long total = 0L;
for (MesDowntimeRecord record : recordList) {
// 如果停机结束时间还在,则需要补充动态停机时间,否则需要有停机时间
if (StringUtils.isEmpty(record.getModifyDatetime())) {
Date startTDateTime = DateUtil.parseDateTime(record.getCreateDatetime());
Date currentTime = new Date();
total += (currentTime.getTime() - startTDateTime.getTime())/(1000 * 60);
} else {
Date startTDateTime = DateUtil.parseDateTime(record.getCreateDatetime());
Date endDateTime = DateUtil.parseDateTime(record.getModifyDatetime());
total += (endDateTime.getTime() - startTDateTime.getTime())/(1000 * 60);
}
}
if (total > 0){
//转换成小时分钟
long minutes = total % 60;
long hours = total / 60;
resultModel.setAbnormalDowntime(String.format("%02d",hours)+":"+String.format("%02d",minutes));
}
}
}else {
resultModel.setAbnormalDowntime("00:00");
}
return resultModel;
}

@ -1,9 +1,11 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.busi.IMesCreateWorkOrder;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPartSapService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesWorkOrderService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
@ -17,7 +19,6 @@ import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -89,6 +90,9 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
@Autowired
private MesCustomerCarModelRepository mesCustomerCarModelRepository;
@Autowired
private IMesConfigService mesConfigService;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createWorkOrder(MesPartProdGroup partProdGroup, MesPartProdGroupDetail mesPartProdGroupDetail, MesPartSap partSap, MesCustSortInfo sortInfo,Long productSeq) {
@ -195,19 +199,41 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
/**
* erp
*/
MesProductVersion prodVersion = getProdVersion(organizeCode, mesPartProdGroupDetail.getProductPartNo());
if (prodVersion == null) {
log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, mesPartProdGroupDetail.getProductPartNo());
} else {
String productVersion = prodVersion.getProductVersion();
mesWorkOrder.setProductVersion(productVersion);
/**
* 2024-12-13 bug 44316 bom by castle
* EDIBOM
*
* -线
* 1使BOM
* 2使BOM
*
*
* 1BOM
* 2BOM
* BOM
*
* BOM;
* limit 1ECN
* ***BOM > BOM <= yyyy-mm-dd hh:MM:ss
*/
MesBom bom;
if (partProdGroup.getEnableBomVersion() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
MesProductVersion prodVersion = getProdVersion(organizeCode, mesPartProdGroupDetail.getProductPartNo());
if (prodVersion == null) {
log.info("请配置工厂:{},partNo:{}的生产版本", mesPartProdGroupDetail.organizeCode, mesPartProdGroupDetail.getProductPartNo());
} else {
String productVersion = prodVersion.getProductVersion();
mesWorkOrder.setProductVersion(productVersion);
}
bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo());
}else {
bom = mesBomService.findBom(organizeCode, mesPartProdGroupDetail.getProductPartNo());
}
// bom prodVersion.alternativePartList bom版本
/**
* bom
*/
MesBom bom = mesBomService.findBom(organizeCode, prodVersion == null ? null : prodVersion.getAlternativePartList(), mesPartProdGroupDetail.getProductPartNo());
if (bom != null) {
mesWorkOrder.setBomCode(bom.getBomCode());
} else {
@ -308,7 +334,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
List<MesWorkOrderPart> workOrderPartList = new ArrayList<>();
if (partProdGroup.getIsDisassembleBom() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
//打散bom使用生产零件号
workOrderPartList = dismantleBom(mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), bom.getBomCode(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo());
workOrderPartList = dismantleBom(bom, mesPartProdGroupDetail.getProductPartNo(), mesWorkOrder.getQty(), sortInfo.getMatchTime(), sortInfo.getOrganizeCode(), mesPartProdGroupDetail.getWorkCellCode(), mesWorkOrder.getWorkOrderNo());
}
@ -369,8 +395,22 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
//ptr信息
List<String> partNoList = workOrderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList());
List<MesPartPtr> partPtrList = getPartPtrList(organizeCode, mesWorkOrder.getWorkCenterCode(), partNoList);
/**
* ptr
* 1.ptr - PTR
* 1.1
* 1.2 ptrptr
* 1.3 ptrptrptr
*
* 2.ptr - PTR
* 2.1 bom,
* 2.2 PTR
*
* 3.PTR - F
* 2.1 bom,
* 2.2 ptr F
*/
//遍历workOrderPartList
for (MesWorkOrderPart orderPart : workOrderPartList) {
List<MesPartPtr> ptr = partPtrList.stream().filter(item -> item.getSrcPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList());
if (ptr.isEmpty()) {
@ -379,7 +419,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
//判断是否是客户替换
boolean isCust = false;
for (MesPartPtr mesPartPtr : ptr) {
if (custPtrPartList.contains(mesPartPtr.getSrcPartNo())) {
if (custPtrPartList.contains(mesPartPtr.getSeqInfoPrtPart()) && mesPartPtr.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
isCust = true;
break;
}
@ -390,7 +430,7 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
if (isCust) {
//查找客户发送的ptr信息
List<MesPartPtr> custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && custPtrPartList.contains(item.getSrcPartNo())).collect(Collectors.toList());
List<MesPartPtr> custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() && custPtrPartList.contains(item.getSeqInfoPrtPart())).collect(Collectors.toList());
if (!custPartPtrList.isEmpty()) {
mesPartPtr = custPartPtrList.get(0);
}
@ -398,14 +438,24 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
//获取相同总成的ptrId 在ptr详情中
List<MesPartPtr> custPartPtrList = ptr.stream().filter(item -> item.getIsCustomerSendPrtInfo() == null || item.getIsCustomerSendPrtInfo() != CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).collect(Collectors.toList());
if (!custPartPtrList.isEmpty()) {
mesPartPtr = custPartPtrList.get(0);
//查询ptr总成--只有特定总成才会替换
DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(), "ptrId", detailPartPtr);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "totalPartNo", detailPartPtr);
List<MesPartPtrDetail> ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr);
if (!ptrDetailList.isEmpty()) {
mesPartPtrDetail = ptrDetailList.get(0);
/**
* bug 44747 ptr
* PTRPTRPTRPTR;
*/
for (MesPartPtr partPtr : custPartPtrList) {
//查询ptr总成--只有特定总成才会替换
DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(partPtr.getId(), "ptrId", detailPartPtr);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "totalPartNo", detailPartPtr);
List<MesPartPtrDetail> ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr);
if (!ptrDetailList.isEmpty()) {
mesPartPtrDetail = ptrDetailList.get(0);
mesPartPtr = partPtr;
break;
}
}
if (mesPartPtr == null){
mesPartPtr = custPartPtrList.get(0);
}
}
}
@ -418,12 +468,17 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
custFlag = true;
}
}
ptrFlag = true;
if (!isCust && mesPartPtr.getIsInterPrt()==CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
if (!fOrderFlag){
fOrderFlag = true;
}
}
if (!isCust && mesPartPtr.getIsInterPrt()!=CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
if (!ptrFlag){
ptrFlag = true;
}
}
//将工单类零件表替换位PTR条件中维护的替换零件
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesPartPtr.getDestPartNo(), organizeCode);
orderPart.setPartNo(mesPartSap.getPartNo());
@ -462,26 +517,27 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
* pisces
* add by aix 2017.4.11 PTRWORKORDERASSEMBLYpartdesc
*/
if (!Objects.isNull(orderAssemblyList)){
if (orderAssemblyList.getDisplaySeq()!=null && orderAssemblyList.getDisplaySeq()!=0){
orderAssemblyList.setDisplayValue(mesPartPtr.getVisualItem());
}
orderAssemblyList.setAssemblyPartNo(mesPartSap.getPartNo());
orderAssemblyList.setAssemblyPartName(mesPartSap.getPartName());
orderAssemblyList.setMatchRule(mesPartPtr.getReplacePartSnRule());
ptrInfos.append("INFO|").append(mesPartPtr.getId());
if (mesPartPtrDetail != null) {
ptrInfos.append("PART|").append(mesPartPtrDetail.getId());
}
}
if (!Objects.isNull(orderAssemblyList)){
if (orderAssemblyList.getDisplaySeq()!=null && orderAssemblyList.getDisplaySeq()!=0){
orderAssemblyList.setDisplayValue(mesPartPtr.getVisualItem());
}
orderAssemblyList.setAssemblyPartNo(mesPartSap.getPartNo());
orderAssemblyList.setAssemblyPartName(mesPartSap.getPartName());
orderAssemblyList.setMatchRule(mesPartPtr.getReplacePartSnRule());
ptrInfos.append("INFO|").append(mesPartPtr.getId());
if (mesPartPtrDetail != null) {
ptrInfos.append("PART|").append(mesPartPtrDetail.getId());
}
}
}
}
if (ptrFlag && custFlag){
if (custFlag || ptrFlag){
mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue());
}else if (ptrFlag){
}else if (fOrderFlag){
mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.F.getValue());
}else {
}
else {
mesWorkOrder.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue());
}
@ -759,11 +815,11 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
}
return null;
}
private List<MesWorkOrderPart> dismantleBom(String partNo, double qty, String productTime, String bomCode, String organizeCode, String workCellCode, String workOrderNo) {
private List<MesWorkOrderPart> dismantleBom(MesBom mesBom, String partNo, double qty, String productTime, String organizeCode, String workCellCode, String workOrderNo) {
List<MesWorkOrderPart> orderPartList = new ArrayList<>();
//1.根据bomCode,partNo productTime organizeCode 查询bom清单 bomList
List<MesBom> bomList = getPlatBom(partNo, productTime, bomCode, organizeCode);
List<MesBom> bomList = getPlatBom(mesBom,partNo, productTime, organizeCode);
//2.根据bomList中的subPartNo 查询零件清单 partList
List<String> partNoList = bomList.stream().map(MesBom::getItemPartNo).distinct().collect(Collectors.toList());
@ -803,30 +859,34 @@ public class MesCreateWorkOrderImpl implements IMesCreateWorkOrder {
return orderPartList;
}
private List<MesBom> getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) {
if (bomCode == null) {
private List<MesBom> getPlatBom(MesBom mesBom,String partNo, String effectiveTime,String organizeCode) {
//MES汇报查询BOM是否携带结束查询条件
MesConfig config = mesConfigService.getCfgValueByCode(organizeCode, MesExtConstWords.MES_REPORT_FIND_BOM_WITH_EFFENDTIME);
Boolean isWithEffEndTime = (null != config && !org.springframework.util.StringUtils.isEmpty(config.getCfgValue()) && config.getCfgValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? true : false;
if (mesBom == null) {
//首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode
DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean);
DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false);
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomCodePackBean);
DdlPreparedPack.getStringSmallerPack(effectiveTime, MesExtConstWords.EFF_START_TIME, bomCodePackBean);
if (isWithEffEndTime) DdlPreparedPack.getStringBiggerPack(effectiveTime, MesExtConstWords.EFF_END_TIME, bomCodePackBean);
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean);
List<MesBom> bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1);
if (bomList == null || bomList.isEmpty()) {
return new ArrayList<>();
}
bomCode = bomList.get(0).getBomCode();
mesBom = bomList.get(0);
}
List<MesBom> bomResultList = new ArrayList<>();
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean);
DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean);
DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean);
DdlPreparedPack.getStringEqualPack(mesBom.getBomCode(), "bomCode", bomPackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomPackBean);
DdlPreparedPack.getStringEqualPack(mesBom.getEffStartTime(), MesExtConstWords.EFF_START_TIME, bomPackBean);
List<MesBom> bomList = bomRao.findByHqlWhere(bomPackBean);
for (MesBom bom : bomList) {
if (bom.getPartType() != null && bom.getPartType().equalsIgnoreCase("X")) {
getPlatBom(bom.getItemPartNo(), effectiveTime, null, organizeCode);
getPlatBom(null,bom.getItemPartNo(), effectiveTime, organizeCode);
} else {
bom.setBomCode(bom.getBomCode().toLowerCase());
bomResultList.add(bom);

@ -4,7 +4,6 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartSapService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkCenterService;
import cn.estsh.i3plus.ext.mes.api.busi.IMesInputDefectRecordService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
@ -20,7 +19,6 @@ import cn.estsh.i3plus.pojo.mes.repository.MesPartInspectionDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartInspectionRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.util.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@ -102,7 +100,7 @@ public class MesInputDefectRecordServiceImpl implements IMesInputDefectRecordSer
partInspection.setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue());
partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue());
partInspection.setSn(sn);
partInspection.setQty(MesCommonConstant.TRUE_INTEGER);
partInspection.setQty(new Double(1));
partInspection.setSourceType(MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue());
ConvertBean.serviceModelInitialize(partInspection, userName);
return partInspection;

@ -1,8 +1,10 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.busi.IMesSortRuleCfgOfflineService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesBomService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -67,8 +69,8 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
@Autowired
private MesPartSapRepository partSapRao;
@Autowired
private IMesConfigService mesConfigService;
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Override
@ -90,9 +92,15 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
if (count > 0){
return;
}
MesProductVersion mesProductVersion = getMesProductVersion(productPartNo, organizeCode);
MesProductVersion mesProductVersion= null;
if (mesPartProdGroup.getEnableBomVersion() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
mesProductVersion = getMesProductVersion(productPartNo, organizeCode);
}
//4.总成零件号打散bom
String bomVersion = mesProductVersion.getAlternativePartList();
String bomVersion = null;
if (mesProductVersion != null){
bomVersion = mesProductVersion.getAlternativePartList();
}
MesBom bom = mesBomService.findBom(organizeCode, bomVersion, productPartNo);
if (bom == null) {
return;
@ -107,6 +115,9 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
}
//5.打散的bom 获取排序加工规则
List<MesWorkOrderPart> workOrderPartList = dismantleBom(productPartNo, 1, TimeTool.getNowTime(true), bom.getBomCode(), organizeCode, detail.getWorkCellCode());
if (workOrderPartList.isEmpty()){
return;
}
//6.装配件获取的三种条件
String custCode = mesCustomerPart.getCustCode();
MesCustomerCarModel mesCustomerCarModel = getMesCustomerCarModel(custPartNo, organizeCode, custCode);
@ -255,7 +266,7 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
List<MesProductVersion> mesProductVersionList = mesProductVersionRDao.findByHqlTopWhere(ddlPackBean, 1);
if (Objects.isNull(mesProductVersionList) || mesProductVersionList.isEmpty()) {
MesException.throwMesBusiException("物料【%s】对应的生产版本信息不存在", partNo);
return null;
}
return mesProductVersionList.get(0);
}
@ -300,12 +311,18 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
}
private List<MesBom> getPlatBom(String partNo, String effectiveTime, String bomCode, String organizeCode) {
//MES汇报查询BOM是否携带结束查询条件
MesConfig config = mesConfigService.getCfgValueByCode(organizeCode, MesExtConstWords.MES_REPORT_FIND_BOM_WITH_EFFENDTIME);
Boolean isWithEffEndTime = (null != config && !org.springframework.util.StringUtils.isEmpty(config.getCfgValue()) && config.getCfgValue().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? true : false;
if (bomCode == null) {
//首先根据虚结构的零件号查询出最新的一条bom信息作为bomCode
DdlPackBean bomCodePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomCodePackBean);
DdlPreparedPack.getTimeBetweenCol(effectiveTime, "effStartTime", "effEndTime", bomCodePackBean, false);
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomCodePackBean);
DdlPreparedPack.getStringSmallerPack(effectiveTime, MesExtConstWords.EFF_START_TIME, bomCodePackBean);
if (isWithEffEndTime) DdlPreparedPack.getStringBiggerPack(effectiveTime, MesExtConstWords.EFF_END_TIME, bomCodePackBean);
DdlPreparedPack.getOrderBy(MesExtConstWords.EFF_START_TIME, CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), bomCodePackBean);
List<MesBom> bomList = bomRao.findByHqlTopWhere(bomCodePackBean, 1);
if (bomList == null || bomList.isEmpty()) {
return new ArrayList<>();
@ -315,9 +332,8 @@ public class MesSortRuleCfgOfflineServiceImpl implements IMesSortRuleCfgOfflineS
List<MesBom> bomResultList = new ArrayList<>();
DdlPackBean bomPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(bomCode, "bomCode", bomPackBean);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", bomPackBean);
DdlPreparedPack.getStringSmallerPack(effectiveTime, "effStartTime", bomPackBean);
DdlPreparedPack.getStringBiggerPack(effectiveTime, "effEndTime", bomPackBean);
DdlPreparedPack.getStringEqualPack(partNo, MesExtConstWords.PART_NO, bomPackBean);
DdlPreparedPack.getStringEqualPack(effectiveTime, MesExtConstWords.EFF_START_TIME, bomPackBean);
List<MesBom> bomList = bomRao.findByHqlWhere(bomPackBean);
for (MesBom bom : bomList) {

@ -315,43 +315,43 @@ public class MesSpotCheckOrderService extends BaseMesService<MesSpotCheckOrder>
String organizeCode = AuthUtilExt.getOrganizeCode();
for (Long id : ids) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(id, "id", ddlPackBean);
DdlPreparedPack.getNumEqualPack(id, MesExtConstWords.ID, ddlPackBean);
MesSpotCheckOrder bean = baseRDao.getByProperty(ddlPackBean);
if (StringUtils.isEmpty(bean)) continue;
if (bean.getStatus() == MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.COMPLETE.getValue() && Objects.equals(bean.getSpotCheckOrderResult(),
MesExtEnumUtil.SPOT_CHECK_ORDER_RESULT_TYPE.OK.getValue())) {
if (null == bean) continue;
if (!StringUtils.isEmpty(bean.getStatus()) && bean.getStatus().compareTo(MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.COMPLETE.getValue()) == 0 &&
!StringUtils.isEmpty(bean.getSpotCheckOrderResult()) && bean.getSpotCheckOrderResult().compareTo(MesExtEnumUtil.SPOT_CHECK_ORDER_RESULT_TYPE.OK.getValue()) == 0) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("【%s】点检单状态为【%s】,且点检结果为OK,不允许修改,请检查数据", bean.getSpotCheckId(), MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.valueOfDescription(bean.getStatus()))
.build();
}
bean.setSystemSyncStatus(CommonEnumUtil.FALSE);
bean.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
bean.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
ConvertBean.serviceModelUpdate(bean, AuthUtil.getSessionUser().getUserName());
//获取点检方案明细
DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(bean.getId(), "pid", packBean);
DdlPreparedPack.getNumEqualPack(bean.getId(), MesExtConstWords.PID, packBean);
List<MesSpotCheckOrderResult> detailList = spotCheckOrderResultRepository.findByHqlWhere(packBean);
detailList.forEach(k -> {
k.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
k.setSystemSyncStatus(CommonEnumUtil.FALSE);
k.setSystemSyncDatetime("");
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
});
spotCheckOrderResultRepository.saveAll(detailList);
if (!CollectionUtils.isEmpty(detailList)) {
detailList.forEach(k -> {
k.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
k.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
k.setSystemSyncDatetime("");
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
});
spotCheckOrderResultRepository.saveAll(detailList);
}
//获取点检方案零件 主表零件表 spotCheckId-pid关联
//获取点检单零件号
DdlPackBean orderPartPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(bean.getId(), "spotCheckOrderId", orderPartPackBean);
DdlPreparedPack.getNumEqualPack(bean.getId(), MesExtConstWords.SPOT_CHECK_ORDER_ID, orderPartPackBean);
List<MesSpotCheckOrderPart> oldOrderPartList = spotCheckOrderPartRepository.findByHqlWhere(orderPartPackBean);
if (CollectionUtils.isEmpty(oldOrderPartList)) {
if (!CollectionUtils.isEmpty(oldOrderPartList)) {
oldOrderPartList.forEach(k -> {
k.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
k.setSystemSyncStatus(CommonEnumUtil.FALSE);
k.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
k.setSystemSyncDatetime("");
ConvertBean.serviceModelUpdate(k, AuthUtil.getSessionUser().getUserName());
});

@ -59,7 +59,7 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe
// vinCode
resultMap.put(MesExtConstWords.VIN_CODE, workOrder.getVinCode());
// vinCode 后四位
resultMap.put(MesExtConstWords.VIN_CODE_AFTER_FOUR, workOrder.getVinCode());
resultMap.put(MesExtConstWords.VIN_CODE_AFTER_FOUR, !StringUtils.isEmpty(workOrder.getVinCode()) && workOrder.getVinCode().length() > MesExtConstWords.FOUR ? workOrder.getVinCode().substring(workOrder.getVinCode().length() - MesExtConstWords.FOUR) : workOrder.getVinCode());
// 总成零件号
resultMap.put(MesExtConstWords.PART_NO, workOrder.getPartNo());
// 工单标识

@ -0,0 +1,49 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesInspectionProductDataReportService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesInspectionProductDataReportDao;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesInspectionProductDataAmountReportModel;
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 cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
@Service
@Slf4j
public class MesInspectionProductDataReportService implements IMesInspectionProductDataReportService {
@Autowired
private IMesInspectionProductDataReportDao inspectionProductDataReportDao;
/**
*
* @param model
* @param pager
* @return
*/
@Override
public ListPager<MesInspectionProductDataAmountReportModel> queryInspectionProductDataAmountReport(MesInspectionProductDataAmountReportModel model, Pager pager) {
pager = PagerHelper.getPager(pager, inspectionProductDataReportDao.queryInspectionProductDataAmountReportCount(model));
List<MesInspectionProductDataAmountReportModel> resultList = inspectionProductDataReportDao.queryInspectionProductDataAmountReport(model, pager);
if (!CollectionUtils.isEmpty(resultList)) {
for (MesInspectionProductDataAmountReportModel result : resultList) {
if (null == result) continue;
if (!StringUtils.isEmpty(result.getFrontBack())) result.setFrontBackName(MesExtEnumUtil.DEFECT_ALARM_CONFIG_SIDES.valueOfDescription(result.getFrontBack()));
if (!StringUtils.isEmpty(result.getInspectionStatus())) result.setInspectionStatusName(MesExtEnumUtil.PART_INSPECTION_STATUS.valueOfDescription(result.getInspectionStatus()));
if (!StringUtils.isEmpty(result.getNcStatus())) result.setNcStatusName(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.valueOfDescription(result.getNcStatus()));
if (!StringUtils.isEmpty(result.getTaskStatus())) result.setTaskStatusName(MesExtEnumUtil.REWORK_TASK_STATUS.valueOfDescription(result.getTaskStatus()));
}
}
return new ListPager<>(resultList, pager);
}
}

@ -0,0 +1,70 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesProductionRecordReportExtService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesProductionRecordReportExtDao;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProductionRecordReportExtModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
@Slf4j
public class MesProductionRecordReportExtService implements IMesProductionRecordReportExtService {
@Autowired
private IMesProductionRecordReportExtDao productionRecordReportExtDao;
/**
*
* @param model
* @param pager
* @return
*/
@Override
public ListPager<MesProductionRecordReportExtModel> queryProductionRecordUnionWorkOrderLogReport(MesProductionRecordReportExtModel model, Pager pager) {
List<Integer> reportStatusList = !StringUtils.isEmpty(model.getReportStatusList())
? Arrays.asList(model.getReportStatusList().split(MesExtConstWords.COMMA)).stream().map(Integer::parseInt).collect(Collectors.toList()) :
Stream.of(MesExtEnumUtil.PRODUCTION_RECORD_QUREY_REPORT_STATUS.REPORT_STATUS_10.getValue(),
MesExtEnumUtil.PRODUCTION_RECORD_QUREY_REPORT_STATUS.REPORT_STATUS_20.getValue(),
MesExtEnumUtil.PRODUCTION_RECORD_QUREY_REPORT_STATUS.REPORT_STATUS_30.getValue(),
MesExtEnumUtil.PRODUCTION_RECORD_QUREY_REPORT_STATUS.REPORT_STATUS_40.getValue()
).collect(Collectors.toList());
List<Integer> reportStatusList2Pr = null;
List<Integer> reportStatusList2Wo = null;
if (reportStatusList.contains(MesExtEnumUtil.PRODUCTION_RECORD_QUREY_REPORT_STATUS.REPORT_STATUS_10.getValue())) {
reportStatusList2Pr = new ArrayList<>();
reportStatusList2Pr.add(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue());
reportStatusList2Pr.add(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue());
}
if (reportStatusList.contains(MesExtEnumUtil.PRODUCTION_RECORD_QUREY_REPORT_STATUS.REPORT_STATUS_20.getValue())) {
if (CollectionUtils.isEmpty(reportStatusList2Pr)) reportStatusList2Pr = new ArrayList<>();
reportStatusList2Pr.add(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue());
}
if (StringUtils.isEmpty(model.getWorkCellCode()) && StringUtils.isEmpty(model.getEquipmentCode())) {
reportStatusList2Wo = new ArrayList<>();
if (reportStatusList.contains(MesExtEnumUtil.PRODUCTION_RECORD_QUREY_REPORT_STATUS.REPORT_STATUS_30.getValue())) reportStatusList2Wo.add(MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT.getValue());
if (reportStatusList.contains(MesExtEnumUtil.PRODUCTION_RECORD_QUREY_REPORT_STATUS.REPORT_STATUS_40.getValue())) reportStatusList2Wo.add(MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST.getValue());
}
ListPager<MesProductionRecordReportExtModel> listPager = productionRecordReportExtDao.queryProductionRecordUnionWorkOrderLogReport(model, pager, reportStatusList2Pr, reportStatusList2Wo);
return listPager;
}
}

@ -48,7 +48,7 @@ public class MesException {
* @param errorDetail
* @param errorSoluction
*/
public static void throwBusiException(String errorCode,String errorDetail,String errorSoluction,Object...args){
public static void throwBusiExceptionByCode(String errorCode,String errorDetail,String errorSoluction,Object...args){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(errorCode)

@ -0,0 +1,242 @@
#\u9879\u76EE\u7AEF\u53E3
server.port=8300
#\u672C\u673Aip
impp.server.ip=localhost
#\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740
impp.console.ip=http://10.193.30.22:8010
################ \u529F\u80FD\u914D\u7F6E1 ################
#mes webservice\u5F00\u5173
mes.webservice.open=true
#\u5DE5\u4F5C\u533AID,\u4E0D\u540C\u670D\u52A1\u5668\u4E0D\u540CID 0 - 31
impp.snowflake.work.id=19
#\u6570\u636E\u4ED3\u533AID 0 - 31 \u6709\u9ED8\u8BA4\u56FA\u5B9AID
impp.snowflake.database.id=11
#\u82E5\u65E0\u6CD5\u8FDE\u63A5\u6CE8\u518C\u4E2D\u5FC3\uFF0C\u662F\u5426\u9700\u8981\u4E00\u76F4\u68C0\u6D4B\u52A0\u5165
impp.cluster.fetch=false
#\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3
impp.cluster.regist.center=http://10.193.30.22:8000/eureka/
#\u65E5\u5FD7\u9ED8\u8BA4\u4F7F\u7528log4j2
logging.config=classpath:log4j2-spring.xml
########\u5E73\u53F0\u76F8\u5173\u53C2\u6570##########
#\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58
impp.config.redis=true
#\u662F\u5426\u5F00\u542Fmongo
impp.config.mongo=true
#\u662F\u5426\u5F00\u542FrabbitMQ
impp.config.rabbitmq=false
#\u662F\u5426\u5F00\u542Fswagger
impp.config.swagger=true
#\u662F\u5426\u5F00\u542Fwebsocket
impp.config.websocket=true
#\u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1
impp.config.fileserver=fastdfs
#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790
impp.log.detail.controller=false
#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790
impp.log.detail.service=false
################ \u961F\u5217\u5904\u7406 ################
#\u7AD9\u5185\u4FE1
impp.mq.queue.letter=true
#\u90AE\u4EF6
impp.mq.queue.mail=true
#\u5B9A\u65F6\u4EFB\u52A1
impp.mq.queue.schedule=true
#SWEB\u901A\u77E5\u5904\u7406\u961F\u5217
impp.mq.queue.sweb.notice=true
################################ \u5176\u4ED6\u529F\u80FD\u8BBE\u7F6E ################################
#elasticsearch ip \u591A\u4E2A\u7528\u9017\u53F7\u9694\u5F00
elasticsearch.ip=10.193.30.22:9200
################ FastDfs \u914D\u7F6E ################
#tracker\u670D\u52A1\u5668ip
fastdfs.tracker_servers=10.193.30.22:22122
# tracker\u7684http\u7AEF\u53E3
fastdfs.http_tracker_http_port=22122
# \u4F7F\u7528\u81EA\u5B9A\u4E49\u5DE5\u5177\u83B7\u53D6\u6587\u4EF6\u5C55\u793A\u5730\u5740
fastdfs.http.ui.host=http://dfs.estsh.com
#\u5BC6\u7801
#fastdfs.http.secret_key=
#\u8FDE\u63A5\u8D85\u65F6
fastdfs.connect_timeout_in_seconds=500000
#\u4F20\u8F93\u8D85\u65F6
fastdfs.network_timeout_in_seconds=60000000
fastdfs.charset=UTF-8
# token \u9632\u76D7\u94FE\u529F\u80FD
fastdfs.http_anti_steal_token=no
#redisIP
redis.hostName=10.193.30.9
#\u7AEF\u53E3\u53F7
redis.port=6379
#\u5982\u679C\u6709\u5BC6\u7801
redis.password=(mfLEu7@9kmfdsTy
##\u5176\u4ED6redis\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904
################## rabbitMQ\u914D\u7F6E ####################
spring.rabbitmq.vhost=/
spring.rabbitmq.host=10.193.30.18
spring.rabbitmq.port=15672
spring.rabbitmq.username=root
spring.rabbitmq.password=(mfLEu7@9kmfdsTy
##\u5176\u4ED6rabbitMq\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904
################ \u529F\u80FD\u914D\u7F6E2 ################
#\u662F\u5426\u5F00\u542Fredis
mes.redis.open=true
#\u662F\u5426\u5141\u8BB8\u524D\u7AEF\u8DE8\u57DF\u63D0\u4EA4
impp.web.cross=true
################ \u6388\u6743\u8FC7\u6EE4\u914D\u7F6E ################
#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84
filter.shiro.user.filteruri=/mes/operate/*
#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84
filter.shiro.admin.filteruri=/mes/adoperate/*
#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84
filter.shiro.saadmin.filteruri=/mes/saoperate/*
################ \u4E91\u914D\u7F6E \uFF08\u4EE5projectName\u4F5C\u4E3A\u5E94\u7528\u540D\uFF09 ################
#\u662F\u5426\u5F00\u542F\u5FAE\u670D
eureka.client.enabled=false
#\uFF08\u53C2\u6570\u914D\u7F6E\uFF09\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 -\u300B i3plus-ics\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694
eureka.client.service-url.defaultZone=${impp.cluster.regist.center}
#\u533A\u57DF\uFF08\u6E90\u7801\u4E2D\u5305\u542BdefaultZone\uFF0C\u6240\u4EE5\u9ED8\u8BA4\u4F7F\u7528defaultZone\uFF09
#eureka.client.region=estsh
#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/
################ \u672C\u673A\u5FAE\u670D\u914D\u7F6E ################
#\u672C\u670D\u52A1\u4E3B\u673Aip\uFF08\u82E5\u591A\u4E2A\u7F51\u5361\uFF0C\u5219\u9700\u8981\u8BBE\u7F6E\u672C\u670D\u52A1ip\uFF09
eureka.instance.ip-address=${impp.server.ip}
#\u672C\u670D\u52A1\u5B9E\u4F8BID
eureka.instance.instance-id=${impp.server.ip}:${server.port}
#\u672C\u670D\u52A1\u4E3B\u673A\u540D
eureka.instance.hostname=${impp.server.ip}
#\u672C\u670D\u52A1\u72B6\u6001\u9875\u9762
eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html
#\u5C06\u81EA\u5DF1\u7684IP\u6CE8\u518C\u5230Eureka Server\u3002\u82E5\u4E0D\u914D\u7F6E\u6216\u8BBE\u7F6E\u4E3Afalse\uFF0C\u8868\u793A\u6CE8\u518C\u5FAE\u670D\u52A1\u6240\u5728\u64CD\u4F5C\u7CFB\u7EDF\u7684hostname\u5230Eureka Server
eureka.instance.prefer-ip-address=true
#\u662F\u5426\u8FDB\u884C\u5065\u5EB7\u68C0\u67E5
eureka.client.healthcheck.enabled=true
################ \u68C0\u6D4B\u673A\u5236 ################
#\u5FC3\u8DF3\u95F4\u9694\u5468\u671F\uFF0C\u5B95\u673A\u9650\u5236\uFF08\u79D2\uFF09\uFF0C30\u79D2\u6CA1\u53CD\u5E94\u89C6\u4E3A\u5B95\u673A
eureka.instance.lease-expiration-duration-in-seconds=30
#\u5FC3\u8DF3\u5468\u671F
eureka.instance.lease-renewal-interval-in-seconds=20
#client\u8FDE\u63A5Eureka\u670D\u52A1\u7AEF\u540E\u7684\u7A7A\u95F2\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u4E3A30 \u79D2
eureka.client.eureka-connection-idle-timeout-seconds=1
#\u6700\u521D\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\u6240\u9700\u7684\u65F6\u95F4\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A40\u79D2
eureka.client.initial-instance-info-replication-interval-seconds=1
#\u95F4\u9694\u591A\u957F\u65F6\u95F4\u518D\u6B21\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2
eureka.client.instance-info-replication-interval-seconds=1
#\u4ECEeureka\u670D\u52A1\u5668\u6CE8\u518C\u8868\u4E2D\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\u7684\u65F6\u95F4\u95F4\u9694\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2
eureka.client.registry-fetch-interval-seconds=1
################ \u6253\u5F00feign\u7684\u7194\u65AD ################
feign.hystrix.enabled=true
#\u8BFB\u53D6\u6570\u636E\u65F6\u957F
ribbon.ReadTimeout=100000
#\u8FDE\u63A5\u65F6\u957F
ribbon.ConnectTimeout=100000
#\u91CD\u8BD5
ribbon.maxAutoRetries=2
#\u54CD\u5E94\u8D85\u8FC7\u65F6\u957F\uFF0C\u8FDB\u884C\u7194\u65AD\uFF08\u7194\u65AD\u8D85\u65F6\u9700\u8981\u5927\u4E8E\u8BFB\u53D6\u65F6\u957F\u53CA\u8FDE\u63A5\u65F6\u957F\uFF09
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=150000
#\u96C6\u7FA4\u540D
eureka.instance.metadata-map.cluster=impp_cluster
################ \u94FE\u8DEF\u8FFD\u8E2A ################
#\u4F7F\u7528web\u65B9\u5F0F\u4F20\u8F93\u4FE1\u606F
spring.zipkin.sender.type=web
#\u94FE\u8DEF\u8FFD\u8E2A\u670D\u52A1\u7684\u5730\u5740
spring.zipkin.base-url=${impp.console.ip}
#\u8FFD\u8E2A\u6DF1\u5EA6\uFF0C\u767E\u5206\u6BD4\uFF0C1\u662F\u5168\u90E8
spring.sleuth.sampler.probability=1.0
################ \u65E5\u5FD7\u636E\u6E90 ################
spring.data.mongodb.database=mongoDBSource
spring.data.mongodb.uri=10.193.30.22:27017
spring.data.mongodb.username=sa
spring.data.mongodb.password=i3plus
spring.data.mongodb.port=27017
################ \u4E3B\u6570\u636E\u6E90 ################
##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316##############
impp.schedule.open=true
impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver
impp.schedule.datasource.jdbc-url=jdbc:mysql://10.193.30.20:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8
impp.schedule.datasource.username=root
impp.schedule.datasource.password=(mfLEu7@9kmfdsTy
impp.schedule.datasource.max-connections=20
#\u5B9A\u65F6\u4EFB\u52A1\u5728\u670D\u52A1\u542F\u52A8\u540E\u591A\u5C11\u79D2\u6267\u884C
impp.schedule.start.after-second=20
#\u662F\u5426\u96C6\u7FA4\u90E8\u7F72
impp.schedule.datasource.is-clustered=true
#\u6267\u884C\u68C0\u6D4B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u82E5\u5B95\u673A\u7531\u5176\u4ED6\u5B9A\u65F6\u5668\u6267\u884C
impp.schedule.datasource.cluster-checkin-interval=30000
#\u7EBF\u7A0B\u6570
impp.schedule.thread-count=10
#\u7EBF\u7A0B\u4F18\u5148\u7EA7\uFF081-10\uFF09\u9ED8\u8BA4\u4E3A5
impp.schedule.thread-priority=5
################ \u6570\u636E\u6C60\u8BBE\u7F6E ################
## \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF0C\u9ED8\u8BA4\u662F10
spring.datasource.hikari.maximum-pool-size=100
## \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570\u91CF
spring.datasource.hikari.minimum-idle=10
## \u7A7A\u95F2\u8FDE\u63A5\u5B58\u6D3B\u6700\u5927\u65F6\u95F4\uFF0C\u9ED8\u8BA4600000\uFF0810\u5206\u949F\uFF09
spring.datasource.hikari.idle-timeout=600000
## \u6B64\u5C5E\u6027\u63A7\u5236\u6C60\u4E2D\u8FDE\u63A5\u7684\u6700\u957F\u751F\u547D\u5468\u671F\uFF0C\u503C0\u8868\u793A\u65E0\u9650\u751F\u547D\u5468\u671F\uFF0C\u9ED8\u8BA41800000\u537330\u5206\u949F
spring.datasource.hikari.max-lifetime=1800000
## \u6570\u636E\u5E93\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4,\u9ED8\u8BA430\u79D2\uFF0C\u537330000
spring.datasource.hikari.connection-timeout=30000
################ JPA\u8BBE\u7F6E\u8BBE\u7F6E ################
# mysql
spring.jpa.database=MYSQL
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
##Sql-server##
#spring.jpa.database=sql_server
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect
##oracle##
#spring.jpa.database=oracle
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
# mysql
spring.datasource.validationQuery=SELECT 1
##Sql-server##
# spring.datasource.validationQuery=SELECT 1
##oracle##
# spring.datasource.validationQuery=SELECT 1 FROM DUAL
#ImprovedNamingStrategy / physical_naming_strategy java\u5C5E\u6027\u6620\u5C04\u5230\u6570\u636E\u5E93\u5B57\u6BB5\u65F6\u547D\u540D\u89C4\u5219
# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#\u8868\u5173\u7CFBcreate,create-drop,update,validate
spring.jpa.properties.hibernate.hbm2ddl.auto=none
#\u662F\u5426\u663E\u793Asql
spring.jpa.show-sql=true
################ \u6388\u6743\u914D\u7F6E ################
slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2
slm.app.id=20190513
###################\uFFFD\uFFFD\u013F\uFFFD\uFFFD\uFFFD\u077F\uFFFD\u02B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B7\uFFFD\uFFFD##################################################
project.entity.path=cn.estsh.i3plus.pojo
impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver
impp.write.datasource.jdbc-url=jdbc:mysql://10.193.30.20:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
impp.write.datasource.username=root
impp.write.datasource.password=(mfLEu7@9kmfdsTy
impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource
impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver
impp.read.datasource.jdbc-url=jdbc:mysql://10.193.30.20:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
impp.read.datasource.username=root
impp.read.datasource.password=(mfLEu7@9kmfdsTy
#impp.schedule.scheduleType=xxljob
#xxl.job.admin.addresses=http://10.193.30.22:10010/xxl-job-admin
#### xxl-job, access token
#xxl.job.accessToken=
#### xxl-job executor appname
##xxl.job.executor.appname=${project.name}
#xxl.job.executor.appname=i3mes-castle
#### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
#xxl.job.executor.address=
#### xxl-job executor server-info
#xxl.job.executor.ip=172.24.96.1
##xxl.job.executor.ip=
##xxl.job.executor.port=9999
#xxl.job.executor.port=8888
#### xxl-job executor log-path
#xxl.job.executor.logpath=
#### xxl-job executor log-retention-days
#xxl.job.executor.logretentiondays=10
#xxl.job.basePackage=cn.estsh.i3plus.ext.mes.apiservice.schedulejob
impp.app.ext.base-packages=cn.estsh.i3plus.ext.mes.apiservice

@ -39,7 +39,7 @@ impp.yfas.datasource.password=estsh123
#impp.sweb.datasource.username=root
#impp.sweb.datasource.password=estsh123
#Pisces数据源
#Pisces\u6570\u636E\u6E90
impp.pisces.datasource.isopen=true
impp.pisces.datasource.alias=piscesDataSource
impp.pisces.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
@ -47,7 +47,7 @@ impp.pisces.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMetho
impp.pisces.datasource.username=sa
impp.pisces.datasource.password=sahasnopassword
#Pisces数据源
#Pisces\u6570\u636E\u6E90
impp.pisces1.datasource.isopen=true
impp.pisces1.datasource.alias=piscesDataSource
impp.pisces1.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
@ -55,10 +55,18 @@ impp.pisces1.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMeth
impp.pisces1.datasource.username=sa
impp.pisces1.datasource.password=sahasnopassword
#Pisces中间表数据源
impp.pisces1.datasource.isopen=true
impp.pisces1.datasource.alias=pisces1DataSource
impp.pisces1.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
impp.pisces1.datasource.jdbc-url=jdbc:sqlserver://172.28.16.73:1433;SelectMethod=cursor;DatabaseName=YFMES_DATACENTER;applicationIntent=schemaOnly;selectedSchema=MES
impp.pisces1.datasource.username=sa
impp.pisces1.datasource.password=sahasnopassword
#Pisces2\u6570\u636E\u6E90
impp.pisces2.datasource.isopen=true
impp.pisces2.datasource.alias=pisces2DataSource
impp.pisces2.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
impp.pisces2.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMethod=cursor;DatabaseName=PiscesTest;applicationIntent=schemaOnly;selectedSchema=MES
impp.pisces2.datasource.username=sa
impp.pisces2.datasource.password=sahasnopassword
#Pisces3\u6570\u636E\u6E90
impp.pisces3.datasource.isopen=true
impp.pisces3.datasource.alias=pisces3DataSource
impp.pisces3.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
impp.pisces3.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMethod=cursor;DatabaseName=PiscesTest;applicationIntent=schemaOnly;selectedSchema=MES
impp.pisces3.datasource.username=sa
impp.pisces3.datasource.password=sahasnopassword

@ -0,0 +1,153 @@
package cn.estsh.i3plus.ext.mes.pojo.model.report;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.util.StringUtils;
import java.io.Serializable;
@Data
@ApiModel("检验产品数据总报表")
public class MesInspectionProductDataAmountReportModel implements Serializable {
private static final long serialVersionUID = -2963567250001047604L;
//-----------查询条件-------------
@ApiParam(value = "组织代码")
private String organizeCode;
@ApiParam(value = "检验日期起始")
private String inspectionDateStart;
@ApiParam(value = "检验日期截止")
private String inspectionDateEnd;
@ApiParam(value = "NC判定时间起始")
private String modifyDateTimeStart;
@ApiParam(value = "NC判定时间截止")
private String modifyDateTimeEnd;
@ApiParam(value = "零件号")
private String partNo;
@ApiParam(value = "零件名称")
private String partName;
@ApiParam(value = "零件条码")
private String productSn;
@ApiParam("生产线代码")
private String workCenterCode;
@ApiParam("检验人")
private String createUser;
@ApiParam("检验结果")
private Integer inspectionStatus;
@ApiParam("NC判定结果")
private Integer ncStatus;
@ApiParam("NC处理结果")
private Integer taskStatus;
@ApiParam("缺陷位置")
private String defectLocation;
@ApiParam("正面反面(方向)")
private Integer frontBack;
@ApiParam("缺陷描述")
private String defectTypeName;
@ApiParam("责任库区")
private String umlgo;
@ApiParam("返工人")
private String modifyUser;
@ApiParam("返工单号")
private String reworkOrder;
@ApiParam("零件类型")
private String partTypeCode;
//-----------展示列-------------
@ApiParam(value = "id")
private Long id;
@ApiParam(value = "pid")
private Long pid;
@ApiParam(value = "检验日期")
private String inspectionDate;
@ApiParam(value = "条码")
private String sn;
@ApiParam("数量")
private Integer qty;
@ApiParam("生产线名称")
private String workCenterName;
@ApiParam("检验结果(名称)")
private String inspectionStatusName;
@ApiParam("方向")
private String frontBackName;
@ApiParam("NC判定结果(名称)")
private String ncStatusName;
@ApiParam("源库区")
private String lgort;
@ApiParam("NC处理结果(名称)")
private String taskStatusName;
@ApiParam(value = "NC判定时间")
private String modifyDatetime;
@ApiParam("NC判定人")
private String ncModifyUser;
@ApiParam("zrsum")
private String zrsum;
public MesInspectionProductDataAmountReportModel() {}
public MesInspectionProductDataAmountReportModel(Long id, Long pid, String inspectionDate, String modifyDatetime, String partName, String partNo, String sn, Integer qty, String workCenterCode,
String createUser, String ncModifyUser, Integer inspectionStatus, Integer ncStatus, String defectLocation, Integer frontBack, String defectTypeName,
String lgort, String umlgo, String zrsum, Integer taskStatus, String reworkOrder, String modifyUser, String partTypeCode, String workCenterName) {
this.id = id;
this.pid = pid;
this.inspectionDate = inspectionDate;
this.modifyDatetime = modifyDatetime;
this.partName = partName;
this.partNo = partNo;
this.sn = sn;
this.qty = qty;
this.workCenterCode = workCenterCode;
this.createUser = createUser;
this.ncModifyUser = ncModifyUser;
this.inspectionStatus = inspectionStatus;
this.ncStatus = ncStatus;
this.defectLocation = defectLocation;
this.frontBack = frontBack;
this.defectTypeName = defectTypeName;
this.lgort = lgort;
this.umlgo = umlgo;
this.zrsum = zrsum;
this.taskStatus = taskStatus;
this.reworkOrder = reworkOrder;
this.modifyUser = modifyUser;
this.partTypeCode = partTypeCode;
this.workCenterName = workCenterName;
}
}

@ -0,0 +1,76 @@
package cn.estsh.i3plus.ext.mes.pojo.model.report;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.util.StringUtils;
import java.io.Serializable;
@Data
@ApiModel("加工记录合并批量汇报查询报表")
public class MesProductionRecordReportExtModel implements Serializable {
private static final long serialVersionUID = 7580273561023637832L;
@ApiParam(value = "组织代码")
private String organizeCode;
@ApiParam(value = "物料编号")
private String partNo;
@ApiParam(value = "物料名称")
private String partName;
@ApiParam("生产线代码")
private String workCenterCode;
@ApiParam(value = "工位代码")
private String workCellCode;
@ApiParam(value = "数量")
private Integer qty;
@ApiParam("班次代码")
private String shiftCode;
@ApiParam(value = "设备代码")
public String equipmentCode;
@ApiParam("设备名称")
private String equipmentName;
@ApiParam(value = "汇报状态")
private String reportStatusList;
@ApiParam(value = "完成时间开始日期")
private String completeDateTimeStart;
@ApiParam(value = "完成时间结束日期")
private String completeDateTimeEnd;
//1=加工记录 2=工单日志批量汇报
@ApiParam("数据来源")
private Integer dataSource;
@ApiParam("汇报状态")
private Integer reportStatus;
@ApiParam("汇报状态名称")
private String reportStatusName;
public MesProductionRecordReportExtModel() {}
public MesProductionRecordReportExtModel(Object workCenterCode, Object workCellCode, Object partNo, Object partName, Object shiftCode, Object equipmentCode, Object equipmentName, Object reportStatus, Object dataSource, Object qty) {
if (!StringUtils.isEmpty(workCenterCode)) this.workCenterCode = (String) workCenterCode;
if (!StringUtils.isEmpty(workCellCode)) this.workCellCode = (String) workCellCode;
if (!StringUtils.isEmpty(partNo)) this.partNo = (String) partNo;
if (!StringUtils.isEmpty(partName)) this.partName = (String) partName;
if (!StringUtils.isEmpty(shiftCode)) this.shiftCode = (String) shiftCode;
if (!StringUtils.isEmpty(equipmentCode)) this.equipmentCode = (String) equipmentCode;
if (!StringUtils.isEmpty(equipmentName)) this.equipmentName = (String) equipmentName;
if (!StringUtils.isEmpty(reportStatus)) this.reportStatus = Integer.valueOf(reportStatus.toString());
if (!StringUtils.isEmpty(dataSource)) this.dataSource = Integer.valueOf(dataSource.toString());
if (!StringUtils.isEmpty(qty)) this.qty = Double.valueOf(qty.toString()).intValue();
}
}

@ -35,6 +35,8 @@ public class MesExtConstWords {
public static final String EQUIPMENT_CODE = "equipmentCode";
// 设备名称
public static final String EQUIPMENT_NAME = "equipmentName";
// 设备代码
public static final String EQUIP_CODE = "equipCode";
// 开模记录ID
public static final String MOULD_RECORD_ID = "mouldRecordId";
// 设备数据变量ID
@ -159,6 +161,10 @@ public class MesExtConstWords {
public static final String PLAN_START_TIME = "planStartTime";
//计划结束时间
public static final String PLAN_END_TIME = "planEndTime";
//上线时间
public static final String ONLINE_TIME = "onlineTime";
//下线时间
public static final String OFFLINE_TIME = "offlineTime";
//执行开始日期
public static final String BEGIN_DATE = "beginDate";
//执行结束日期
@ -177,6 +183,8 @@ public class MesExtConstWords {
public static final String SYNC_TO_WMS = "syncToWms";
//BOM版本
public static final String BOM_VERSION = "bomVersion";
//BOM代码
public static final String BOM_CODE = "bomCode";
//生效时间
public static final String EFF_START_TIME = "effStartTime";
//失效时间
@ -199,6 +207,40 @@ public class MesExtConstWords {
public static final String PULL_NAME = "pullName";
//拉动地址
public static final String PULL_ADDR = "pullAddr";
//点检单id
public static final String SPOT_CHECK_ORDER_ID = "spotCheckOrderId";
//检验结果
public static final String INSPECTION_STATUS = "inspectionStatus";
//NC判定结果
public static final String NC_STATUS = "ncStatus";
//缺陷位置
public static final String DEFECT_LOCATION = "defectLocation";
//正面反面"
public static final String FRONT_BACK = "frontBack";
//缺陷名称
public static final String DEFECT_TYPE_NAME = "defectTypeName";
//目标库存地点
public static final String UMLGO = "umlgo";
//任务状态
public static final String TASK_STATUS = "taskStatus";
//返工单据号
public static final String REWORK_ORDER = "reworkOrder";
//零件类别
public static final String PART_TYPE_CODE = "partTypeCode";
//包装代码
public static final String PACKAGE_CODE = "packageCode";
//统计方式
public static final String GENERATE_TYPE = "generateType";
//箱类别代号
public static final String PACK_CODE = "packCode";
//包装条码编码规则
public static final String PACKAGE_BARCODE_RULE = "packageBarcodeRule";
//包装条码模板
public static final String PACKAGE_TEMPLATE = "packageTemplate";
//是否默认
public static final String DEFAULT_FLAG = "defaultFlag";
//零件类型
public static final String PART_TYPE = "partType";
//时间[开始/结束]条件
public static final String START_TIME_START = "startTimeStart";
@ -209,6 +251,10 @@ public class MesExtConstWords {
public static final String CREATE_DATE_TIME_END = "createDatetimeEnd";
public static final String MODIFY_DATE_TIME_START = "modifyDatetimeStart";
public static final String MODIFY_DATE_TIME_END = "modifyDatetimeEnd";
public static final String COMPLETE_DATE_TIME_START = "completeDateTimeStart";
public static final String COMPLETE_DATE_TIME_END = "completeDateTimeEnd";
public static final String INSPECTION_DATE_START = "inspectionDateStart";
public static final String INSPECTION_DATE_END = "inspectionDateEnd";
//0
public static final int ZERO = 0;
@ -218,6 +264,8 @@ public class MesExtConstWords {
public static final int ONE = 1;
//"1"
public static final String ONE_STR = "1";
//4
public static final Integer FOUR = 4;
// 10
public static final Integer TEN = 10;
//""
@ -398,5 +446,12 @@ public class MesExtConstWords {
//非排序工单关闭是否关闭试制单
public static final String CLOSE_P_WORK_ORDER = "CLOSE_P_WORK_ORDER";
//MES汇报查询BOM是否携带结束查询条件
public static final String MES_REPORT_FIND_BOM_WITH_EFFENDTIME = "MES_REPORT_FIND_BOM_WITH_EFFENDTIME";
//螺钉包保存生产版本标记
public static final String SAVE_PRODUCT_VERSION_FLAG = "ZFBT";
//排序线不能做报工调整ESD属性类型
public static final String NOT_ALLOW_WRITE_OFF = "NOT_ALLOW_WRITE_OFF";
}

Loading…
Cancel
Save