Merge remote-tracking branch 'origin/master'

liweidong
wusiyu 2 days ago
commit ec2500cf70
  1. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java
  2. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java
  3. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/AuditFile.java
  4. 9
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTask.java
  5. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/AuditFileVO.java
  6. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/PriceMatcher.java
  7. 21
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataCheckerSealClient.java
  8. 13
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataCheckerSealClientFallback.java
  9. 1
      blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/enums/WorkOrderEnum.java
  10. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/CraftAbilityController.java
  11. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/cost/controller/SubjectFeeDetailController.java
  12. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.xml
  13. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsCraftController.java
  14. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartMapper.xml
  15. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java
  16. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java
  17. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java
  18. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml
  19. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java
  20. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderCraftServiceImpl.java
  21. 70
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  22. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/pojo/entity/FmProjectApprovalConfigEntity.java
  23. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/pojo/entity/FmProjectMilestoneEntity.java
  24. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/service/impl/FmProjectApplicationServiceImpl.java
  25. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/service/impl/FmProjectApprovalConfigServiceImpl.java
  26. 69
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/service/impl/FmProjectMilestoneServiceImpl.java
  27. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java
  28. 44
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml
  29. 56
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  30. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  31. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java
  32. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java
  33. 115
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/LiquidTankExcel.java
  34. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/AuditFileMapper.java
  35. 42
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/AuditFileMapper.xml
  36. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/InspectionTemplateMapper.xml
  37. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IAuditFileService.java
  38. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/AuditFileServiceImpl.java
  39. 719
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java
  40. BIN
      blade-service/blade-desk/src/main/resources/Excel/QA/槽液信息模板.xls
  41. 22
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataCheckerSealClient.java
  42. 9
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataCheckerSealMapper.java
  43. 9
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataCheckerSealMapper.xml
  44. 7
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataCheckerSealService.java
  45. 21
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataCheckerSealServiceImpl.java
  46. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/EquipAbilityMapper.xml
  47. 14
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/SameTroughMapper.xml
  48. 8
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/SintTempCurveMapper.xml
  49. 39
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java

@ -52,10 +52,10 @@ public class PriceSheetVO {
private String stairflag;
/**
* 阶梯价标记key
* 阶梯价标记value
*/
@Schema(description = "阶梯价标记key")
private String stairflagkey;
@Schema(description = "阶梯价标记value")
private String stairflagvalue;
/**
* 阶梯上限

@ -120,6 +120,7 @@ public class WorkPlan extends BaseEntity {
* 加工班组
*/
@Schema(description = "加工班组")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Long makeTeam;
/**
* 是否外协
@ -207,6 +208,7 @@ public class WorkPlan extends BaseEntity {
*
*/
@Schema(description = "附属班组")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Long subsidiaryTeam;
/**
* 检验颜色标识

@ -116,4 +116,10 @@ public class AuditFile extends BaseEntity {
@Schema(description = "产品应用领域")
@JsonSerialize(using = Integer0ToEmptyStringSerializer.class)
private Integer prodApplyArea;
/**
* 工艺能力ID
*/
@Schema(description = "工艺能力ID")
private Long caId;
}

@ -3,6 +3,8 @@
*/
package org.springblade.desk.quality.pojo.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -410,11 +412,13 @@ public class LiquidTankTask extends BaseEntity {
* 实测温度
*/
@Schema(description = "实测温度")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Double temperatureActual;
/**
* 实测PH值
*/
@Schema(description = "实测PH值")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Double phActual;
/**
* 复测电导率测量值
@ -425,11 +429,13 @@ public class LiquidTankTask extends BaseEntity {
* 首次电导率测量值
*/
@Schema(description = "首次电导率测量值")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Double conductivityFirstTestValue;
/**
* 首次测量值
*/
@Schema(description = "首次测量值")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Double firstTestValue;
/**
* 复检测量值
@ -440,6 +446,7 @@ public class LiquidTankTask extends BaseEntity {
* 首次化验时间
*/
@Schema(description = "首次化验时间")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private LocalDateTime firstTestDate;
/**
* 复检化验时间
@ -475,11 +482,13 @@ public class LiquidTankTask extends BaseEntity {
* 实际加药量
*/
@Schema(description = "实际加药量")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Double actualAddValue;
/**
* 加药后理论值
*/
@Schema(description = "加药后理论值")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Double afterAddTheoryValue;
/**
* 结束原因

@ -25,4 +25,7 @@ public class AuditFileVO extends AuditFile {
@Schema(description = "base")
private BaseEntityVO base;
@Schema(description = "工艺能力")
private String caName;
}

@ -1,5 +1,7 @@
package org.springblade.desk.util;
import com.alibaba.excel.util.StringUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashSet;
@ -45,6 +47,9 @@ public class PriceMatcher {
* 判断备注是否包含目标价格
*/
private static boolean containsPrice(String remark, BigDecimal targetPrice) {
if(StringUtils.isEmpty(remark)){
return false;
}
// 正则表达式匹配价格范围或单价
// 匹配如:350.01-360、467.5、100.5-200.8
String regex = "(\\d+(?:\\.\\d+)?)(?:-(\\d+(?:\\.\\d+)?))?";

@ -0,0 +1,21 @@
package org.springblade.erpdata.feign;
import org.springblade.common.constant.LauncherConstant;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(
value = LauncherConstant.APPLICATION_ERP_DATA_NAME,
fallback = IErpDataCheckerSealClientFallback.class
)
public interface IErpDataCheckerSealClient {
String API_PREFIX = "/feign/erpdata/checkerseal";
String GET_CHECK_MAN_BY_NEW_ERP_MES = API_PREFIX + "/getCheckManByNewErpMes";
@GetMapping(GET_CHECK_MAN_BY_NEW_ERP_MES)
String getCheckManByNewErpMes(@RequestParam("userName") String userName);
}

@ -0,0 +1,13 @@
package org.springblade.erpdata.feign;
import org.springframework.stereotype.Component;
@Component
public class IErpDataCheckerSealClientFallback implements IErpDataCheckerSealClient{
@Override
public String getCheckManByNewErpMes(String userName) {
return null;
}
}

@ -35,6 +35,7 @@ public enum WorkOrderEnum {
STATUS_PART_TYPE_1("壳体最大外径", 1),
STATUS_PART_TYPE_2("玻璃饼直径", 2),
STATUS_PART_TYPE_3("芯数", 3),
STATUS_PART_TYPE_4("涂色标", 4),
;
final String name;
final int code;

@ -146,9 +146,9 @@ public class CraftAbilityController extends BladeController {
qw.last("ORDER BY UPDATE_TIME DESC ");
IPage<CraftAbilityEntity> pages = craftAbilityService.page(Condition.getPage(query), qw);
IPage<CraftAbilityVO> pagesVO = CraftAbilityWrapper.build().pageVO(pages);
pagesVO.getRecords()
.stream()
.collect(Collectors.toList());
//pagesVO.getRecords()
// .stream()
// .collect(Collectors.toList());
return R.data(pagesVO);
// IPage<CraftAbilityEntity> pages = craftAbilityService.page(Condition.getPage(query), Condition.getQueryWrapper(craftAbility, CraftAbilityEntity.class));

@ -191,6 +191,10 @@ public class SubjectFeeDetailController extends BladeController {
if ("辅助人员材料费用".equals(subjectName)) {
iterator.remove(); // 只有迭代器的 remove 才安全
}
// 如果“erp作业中心材料费用”,删除
if ("erp作业中心材料费用".equals(subjectName)) {
iterator.remove(); // 只有迭代器的 remove 才安全
}
}
}
return R.data(list);

@ -25,6 +25,7 @@
<result column="REMARKS" property="remarks"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
<result column="JC_ID" property="jcId"/>
</resultMap>
@ -35,6 +36,9 @@
<if test="param2.month != null and param2.month != ''">
and MONTH = #{param2.month}
</if>
<if test="param2.jcId != null and param2.jcId != ''">
and JC_ID = #{param2.jcId}
</if>
</where>
</select>

@ -151,7 +151,7 @@ public class DsCraftController extends BladeController {
*/
@GetMapping("/listByPart")
@ApiOperationSupport(order = 1)
@Operation(summary = "获取版本号", description = "传入零件ID")
@Operation(summary = "根据零件ID查询工艺", description = "传入零件ID")
public R<List<DsCraftVO>> listByPart(Long partId) {
return R.data(dsCraftService.selectDsCraftByPartId(partId));
}
@ -183,4 +183,17 @@ public class DsCraftController extends BladeController {
return R.status(dsCraftService.craftBatchCopy(craftVO));
}
/**
* 根据零件号查询工艺
*/
@GetMapping("/listByPartCode")
@ApiOperationSupport(order = 1)
@Operation(summary = "根据零件号查询工艺", description = "传入零件partCode")
public R<List<DsCraftVO>> listByPartCode(String partCode) {
return R.data(dsCraftService.selectDsCraftByPartCode(partCode));
}
}

@ -213,7 +213,7 @@
</select>
<select id="selectDsPartByPatCode" resultType="org.springblade.desk.dashboard.pojo.entity.DsPartEntity">
select * from DS_PART where PART_CODE = #{partCode}
select * from DS_PART where PART_CODE = #{partCode} AND IS_DELETED = 0
</select>
<select id="selectDsPartLoseEfficacy" resultType="org.springblade.desk.dashboard.pojo.entity.DsPartEntity">

@ -222,4 +222,11 @@ public interface IDsCraftService extends BaseService<DsCraftEntity> {
* @return
*/
boolean craftBatchCopy(DsCraftVO craftVO);
/**
* 根据零件号查询工艺
* @param partCode
* @return
*/
List<DsCraftVO> selectDsCraftByPartCode(String partCode);
}

@ -521,4 +521,18 @@ public class DsCraftServiceImpl extends BaseServiceImpl<DsCraftMapper, DsCraftEn
return true;
}
@Override
public List<DsCraftVO> selectDsCraftByPartCode(String partCode) {
List<DsPartEntity> dsPartEntityList = partService.selectDsPartByPatCode(partCode);
if(CollectionUtils.isEmpty(dsPartEntityList)){
return List.of();
}
DsPartEntity dsPart = dsPartEntityList.get(0);
if(dsPart != null && dsPart.getId() != null){
return this.selectDsCraftByPartId(dsPart.getId());
}
return List.of();
}
}

@ -83,12 +83,12 @@ public class OemOrderController extends BladeController {
}
/**
* 协订单收回
* 协订单收回
*/
@PostMapping("/oemTakeBack")
@ApiOperationSupport(order = 2)
@Operation(summary = "协订单收回", description = "")
@ApiLog("协订单 收回")
@Operation(summary = "协订单收回", description = "")
@ApiLog("协订单 收回")
public R oemTakeBack(@Valid @RequestBody OemTakeBack oemTakeBack) {
return workOrderRunService.oemTakeBack(oemTakeBack);
}

@ -55,6 +55,14 @@
<if test="query.manual != null and query.manual != ''">
AND mop.MANUAL = #{query.manual}
</if>
<if test="query.paName != null and query.paName != ''">
AND bps.NAME LIKE CONCAT('%', CONCAT(#{query.paName}, '%'))
</if>
<if test="query.statementCategory != null and query.statementCategory != ''">
AND mosc.STATEMENT_CATEGORY LIKE CONCAT('%', CONCAT(#{query.statementCategory}, '%'))
</if>
ORDER BY bps.CODE ASC
</select>

@ -616,6 +616,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
entity.setUnitPrice(null);
entity.setQuotation("");
entity.setUpdateTime(new Date());
entity.setSettleTime(new Date());
return entity;
})
.collect(Collectors.toList());
@ -635,6 +638,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
.set(OemStatementEntity::getRosStatus, entity.getRosStatus())
.set(OemStatementEntity::getMemo, entity.getMemo())
.set(OemStatementEntity::getUpdateTime, entity.getUpdateTime())
.set(OemStatementEntity::getSettleTime, entity.getSettleTime())
.eq(OemStatementEntity::getId, entity.getId());
baseMapper.update(null, wrapper);
@ -2067,11 +2071,11 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
private boolean ruleTieredPricing(StatementVO statementVO, PriceSheetVO priceSheet) {
//匹配阶梯价
// 非阶梯价直接返回
if ("1".equals(priceSheet.getStairflagkey())) {
if ("1".equals(priceSheet.getStairflag())) {
return true;
}
// 单批阶梯价(按件数)
else if ("4".equals(priceSheet.getStairflagkey())) {
else if ("4".equals(priceSheet.getStairflag())) {
try {
double makeQty = statementVO.getMakeQty().doubleValue();
double lower = Double.parseDouble(priceSheet.getLower());
@ -2082,7 +2086,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
}
// 单批阶梯价(按单件面积)
else if ("5".equals(priceSheet.getStairflagkey())) {
else if ("5".equals(priceSheet.getStairflag())) {
try {
double ypArea = statementVO.getYpArea().doubleValue();
double lower = Double.parseDouble(priceSheet.getLower());
@ -2093,7 +2097,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
}
// 单批阶梯价(按单批面积)
else if ("6".equals(priceSheet.getStairflagkey())) {
else if ("6".equals(priceSheet.getStairflag())) {
try {
double totalArea = statementVO.getTotalArea().doubleValue();
double lower = Double.parseDouble(priceSheet.getLower());

@ -15,10 +15,7 @@ import org.springblade.desk.basic.pojo.entity.BsAssignEntity;
import org.springblade.desk.basic.pojo.entity.Oem;
import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity;
import org.springblade.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.basic.service.IBsAssignService;
import org.springblade.desk.basic.service.IOemCraftAbilityService;
import org.springblade.desk.basic.service.IOemService;
import org.springblade.desk.basic.service.IWorkCenterService;
import org.springblade.desk.basic.service.*;
import org.springblade.desk.dashboard.pojo.entity.BsCraftAbilityEntity;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
@ -36,6 +33,7 @@ import org.springblade.desk.order.pojo.entity.YieldOrderCraft;
import org.springblade.desk.order.service.IYieldOrderAssignSteerService;
import org.springblade.desk.order.service.IYieldOrderCraftService;
import org.springblade.desk.order.service.IYieldOrderDailyAssignService;
import org.springblade.scheduling.pojo.entity.CraftAbilityEntity;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@ -63,6 +61,7 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
private final IBsProcessSetService processSetService;
private final IBsTeamSetService teamSetService;
private final YieldOrderMapper yieldOrderMapper;
private final ICraftAbilityService iCraftAbilityService;
@Override
public IPage<YieldOrderCraft> selectPage(IPage<YieldOrderCraft> page, YieldOrderCraft entity) {
@ -539,6 +538,7 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
// 对有能力做这个单子厂家按照偏差因子排序
if (ocList != null && ocList.size() > 0) {
List<YieldOrderAssignSteer> bsPlanAssignSteerList = assignSteerService.sortDataByFactor(ocList, hostCaId);
CraftAbilityEntity craftAbility = iCraftAbilityService.getById(hostCaId);
for (YieldOrderAssignSteer bsPlanAssignSteer : bsPlanAssignSteerList) {
oemCustomer = oemService.getById(bsPlanAssignSteer.getOemId());
String oemCode = oemCustomer.getCode();
@ -556,6 +556,10 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
}
}
if ("0".equals(craftAbility.getWtId())) {
aBoolean = true;
}
if (aBoolean) {
oemCustomer.setLimitType(limitType);
oemCustomer.setPartCodeYesOrNo(bool);

@ -476,11 +476,79 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
if (!result) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo("未查询到零件信息!");
yieldOrder.setValidationMomo(yieldOrder.getPartCode()+": 未查询到零件信息!");
this.updateById(yieldOrder);
return null;
}
}
// 烧结订单 需要校验子件必须包含【玻璃饼、壳体、插针、石墨模】
if(yieldOrder.getYieldType().equals(YieldOrderEnum.YIELD_TYPE_2.getCode())){
if(partEntity == null){
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(yieldOrder.getPartCode()+": 未查询到零件信息!");
this.updateById(yieldOrder);
return null;
}
List<DsPartRelationEntity> partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId());
List<Long> childPartIdList = partRelationEntityList.stream()
.map(DsPartRelationEntity::getChildPartId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(childPartIdList)) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(partEntity.getPartCode()+" :未查询到子件信息");
this.updateById(yieldOrder);
return null;
}
List<DsPartEntity> dsPartEntityList = dsPartService.listByIds(childPartIdList);
// 收集所有子件的
Set<Integer> sinTerTypeSet = dsPartEntityList.stream()
.map(DsPartEntity::getSinTerType)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
if(CollectionUtils.isEmpty(sinTerTypeSet)){
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(partEntity.getPartCode()+" :子件类型为空");
this.updateById(yieldOrder);
return null;
}
// 校验必须包含的零件类型
List<Integer> requiredTypes = Arrays.asList(DsPartConstant.SIN_TER_TYPE_CZ, DsPartConstant.SIN_TER_TYPE_KT, DsPartConstant.SIN_TER_TYPE_BLB, DsPartConstant.SIN_TER_TYPE_SMM);
List<Integer> missingTypes = new ArrayList<>();
for (Integer requiredType : requiredTypes) {
if (!sinTerTypeSet.contains(requiredType)) {
missingTypes.add(requiredType);
}
}
if (!missingTypes.isEmpty()) {
String missingDesc = missingTypes.stream()
.map(type -> {
if (type.equals(DsPartConstant.SIN_TER_TYPE_CZ)) return "插针";
if (type.equals(DsPartConstant.SIN_TER_TYPE_KT)) return "壳体";
if (type.equals(DsPartConstant.SIN_TER_TYPE_BLB)) return "玻璃饼";
if (type.equals(DsPartConstant.SIN_TER_TYPE_SMM)) return "石墨模";
return "未知类型(" + type + ")";
})
.collect(Collectors.joining("、"));
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo("零件:"+partEntity.getPartCode()+" 缺少子件类型: " + missingDesc);
this.updateById(yieldOrder);
return null;
}
}
Integer rank;
// 先判断是否是热表订单 不是返回二级工艺

@ -63,7 +63,7 @@ public class FmProjectApprovalConfigEntity extends BaseEntity {
@Schema(description = "状态:0-禁用,1-启用")
private Integer status;
private Integer sortOrde;
private Integer sortOrder;
// ==================== 节点编码常量 ====================
/**

@ -83,6 +83,8 @@ public class FmProjectMilestoneEntity extends BaseEntity {
*/
@Schema(description = "里程碑负责人")
private String milestoneMan;
@Schema(description = "里程碑负责人ID ")
private String milestoneManId;
/**
* 里程碑输出物
*/
@ -122,6 +124,7 @@ public class FmProjectMilestoneEntity extends BaseEntity {
private Double score;
/**
* 执行结果
* -- mes 中存储执行类型改执行类型存储字段executeType该字段弃用
*/
@Schema(description = "执行结果")
private Short executeResult=0;
@ -147,6 +150,9 @@ public class FmProjectMilestoneEntity extends BaseEntity {
*/
@Schema(description = "核查人")
private String checkMan;
@Schema(description = "核查人ID")
private String checkManId;
/**
* 核查时间
*/
@ -243,21 +249,21 @@ public class FmProjectMilestoneEntity extends BaseEntity {
/**
* 执行类型
*/
public static Short EXECUTE_RESULT_NO = 0;
public static String EXECUTE_RESULT_NO = "0";
/**
* 执行类型 延期
*/
public static Short EXECUTE_RESULT_YQ = 1;
public static String EXECUTE_RESULT_YQ = "1";
/**
* 执行类型 终止
*/
public static Short EXECUTE_RESULT_ZZ = 2;
public static String EXECUTE_RESULT_ZZ = "2";
/**
* 执行类型 完成
*/
public static Short EXECUTE_RESULT_JXSQ = 3;
public static String EXECUTE_RESULT_JXSQ = "3";
public static Map<Short, String> executeResultMap = new HashMap<>(3);
public static Map<String, String> executeResultMap = new HashMap<>(3);
static {
executeResultMap.put(EXECUTE_RESULT_NO, "无");
@ -267,7 +273,7 @@ public class FmProjectMilestoneEntity extends BaseEntity {
}
public String getExecuteResultTitle() {
return executeResultMap.get(this.executeResult);
return executeResultMap.get(this.executeType);
}

@ -253,7 +253,7 @@ public class FmProjectApplicationServiceImpl extends BaseServiceImpl<FmProjectAp
Objects.isNull(fmProjectApplication.getApprovalStatus())) {
throw new RuntimeException("参数错误");
}
if (!fmProjectApplication.getApprovalStatus().equals(FmProjectApplicationEntity.ApprovalStatusEnum.STATUS_REJECTED.getCode()) ||
if (!fmProjectApplication.getApprovalStatus().equals(FmProjectApplicationEntity.ApprovalStatusEnum.STATUS_REJECTED.getCode()) &&
!fmProjectApplication.getApprovalStatus().equals(FmProjectApplicationEntity.ApprovalStatusEnum.STATUS_IN_PROGRESS.getCode())) {
throw new RuntimeException("审批结果参数错误");
}

@ -98,7 +98,7 @@ public class FmProjectApprovalConfigServiceImpl extends BaseServiceImpl<FmProjec
public List<FmProjectApprovalConfigEntity> getList() {
return list(Wrappers.lambdaQuery(FmProjectApprovalConfigEntity.class)
.eq(FmProjectApprovalConfigEntity::getStatus, FmProjectApprovalConfigEntity.STATUS_ENABLED)
.orderByDesc(FmProjectApprovalConfigEntity::getSortOrde));
.orderByDesc(FmProjectApprovalConfigEntity::getSortOrder));
}
}

@ -63,6 +63,8 @@ import java.util.Date;
import java.util.List;
import java.util.Objects;
import static org.springblade.desk.process.pojo.entity.FmProjectMilestoneEntity.EXECUTE_RESULT_NO;
/**
* 项目里程碑 服务实现类
*
@ -99,19 +101,19 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
@Override
public boolean sendCheck(FmProjectMilestoneEntity fmProjectMilestone) {
if (BeanUtil.isEmpty(fmProjectMilestone) || Objects.isNull(fmProjectMilestone.getId())) {
throw new ServiceException("参数错误");
throw new RuntimeException("参数错误");
}
// TODO: 2026/5/27 是否手动更新
FmProjectMilestoneEntity entity = getById(fmProjectMilestone.getId());
if (BeanUtil.isEmpty(entity)) {
throw new ServiceException("里程碑信息获取失败");
throw new RuntimeException("里程碑信息获取失败");
}
if (Objects.isNull(fmProjectMilestone.getCheckResult())) {
throw new ServiceException("请选择核查结果");
throw new RuntimeException("请选择核查结果");
}
if (!FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult()) ||
if (!FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult()) &&
!FmProjectMilestoneEntity.CHECK_RESULT_NO.equals(fmProjectMilestone.getCheckResult())) {
throw new ServiceException("请选择核查结果");
throw new RuntimeException("请选择核查结果");
}
@ -119,7 +121,12 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
if (!entity.getNextApproverId().equals(AuthUtil.getUserId())) {
throw new ServiceException("您不是当前里程碑的核查人");
}
fmProjectMilestone.setCheckMan(entity.getNextApproverId().toString());
R<User> userR1 = userClient.userInfoById(entity.getNextApproverId());
if (!userR1.isSuccess() || BeanUtil.isEmpty(userR1.getData())) {
throw new RuntimeException("当前里程碑的核查人不存在");
}
fmProjectMilestone.setCheckMan(userR1.getData().getRealName());
fmProjectMilestone.setCheckManId(entity.getNextApproverId().toString());
// 如果核查通过,需要流转到核准节点
if (FmProjectMilestoneEntity.CHECK_RESULT_OK.equals(fmProjectMilestone.getCheckResult())) {
@ -180,7 +187,7 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
fmProjectMilestone.setEvaluate(fmProjectMilestone.getEvolve());
// 如果评价分数在75分以上,并且执行类型不是延期。则代表本节点已经完成
if (score < 75 && !FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteResult())) {
if (score < 75 && !FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteType())) {
fmProjectMilestone.setCheckResult(FmProjectMilestoneEntity.CHECK_RESULT_TREAT);
baseMapper.updateById(fmProjectMilestone);
return true;
@ -188,7 +195,7 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
baseMapper.updateById(fmProjectMilestone);
// 如果选择的是延期,则生成一条新的里程碑,此里程碑关闭
if (FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteResult())) {
if (FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteType())) {
FmProjectMilestoneEntity projectMilestoneClone = BeanUtil.copyProperties(fmProjectMilestone, FmProjectMilestoneEntity.class);
projectMilestoneClone.setId(null);
projectMilestoneClone.setDelayDate(Boolean.TRUE);
@ -207,6 +214,7 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
projectMilestoneClone.setGrade((short) 0);
projectMilestoneClone.setScore((double) 0);
projectMilestoneClone.setExecuteResult((short) 0);
projectMilestoneClone.setExecuteType(EXECUTE_RESULT_NO);
projectMilestoneClone.setDelayTime(null);
projectMilestoneClone.setCheckResult((short) 0);
projectMilestoneClone.setCheckMan(null);
@ -245,11 +253,10 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
@Override
@Transactional(rollbackFor = Exception.class)
public boolean projectExecute(FmProjectMilestoneEntity fmProjectMilestone) {
check(fmProjectMilestone);
FmProjectMilestoneEntity entity = check(fmProjectMilestone);
// 如果执行结果为完成或延期,需要选择下一节点审批人
if (FmProjectMilestoneEntity.EXECUTE_RESULT_JXSQ.equals(fmProjectMilestone.getExecuteResult())
|| FmProjectMilestoneEntity.EXECUTE_RESULT_YQ.equals(fmProjectMilestone.getExecuteResult())) {
// 如果执行类型不是终止,需要选择下一节点审批人
if (!FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ.equals(fmProjectMilestone.getExecuteType())) {
if (Objects.nonNull(fmProjectMilestone.getNextApproverId())) {
R<User> userR = userClient.userInfoById(fmProjectMilestone.getNextApproverId());
if (!userR.isSuccess() || BeanUtil.isEmpty(userR.getData())) {
@ -262,16 +269,20 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
}
}
FmProjectMilestoneEntity entity = getById(fmProjectMilestone.getId());
entity.setNextApproverId(fmProjectMilestone.getNextApproverId());
entity.setNextApproverName(fmProjectMilestone.getNextApproverName());
entity.setPaIndex(fmProjectMilestone.getPaIndex());
entity.setCheckResult(FmProjectMilestoneEntity.CHECK_RESULT_TREAT);
entity.setMilestoneMemo(fmProjectMilestone.getMilestoneMemo());
entity.setEvolve(fmProjectMilestone.getEvolve());
entity.setLastPlan(fmProjectMilestone.getLastPlan());
entity.setExecuteResult(fmProjectMilestone.getExecuteResult());
entity.setExecuteType(fmProjectMilestone.getExecuteType());
entity.setDelayTime(fmProjectMilestone.getDelayTime());
entity.setUpdateTime(new Date());
updateById(entity);
//如果类型选择终止,则后面的里程碑就不需要继续执行
if (fmProjectMilestone.getExecuteResult().equals(FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ)) {
if (FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ.equals(fmProjectMilestone.getExecuteType())) {
FmProjectApplicationEntity fmProjectApplication = fmProjectMilestone.getFmProjectApplication();
String paIndex = fmProjectMilestone.getPaIndex();
List<FmProjectMilestoneEntity> fmProjectMilestoneList = baseMapper
@ -279,7 +290,7 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
.eq(FmProjectMilestoneEntity::getPaId, fmProjectApplication.getId()));
for (FmProjectMilestoneEntity projectMilestone : fmProjectMilestoneList) {
if (Double.parseDouble(projectMilestone.getPaIndex()) > Double.parseDouble(paIndex)) {
projectMilestone.setExecuteResult(FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ);
projectMilestone.setExecuteType(FmProjectMilestoneEntity.EXECUTE_RESULT_ZZ);
baseMapper.updateById(projectMilestone);
}
}
@ -325,19 +336,18 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
log.error("发送里程碑计划审批提醒异常,里程碑计划: {}", fmProjectMilestone.getMilestonePlan(), e);
}
}
private void check(FmProjectMilestoneEntity fmProjectMilestone) {
private FmProjectMilestoneEntity check(FmProjectMilestoneEntity fmProjectMilestone) {
if (BeanUtil.isEmpty(fmProjectMilestone) || Objects.isNull(fmProjectMilestone.getId())) {
throw new RuntimeException("参数异常");
}
if (Objects.isNull(fmProjectMilestone.getExecuteResult())) {
throw new RuntimeException("请选择执行结果");
if (StrUtil.isEmpty(fmProjectMilestone.getExecuteType())) {
throw new RuntimeException("请选择执行类型");
}
// 剔除`无`选项
if (!FmProjectMilestoneEntity.executeResultMap.containsKey(fmProjectMilestone.getExecuteResult()) && !fmProjectMilestone.getExecuteResult().equals(FmProjectMilestoneEntity.EXECUTE_RESULT_NO)) {
throw new RuntimeException("请选择正确的执行结果");
if (!FmProjectMilestoneEntity.executeResultMap.containsKey(fmProjectMilestone.getExecuteType()) && !fmProjectMilestone.getExecuteType().equals(EXECUTE_RESULT_NO)) {
throw new RuntimeException("请选择正确的执行类型");
}
if (StrUtil.isEmpty(fmProjectMilestone.getMilestoneMemo())) {
throw new RuntimeException("请填写里程碑描述");
}
@ -347,9 +357,6 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
if (StrUtil.isEmpty(fmProjectMilestone.getLastPlan())) {
throw new RuntimeException("请填写下一步计划");
}
if (Objects.isNull(fmProjectMilestone.getExecuteResult())) {
throw new RuntimeException("请选择执行结果");
}
if (StrUtil.isEmpty(fmProjectMilestone.getPaIndex())) {
throw new RuntimeException("请填写序号");
}
@ -358,6 +365,18 @@ public class FmProjectMilestoneServiceImpl extends BaseServiceImpl<FmProjectMile
throw new RuntimeException("参数异常");
}
FmProjectApplicationEntity applicationEntity = fmProjectApplicationService.getById(fmProjectApplication.getId());
if (BeanUtil.isEmpty(applicationEntity)) {
throw new RuntimeException("参数异常");
}
FmProjectMilestoneEntity byId = getById(fmProjectMilestone.getId());
Long userId = AuthUtil.getUserId();
if (!userId.toString().equals(fmProjectMilestone.getMilestoneManId())) {
throw new RuntimeException("非里程碑负责人没有执行权限");
}
return byId;
}
@Override

@ -64,7 +64,7 @@ public interface WorkPlanMapper extends BaseMapper<WorkPlan> {
MacToolUse getHangNumIsNull(Long wpId);
MacToolUse getDataByWpIdAndIndex(Long wpId, String numberIndex);
// List<DsRbFilePreserve> getDataByWcIdAndPpsId(Long wcId, Long ppsId,boolean aTrue);
List<ProReTemplate> getDataByWcIdAndPpsId(Long wcId, Long ppsId, boolean aTrue);
List<ProReTemplate> getDataByWcIdAndPpsId(Long wcId, Long ppsId, String line);
List<MesRbFilePreserveSlotEntity> getByRfpId(Long rfpId);
// MesQcProduceRunEntity getBoxInfoByWpIdMtnCode(Long wpId);
@ -80,7 +80,6 @@ public interface WorkPlanMapper extends BaseMapper<WorkPlan> {
List<DsPartRelationEntity> listByPartCodeNew(String partCode, Short indexNum);
List<WorkOrder> findByPartCodeAndMemoMes(String partCode, String memo);
DsPartSub getByPartCodeAndSubCodeMes(String partCode, String subCode);
String getCheckManByNewErpMes(String userName);
List<WorkPlanItemDetail> listByWpiIdMes(Long wpiId);

@ -79,8 +79,8 @@
</select>
<select id="listSlotInfoGr" resultType="org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO">
select a.PART_CODE, a.BATCH_NO, a.WORK_QTY, a.area, a.sumArea,
a.MTN_CODE, a.prod_ident,a.wo_code,a.material,a.yield_type from (
select a.PART_CODE as partCode, a.BATCH_NO as batchNo, a.WORK_QTY as workQty, a.area, a.sumArea,
a.MTN_CODE as mtnCode, a.prod_ident as prodIdent,a.wo_code as woCode,a.material,a.yield_type as yieldType from (
select d.PART_CODE, c.BATCH_NO, b.WORK_QTY, b.WORK_QTY*d.YP_AREA as area,
sum(b.WORK_QTY*d.YP_AREA) over() as sumArea,a.MTN_CODE, d.PRODUCT_IDENT as prod_ident,c.wo_code,f.material,d.yield_type
from MES_MAC_TOOL_USE a
@ -104,8 +104,8 @@
<select id="listSlotInfoList" resultType="org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO">
select a.PART_CODE, a.BATCH_NO, a.WORK_QTY, a.area, a.sumArea,
a.MTN_CODE, a.prod_ident,a.wo_code,a.material,a.yield_type from (
select a.PART_CODE as partCode, a.BATCH_NO as batchNo, a.WORK_QTY as workQty, a.area, a.sumArea,
a.MTN_CODE as mtnCode, a.prod_ident as prodIdent,a.wo_code as woCode,a.material,a.yield_type as yieldType from (
select d.PART_CODE, c.BATCH_NO, b.WORK_QTY, b.WORK_QTY*d.YP_AREA as area,
sum(b.WORK_QTY*d.YP_AREA) over() as sumArea, a.MTN_CODE, d.PRODUCT_IDENT as prod_ident,c.wo_code,f.material,d.yield_type
from MES_MAC_TOOL_USE a
@ -162,10 +162,6 @@
select * from MES_WORK_ORDER a inner join MES_YIELD_ORDER b on a.YO_ID = b.ID where b.PART_CODE= #{partCode} and b.YP_CODE = #{memo}
</select>
<select id="getCheckManByNewErpMes" resultType="String">
select a.value1,a.value2 from v_rb_qms_checker_seal@nerp_mes_link a where a.checker_name= #{userName}
</select>
<select id="getQcReviewSheetListMes" resultType="org.springblade.desk.quality.pojo.entity.ReviewSheet">
select a.rs_code,a.memo,a.unqualified_qty,a.REVIEW_DATE from QA_REVIEW_SHEET a
-- inner join rb_pr_work_check b on a.wc_id = b.wc_id
@ -249,7 +245,7 @@
</select>
<select id="getBoxInfoByWpIdMtnCodeList" resultType="org.springblade.desk.produce.pojo.entity.MesQcProduceRunEntity">
select min(c.IN_DATE), max(c.OUT_DATE), 'Max:'||max(c.TEMP_SLOT)||'/'||'Min:'||min(c.temp_slot), max(c.DEVICE_ID)
select min(c.IN_DATE) as inDate, max(c.OUT_DATE) as outDate, 'Max:'||max(c.TEMP_SLOT)||'/'||'Min:'||min(c.temp_slot) as tempSlot, max(c.DEVICE_ID) as deviceId
from MES_QC_PRODUCE_RUN c where c.mtn_code in(
select a.mtn_code from MES_MAC_TOOL_USE a left join MES_EQUIPMENT b on a.EQUIPMENT_CARD = b.ID
where b.CATEGORYS = '烘箱设备' and a.WP_ID = #{wpId}
@ -293,22 +289,38 @@
<if test="wcId != null">
and a.WC_ID = #{wcId}
</if>
and a.PPS_ID = #{ppsId} and a.LINE = 0
and a.PPS_ID = #{ppsId} and a.LINE = #{line}
</select>
<select id="getByRfpsId" resultType="org.springblade.desk.produce.pojo.dto.MesRbFilePreserveDetailDTO">
select * ,slot.rfps_type as rfpsType from MES_RB_FILE_PRESERVE_DETAIL a
inner join MES_RB_FILE_PRESERVE_SLOT slot on a.rfps_id = slot.rfp_id
select DISTINCT
a.RFPS_ID as rfpsId,
a.DETAIL_NAME as detailName,
a.DETAIL_INDEX as detailIndex,
a.ASK,
a.RFPD_TIME as rfpdTime,
a.QUALIFIED,
a.PARAM_NAME as paramName,
a.PARAM_VALUE as paramValue,
slot.rfps_type as rfpsType
from MES_RB_FILE_PRESERVE_DETAIL a
inner join MES_RB_FILE_PRESERVE_SLOT slot on a.rfps_id = slot.rfp_id
where slot.rfp_id =#{rfpsId}
order by a.DETAIL_INDEX asc
</select>
<select id="getByRfpId" resultType="org.springblade.desk.produce.pojo.entity.MesRbFilePreserveSlotEntity">
select a.* from MES_RB_FILE_PRESERVE_SLOT slot
-- left join DS_RB_FILE_PRESERVE slot on a.Id = slot.RFP_ID
inner join QA_PRO_RE_TEMPLATE a on a.Id = slot.RFP_ID
select slot.RFP_ID as rfpId,
slot.SLOT_NAME as slotName,
slot.SLOT_INDEX as slotIndex,
slot.INSERT_INDEX as insertIndex,
slot.RFPS_TYPE as rfpsType,
slot.KEEP_TIME as keepTime,
slot.KEEP_MAN as keepMan
from MES_RB_FILE_PRESERVE_SLOT slot
inner join QA_PRO_RE_TEMPLATE a on a.Id = slot.RFP_ID
where slot.RFP_ID =#{rfpId}
</select>

@ -60,6 +60,7 @@ import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
* 车间订单运行记录表 服务实现类
@ -133,6 +134,10 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
if (null == workOrderRun) {
return R.fail("未找到相关外协订单");
}
// 必须是"已下达"状态才能收回
if (!WorkOrderRun.RUN_STATUS_ISSUED.equals(workOrderRun.getRunStatus())) {
return R.fail("外协订单已收回或状态不正确,无法再次操作");
}
// 获取订单信息
WorkOrder workOrder = workOrderMapper.selectById(workOrderRun.getWoId());
if (workOrder == null) {
@ -223,8 +228,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
wp.setUnqualifiedQty(0d);
wp.setStatus(WorkPlan.STATUS_NO_START);
workPlanMapper.updateById(wp);
WorkPlan frontWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getFrontWpId, wp.getId()));
WorkPlan frontWorkPlan = workPlanMapper.selectById(wp.getFrontWpId());
if (frontWorkPlan != null) {
// 还原上序
frontWorkPlan.setStatus(WorkPlan.STATUS_WORK_OK);
@ -278,14 +282,19 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//新增状态:外协状态,转外协审批通过后,置为待外协
workOrderRun.setOemStatus(WorkOrderRun.OEM_STATUS_IN);
//调用转外协自动分派处理
List<YieldOrderCraft> yieldOrderCrafts = yieldOrderCraftService.listByYoId(yo.getId());
Map<String, YieldOrderCraft> yieldOrderCraftMap = yieldOrderCrafts.stream().collect(Collectors.toMap(YieldOrderCraft::getProcessNo, v -> v));
if (!wpList.isEmpty()) {
//判断工序是否存在外协商,如果存在不进行二次分派
WorkPlan workPlan = workPlanMapper.selectById(wprList.get(0).getWpId());
if (workPlan.getOcId() == null || workPlan.getOcId() < 1 ) {
//自动分派
List<YieldOrderCraft> yieldOrderCrafts = yieldOrderCraftService.listByYoId(yo.getId());
yieldOrderCraftService.automaticDispatch(yieldOrderCrafts, yo, Boolean.FALSE, null);
}
for (WorkPlan plan : wpList) {
YieldOrderCraft yieldOrderCraft = yieldOrderCraftMap.get(plan.getOrders());
plan.setOcId(yieldOrderCraft.getOcId());
}
}
int days = 5;
wo.setOemOut("0");
@ -306,28 +315,21 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
Long oemId = null;
Long craftAbilityId = null;
if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getId, wp.getNextWpId()));
WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>().eq(WorkPlan::getId, wp.getNextWpId()));
if (nextWp != null) {
oemId = nextWp.getOcId();
craftAbilityId = nextWp.getCaId();
YieldOrderCraft yieldOrderCraft = yieldOrderCraftMap.get(nextWp.getOrders());
oemId = yieldOrderCraft.getOcId();
craftAbilityId = yieldOrderCraft.getCaId();
oa = oemCraftAbilityMapper.selectOne(new LambdaQueryWrapper<OemCraftAbilityEntity>().eq(OemCraftAbilityEntity::getOtherId, oemId)
.eq(OemCraftAbilityEntity::getCraftAbilityId, craftAbilityId));
}
} else {
oemId = wp.getOcId();
craftAbilityId = wp.getCaId();
YieldOrderCraft yieldOrderCraft = yieldOrderCraftMap.get(wp.getOrders());
oemId = yieldOrderCraft.getOcId();
craftAbilityId = yieldOrderCraft.getCaId();
oa = oemCraftAbilityMapper.selectOne(new LambdaQueryWrapper<OemCraftAbilityEntity>().eq(OemCraftAbilityEntity::getOtherId, oemId)
.eq(OemCraftAbilityEntity::getCraftAbilityId, craftAbilityId));
}
//更改订单调度员和计划员
if (oa == null) {
Oem oem = oemMapper.selectById(oemId);
String oemName = oem != null ? oem.getOcName() : "未知厂商";
String errorMsg = String.format("外协厂商【%s】(ID:%s)的工艺能力(ID:%s)未维护,可在基础数据-外协工艺能力页面维护", oemName, oemId, craftAbilityId);
log.error(errorMsg);
throw new ServiceException(errorMsg);
}
workOrderService.maintainOrder(wo, oa.getPlanner(), oa.getDispatcher(), workOrderRun, true);
}
Date date = DateUtil.plusDays(wo.getSendDownTime(), days);
@ -343,7 +345,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
}
//更新车间订单主责任单位
workOrderService.updateHostWorkUnit(wo);
workPlanMapper.updateById(wpList);
} else {
//转厂内业务
WorkPlan nextWorkPlan;
@ -553,11 +555,23 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return page.setRecords(approvals);
}
/**
* 查找可交件的最后一道外协工序
* 取第一个非外协未开工序的 front_wp_id
*/
private WorkPlan findDeliverableWorkPlan(List<WorkPlan> workPlans) {
return workPlans.stream()
WorkPlan firstInternalPlan = workPlans.stream()
.filter(plan -> "0".equals(plan.getOem()) && plan.getStatus() == 1)
.min(Comparator.comparing(WorkPlan::getOrders))
.orElse(null);
if (firstInternalPlan == null) {
return null;
}
Long frontWpId = firstInternalPlan.getFrontWpId();
return workPlans.stream()
.filter(plan -> plan.getId().equals(frontWpId))
.findFirst()
.orElse(null);
}
private void executeBusinessLogic(YieldOrder yieldOrder, WorkOrder workOrder, WorkOrderRun workOrderRun,
@ -595,6 +609,10 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
*/
private void updateWorkOrder(WorkOrder workOrder, WorkPlan deliverablePlan,
Integer scrapQty, Integer testQty) {
// 已交接的订单不允许再修改
if (WorkOrder.RUN_STATUS_CRAFT_CHANGE.equals(workOrder.getRunStatus())) {
throw new ServiceException("车间订单已交接,无法再次收回");
}
workOrder.setWpId(deliverablePlan.getId());
workOrder.setRunStatus(3); // 加工中
workOrder.setMakeQty(workOrder.getMakeQty() - scrapQty - testQty);

@ -64,6 +64,7 @@ import org.springblade.desk.quality.pojo.entity.*;
import org.springblade.desk.quality.pojo.vo.WorkPlanItemVO;
import org.springblade.desk.quality.service.*;
import org.springblade.desk.util.date.DateUtils;
import org.springblade.erpdata.feign.IErpDataCheckerSealClient;
import org.springblade.erpdata.feign.IErpDataLogisticsClient;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.scheduling.pojo.entity.QualityGradeEntity;
@ -204,6 +205,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final ICenterTeamService centerTeamService;
@Resource
private final IErpDataCheckerSealClient erpDataCheckerSealClient;
@Override
public IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO workOrder) {
return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder));
@ -2824,7 +2828,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
List<WorkPlanItemDetail> itemDetails = itemDetailMap.get(planItem.getId());
String checkManByNewErp = null;
try {
checkManByNewErp = workPlanMapper.getCheckManByNewErpMes(planItem.getCheckUserAccount());
checkManByNewErp = erpDataCheckerSealClient.getCheckManByNewErpMes(planItem.getCheckUserRealName());
} catch (Exception e) {
// DB Link 等异常降级,避免阻塞 PDF 生成
}

@ -85,8 +85,8 @@ public class AuditFileController extends BladeController {
Query query) {
// QueryWrapper<AuditFile> qw = Condition.getQueryWrapper(map, AuditFile.class);
AuditFileSearch search = BeanUtil.toBeanIgnoreError(map, AuditFileSearch.class);
IPage<AuditFile> pages = service.listSearch(Condition.getPage(query), search);
IPage<AuditFileVO> pagesVO = AuditFileWrapper.build().pageVO(pages);
IPage<AuditFileVO> pagesVO = service.listSearch(Condition.getPage(query), search);
// IPage<AuditFileVO> pagesVO = AuditFileWrapper.build().pageVO(pages);
pagesVO.getRecords()
.stream()
.peek(service::setVOValue)

@ -282,7 +282,7 @@ public class LiquidTankController extends BladeController {
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<org.springframework.core.io.Resource> downloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/QA/槽液信息.xls",
"Excel/QA/槽液信息模板.xls",
"导入模版-槽液信息.xls");
}

@ -31,7 +31,6 @@ public class LiquidTankExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 任务前缀
*/
@ -48,9 +47,6 @@ public class LiquidTankExcel implements Serializable {
/**
* 槽液编码/槽号
*/
@ColumnWidth(20)
@ExcelProperty("槽液编码/槽号")
private String code;
/**
* [作业槽]id
@ -128,42 +124,20 @@ public class LiquidTankExcel implements Serializable {
@ColumnWidth(20)
@ExcelProperty("添加值单位")
private String addUnit;
/**
* 添加值[计量单位]id
*/
@ColumnWidth(20)
@ExcelProperty("添加值[计量单位]id")
private BigDecimal addUnitId;
/**
* 加药量[计算公式]id
*/
@ColumnWidth(20)
@ExcelProperty("加药量计算公式")
// private BigDecimal addDrugFormulaId;
private String addDrugFormulaName;
/**
* 添加后理论值[计算公式]id
*/
@ColumnWidth(20)
@ExcelProperty("添加后理论值计算公式")
// private BigDecimal afterTheoryFormulaId;
private String afterTheoryFormulaName;
/**
* 温度范围类型:[1]:;[2]:室内温度;[3]:环境温度;[4]:温度范围;
*/
@ColumnWidth(20)
@ExcelProperty("温度范围类型:[1]:无;[2]:室内温度;[3]:环境温度;[4]:温度范围;")
private Long temperatureType;
/**
* PH范围类型:[1]:;[2]:PH值范围;
*/
@ColumnWidth(20)
@ExcelProperty("PH范围类型:[1]:无;[2]:PH值范围;")
private Long phType;
/**
@ -172,12 +146,7 @@ public class LiquidTankExcel implements Serializable {
@ColumnWidth(20)
@ExcelProperty("药品名称")
private String drugName;
/**
* 药品[物料]id
*/
@ColumnWidth(20)
@ExcelProperty("药品[物料]id")
private BigDecimal drugMaterialId;
/**
* 药品[物料]编码
*/
@ -232,6 +201,62 @@ public class LiquidTankExcel implements Serializable {
private LocalDate validDate;
/**
* 生成周期类型:生成周期类型:[1]:每周;[2]:每月;[3]:每年;[4]:自定义CRON
*/
@ColumnWidth(20)
// @ExcelProperty("生成周期类型:生成周期类型:[1]:每周;[2]:每月;[3]:每年;[4]:自定义CRON")
@ExcelProperty("生成周期类型:[1]:每周;[2]:每月;[3]:每年;")
private Integer jobType;
// private String jobTypeName;
/**
* 定时WEEK值
*/
@ColumnWidth(20)
@ExcelProperty("每周")
private String jobTypeWeekValue;
/**
* 定时MONTH值
*/
@ColumnWidth(20)
@ExcelProperty("每月")
private String jobTypeMonthValue;
/**
* 定时YEAR值
*/
@ColumnWidth(20)
@ExcelProperty("每年")
private String jobTypeYearValue;
@ColumnWidth(20)
@ExcelProperty("槽液编码/槽号")
private String code;
/**
* 添加值[计量单位]id
*/
@ColumnWidth(20)
@ExcelProperty("添加值[计量单位]id")
private BigDecimal addUnitId;
/**
* 温度范围类型:[1]:;[2]:室内温度;[3]:环境温度;[4]:温度范围;
*/
@ColumnWidth(20)
@ExcelProperty("温度范围类型:[1]:无;[2]:室内温度;[3]:环境温度;[4]:温度范围;")
private Long temperatureType;
/**
* PH范围类型:[1]:;[2]:PH值范围;
*/
@ColumnWidth(20)
@ExcelProperty("PH范围类型:[1]:无;[2]:PH值范围;")
private Long phType;
/**
* 药品[物料]id
*/
@ColumnWidth(20)
@ExcelProperty("药品[物料]id")
private BigDecimal drugMaterialId;
/**
* 工艺含量
*/
@ -339,32 +364,6 @@ public class LiquidTankExcel implements Serializable {
@ExcelProperty("环境温度")
private BigDecimal temperatureEnv;
/**
* 生成周期类型:生成周期类型:[1]:每周;[2]:每月;[3]:每年;[4]:自定义CRON
*/
@ColumnWidth(20)
// @ExcelProperty("生成周期类型:生成周期类型:[1]:每周;[2]:每月;[3]:每年;[4]:自定义CRON")
@ExcelProperty("生成周期类型:[1]:每周;[2]:每月;[3]:每年;")
private Integer jobType;
// private String jobTypeName;
/**
* 定时WEEK值
*/
@ColumnWidth(20)
@ExcelProperty("每周")
private String jobTypeWeekValue;
/**
* 定时MONTH值
*/
@ColumnWidth(20)
@ExcelProperty("每月")
private String jobTypeMonthValue;
/**
* 定时YEAR值
*/
@ColumnWidth(20)
@ExcelProperty("每年")
private String jobTypeYearValue;
/**
* 生成任务 json config
*/

@ -39,5 +39,11 @@ public interface AuditFileMapper extends BaseMapper<AuditFile> {
*/
List<AuditFileExcel> exportAuditFile(@Param("ew") Wrapper<AuditFile> queryWrapper);
List<AuditFile> listSearch(IPage page, @Param("q") AuditFileSearch search);
List<AuditFileVO> listSearch(IPage page, @Param("q") AuditFileSearch search);
AuditFile getByPpsId(Long ppsId);
AuditFile getDataByPpsIdAndApplyArea(@Param("ppsId") Long ppsId, @Param("wcId") Long wcId, @Param("prodApplyArea") String prodApplyArea, @Param("prodIdent") String prodIdent, @Param("caId") Long caId);
AuditFile getDataByPpsIdAndPqName(@Param("ppsId") Long ppsId, @Param("wcId") Long wcId, @Param("prodIdent") String prodIdent, @Param("caId") Long caId);
}

@ -15,6 +15,11 @@
<result column="SORT" property="sort"/>
<result column="REMARK" property="remark"/>
<result column="PROD_APPLY_AREA" property="prodApplyArea"/>
<result column="CA_ID" property="caId"/>
</resultMap>
<resultMap id="auditFileVOResultMap" type="org.springblade.desk.quality.pojo.vo.AuditFileVO" extends="auditFileResultMap">
<result column="CA_NAME" property="caName"/>
</resultMap>
<select id="selectAuditFilePage" resultMap="auditFileResultMap">
@ -28,7 +33,7 @@
FROM QA_AUDIT_FILE ${ew.customSqlSegment}
</select>
<select id="listSearch" resultMap="auditFileResultMap">
<select id="listSearch" resultMap="auditFileVOResultMap">
SELECT DISTINCT f.ID,
f.CREATE_USER,
f.CREATE_TIME,
@ -46,8 +51,11 @@
f.PAPERS,
f.SORT,
f.REMARK,
f.PROD_APPLY_AREA
f.PROD_APPLY_AREA,
f.CA_ID,
ca.CA_NAME
FROM QA_AUDIT_FILE f
LEFT JOIN BS_CRAFT_ABILITY ca ON f.ca_id = ca.id
LEFT JOIN BLADE_USER u
ON (f.CREATE_USER = u.ID OR f.UPDATE_USER = u.ID)
WHERE (
@ -66,4 +74,34 @@
AND u.REAL_NAME LIKE '%' || #{q.keepUserRealName} || '%'
</if>
</select>
<select id="getByPpsId" resultMap="auditFileResultMap">
select * from QA_AUDIT_FILE
where IS_DELETED = 0 and PPS_ID = #{ppsId}
</select>
<select id="getDataByPpsIdAndApplyArea" resultMap="auditFileResultMap">
select a.*
from QA_AUDIT_FILE a
INNER JOIN BS_PROD_MARK b ON a.PQ_ID = b.ID
where a.IS_DELETED = 0
and a.PPS_ID = #{ppsId}
and a.WC_ID = #{wcId}
and a.PROD_APPLY_AREA = #{prodApplyArea}
and b.NAME = #{prodIdent}
and a.CA_ID = #{caId}
</select>
<select id="getDataByPpsIdAndPqName" resultMap="auditFileResultMap">
select a.*
from QA_AUDIT_FILE a
INNER JOIN BS_PROD_MARK b ON a.PQ_ID = b.ID
where a.IS_DELETED = 0
and a.PPS_ID = #{ppsId}
and a.WC_ID = #{wcId}
and b.NAME = #{prodIdent}
and a.CA_ID = #{caId}
</select>
</mapper>

@ -57,6 +57,7 @@
<if test="q.updateTimeEnd != null">
AND t.UPDATE_TIME &lt;= #{q.updateTimeEnd}
</if>
order by t.UPDATE_TIME desc
</select>
<select id="selectAll" resultType="org.springblade.desk.quality.pojo.vo.InspectionTemplateVO">
SELECT *

@ -44,7 +44,7 @@ public interface IAuditFileService extends EnBaseService<AuditFile> {
*/
void setVOValue(AuditFileVO vo);
IPage<AuditFile> listSearch(IPage<AuditFile> page, AuditFileSearch search);
IPage<AuditFileVO> listSearch(IPage<AuditFileVO> page, AuditFileSearch search);
R upgradeVer(AuditFile find);
}

@ -68,7 +68,7 @@ public class AuditFileServiceImpl extends EnBaseServiceImpl<AuditFileMapper, Aud
}
@Override
public IPage<AuditFile> listSearch(IPage<AuditFile> page, AuditFileSearch search) {
public IPage<AuditFileVO> listSearch(IPage<AuditFileVO> page, AuditFileSearch search) {
return page.setRecords(baseMapper.listSearch(page, search));
}

@ -28,12 +28,15 @@ import org.springblade.desk.basic.constant.BaseValue;
import org.springblade.desk.basic.mapper.OemMapper;
import org.springblade.desk.basic.pojo.entity.CenterTeam;
import org.springblade.desk.basic.pojo.entity.Oem;
import org.springblade.desk.basic.pojo.entity.TeamSet;
import org.springblade.desk.basic.service.ICenterTeamService;
import org.springblade.desk.basic.service.IPlatingService;
import org.springblade.desk.basic.service.ITeamSetService;
import org.springblade.desk.basic.util.IdUtil;
import org.springblade.desk.basic.util.StatusCountMap;
import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.dashboard.service.IBsTeamSetService;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.dashboard.service.IDsPartVersionService;
import org.springblade.desk.device.pojo.entity.EquipmentEntity;
@ -50,6 +53,7 @@ import org.springblade.desk.produce.mapper.WorkPlanMapper;
import org.springblade.desk.produce.pojo.dto.*;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.vo.MakeRecExpandVO;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorFileSlotVO;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO;
import org.springblade.desk.produce.pojo.vo.WorkPlanExpandVO;
import org.springblade.desk.produce.service.*;
@ -57,6 +61,7 @@ import org.springblade.desk.quality.constant.InspectionItemConst;
import org.springblade.desk.quality.constant.InspectionTaskConst;
import org.springblade.desk.quality.constant.ReviewSheetConst;
import org.springblade.desk.quality.excel.InspectionTaskExcel;
import org.springblade.desk.quality.mapper.AuditFileMapper;
import org.springblade.desk.quality.mapper.InspectionTaskMapper;
import org.springblade.desk.quality.pojo.entity.*;
import org.springblade.desk.quality.pojo.request.InspectionTaskSearch;
@ -64,7 +69,7 @@ import org.springblade.desk.quality.pojo.request.InspectionTaskStartNew;
import org.springblade.desk.quality.pojo.vo.*;
import org.springblade.desk.quality.service.*;
import org.springblade.desk.quality.wrapper.InspectionTaskListWrapper;
import org.springblade.scheduling.pojo.entity.WorkPlanEntity;
import org.springblade.erpdata.feign.IErpDataCheckerSealClient;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
@ -74,6 +79,8 @@ import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -147,6 +154,22 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
private IWorkPlanItemService workPlanItemService;
@Resource
private IMakeRecService makeRecService;
@Resource
private AuditFileMapper auditFileMapper;
@Resource
private ITeamSetService teamSetService;
@Resource
private IWorkPlanItemDetailService workPlanItemDetailService;
@Resource
private final IErpDataCheckerSealClient erpDataCheckerSealClient;
@Resource
private final IBsTeamSetService bsTeamSetService;
@Resource
private final IMacToolUseService macToolUseService;
@Resource
private final IMesQcProduceRunService qcProduceRunService;
@Resource
private final IBsProcessSetService bsProcessSetService;
@Override
@ -654,20 +677,20 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
}
if (moduleList.get(0)) {
// 头记录
JSONObject modelJson = buildModelOne(wo, yo, dsPart);
jsonObj.put("modelOne", modelJson);
JSONObject modelOne = buildModelOne(wo, yo, dsPart);
jsonObj.put("modelOne", modelOne);
}
// 检验记录
if (moduleList.get(1)) {
JSONObject modelJson1 = new JSONObject();
JSONObject modelThree = new JSONObject();
List<JSONObject> checkList = this.getCheckListNotNG(woId, wpList, true);
modelJson1.put("checkList", checkList);
jsonObj.put("modelThree", modelJson1);
modelThree.put("checkList", checkList);
jsonObj.put("modelThree", modelThree);
}
List<JSONObject> modelTwoList = this.buildModelTwo(wpList, planList);
jsonObj.put("modelTwo", modelTwoList);
List<JSONObject> modelTwo = this.buildModelTwo(wo, yo, dsPart, wpList, planList);
jsonObj.put("modelTwo", modelTwo);
if (moduleList.get(2)) {
// 镀后入库记录
@ -682,6 +705,7 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
/**
* 构建modelOne
*
* @param wo
* @param yo
* @param dsPart
@ -692,7 +716,7 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
JSONObject yoJson = new JSONObject();
JSONObject partJson = new JSONObject();
JSONObject modelJson = new JSONObject();
if(dsPart != null){
if (dsPart != null) {
partJson.put("partCode", dsPart.getPartCode());
partJson.put("partName", dsPart.getPartName());
partJson.put("hardness", dsPart.getHardness());
@ -700,15 +724,22 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
partJson.put("material", dsPart.getMaterial());
partJson.put("cruxMemo", dsPart.getKeyInfo());
partJson.put("memo", dsPart.getRemarks());
partJson.put("area", dsPart.getArea());
if (dsPart.getArea() != null) {
partJson.put("area", roundToSixDecimalPlaces(dsPart.getArea()));
}
}
if(yo != null){
if (yo != null) {
yoJson.put("productType", yo.getProductType());
yoJson.put("prodIdent", yo.getProductIdent());
yoJson.put("poQty", yo.getYpQty());
yoJson.put("poArea", yo.getYpArea());
if (yo.getYpArea() != null) {
yoJson.put("poArea", roundToSixDecimalPlaces(yo.getYpArea()));
}
yoJson.put("primaryCraft", yo.getPrimaryCraft());
}
if(wo != null){
if (wo != null) {
woJson.put("batchNo", wo.getBatchNo());
}
woJson.put("pjYieldOrder", yoJson);
@ -717,13 +748,28 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
return modelJson;
}
/**
* double保留6为小数四舍五入
*
* @param num
* @return
*/
private double roundToSixDecimalPlaces(Double num) {
// 防止double精度问题,先转为BigDecimal
BigDecimal bigDecimal = new BigDecimal(Double.toString(num));
// 设置保留6位小数,四舍五入模式
bigDecimal = bigDecimal.setScale(6, RoundingMode.HALF_UP);
return bigDecimal.doubleValue();
}
/**
* 构建modelTwo
*
* @param wpList
* @param modelFlag
* @return
*/
private List<JSONObject> buildModelTwo(List<WorkPlanExpandVO> wpList, List<Boolean> modelFlag) {
private List<JSONObject> buildModelTwo(WorkOrder wo, YieldOrder yo, DsPartEntity dsPart, List<WorkPlanExpandVO> wpList, List<Boolean> modelFlag) {
if (wpList == null || wpList.size() == 0) {
return null;
}
@ -740,36 +786,27 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
tankInfo.put("pdjArea", null);
tankInfo.put("gjArea", null);
modelTwo.put("orders", prWorkPlan.getOrders());
modelTwo.put("papers", prWorkPlan.getPapers());
modelTwo.put("createMan", prWorkPlan.getCreateMan());
modelTwo.put("factEndTime", prWorkPlan.getFactEndTime());
modelTwo.put("papers", prWorkPlan.getPapers());
modelTwo.put("referenceFile", prWorkPlan.getReferenceFile());
modelTwo.put("procedureSet", procedureSet);
modelTwo.put("slotList", slotList);
modelTwo.put("tankInfo", tankInfo);
List<MesRbFilePreserveSlotEntity> dsRbFilePreserveSlotList = new ArrayList<>();
List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList = new ArrayList<>();
if (WorkPlan.PRINT_TYPE_PROCESS.equals(prWorkPlan.getPrintType())) {
// 同槽信息(从设备,工装使用记录获取)
List<ProduceMonitorSlotListVO> slotVOList = null;
//zxh 20250626 增加固溶工序同炉数据
if ("固溶".equals(prWorkPlan.getPpsName())) {
slotVOList = workPlanMapper.listSlotInfoGr(prWorkPlan.getId(), Boolean.FALSE);
} else {
slotVOList = workPlanMapper.listSlotInfoList(prWorkPlan.getId(), Boolean.TRUE);
if (slotVOList == null || slotVOList.size() == 0) {
slotVOList = workPlanMapper.listSlotInfoList(prWorkPlan.getId(), Boolean.FALSE);
}
}
List<ProduceMonitorSlotListVO> slotVOList = macToolUseService.listSlotInfo(prWorkPlan);
if (CollectionUtils.isNotEmpty(slotVOList)) {
for (ProduceMonitorSlotListVO slot : slotVOList) {
JSONObject slotJson = new JSONObject();
slotJson.put("mtuCode", slot.getMtuCode());
slotJson.put("mtuCode", slot.getMtnCode());
slotJson.put("partCode", slot.getPartCode());
slotJson.put("batchNo", slot.getBatchNo());
slotJson.put("workQty", slot.getWorkQty());
slotJson.put("prodIdent", slot.getProdIdent());
slotJson.put("area", slot.getArea());
slotJson.put("totalArea", slot.getTotalArea());
slotJson.put("totalArea", slot.getSumArea());
slotList.add(slotJson);
}
}
@ -786,8 +823,8 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
List<FeiBaSetEntity> basList = feiBaSetService.listByIds(bas);
List<EquipmentEntity> cardList = mesEquipmentCardService.listByIds(cards);
// 设备编号
String gj = StringUtils.join(rackList.stream().filter(j -> j.getRsType() != null).map(j -> j.getRsType()).collect(Collectors.toList()), "'、'");
String fb = StringUtils.join(basList.stream().filter(j -> j.getFsType() != null).map(j -> j.getFsType()).collect(Collectors.toList()), "、");
String gj = StringUtils.join(rackList.stream().filter(j -> j.getRsCode() != null).map(j -> j.getRsCode()).collect(Collectors.toList()), "'、'");
String fb = StringUtils.join(basList.stream().filter(j -> j.getFsCode() != null).map(j -> j.getFsCode()).collect(Collectors.toList()), "、");
String eq = StringUtils.join(cardList.stream().filter(j -> j.getDeviceCode() != null).map(j -> j.getDeviceCode()).collect(Collectors.toList()), "、");
modelTwo.put("gjCode", gj);
modelTwo.put("fbCode", fb);
@ -823,10 +860,37 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
// 如果是荧光检测工序,需要返回报工人签章图片
if ("荧光检测".equals(prWorkPlan.getPpsName())) {
if (makeRec != null) {
String checkManByNewErpMes = workPlanMapper.getCheckManByNewErpMes(makeRec.getWorkerAccount());
String checkManByNewErpMes = erpDataCheckerSealClient.getCheckManByNewErpMes(makeRec.getWorkerName());
modelTwo.put("workerImgUrl", checkManByNewErpMes);
}
}
if (StringUtils.isEmpty(prWorkPlan.getPapers()) || StringUtils.isEmpty(prWorkPlan.getReferenceFile())) {
AuditFile auditFile = null;
if ("涂色标".equals(prWorkPlan.getPpsName()) || "喷砂".equals(prWorkPlan.getPpsName())) {
auditFile = auditFileMapper.getByPpsId(prWorkPlan.getPpsId());
} else {
if (wo.getTsId() != null) {
TeamSet teamSet = teamSetService.getById(wo.getTsId());
String productApplicationArea = null;
if (teamSet != null) {
if (dsPart != null) {
productApplicationArea = dsPart.getProductApplicationArea();
}
String productIdent = yo.getProductIdent();
if (StringUtils.isNotEmpty(productApplicationArea) && StringUtils.isNotEmpty(productIdent)) {
auditFile = auditFileMapper.getDataByPpsIdAndApplyArea(prWorkPlan.getPpsId(), teamSet.getWcId(), productApplicationArea, productIdent, prWorkPlan.getCaId());
}
if (StringUtils.isNotEmpty(productIdent) && auditFile == null) {
auditFile = auditFileMapper.getDataByPpsIdAndPqName(prWorkPlan.getPpsId(), teamSet.getWcId(), productIdent, prWorkPlan.getCaId());
}
}
}
}
if (auditFile != null) {
modelTwo.put("papers", auditFile.getPapers());
modelTwo.put("referenceFile", auditFile.getReferenceFile());
}
}
modelTwoList.add(modelTwo);
}
}
@ -835,110 +899,91 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
/**
* 构建dsRbFilePreserveSlotList
*
* @param workPlan
* @return
*/
private List<MesRbFilePreserveSlotEntity> buildDsRbFilePreserveSlotList(WorkPlanExpandVO workPlan){
List<MesRbFilePreserveSlotEntity> dsRbFilePreserveSlotList = new ArrayList<>();
QueryWrapper<CenterTeam> qwteam = new QueryWrapper<>();
qwteam.eq("TS_ID", workPlan.getMakeTeam());
List<CenterTeam> teamList = centerTeamService.list(qwteam);
CenterTeam bsCenterTeam = null;
if (teamList != null && teamList.size() > 0) {
bsCenterTeam = teamList.get(0);
}
if (bsCenterTeam != null && bsCenterTeam.getWcId() != null) {
private List<ProduceMonitorFileSlotVO> buildDsRbFilePreserveSlotList(WorkPlanExpandVO workPlan) {
List<MesQcProduceRunEntity> qcProduceRunsList;
List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList = new ArrayList<>();
BsTeamSetEntity bsTeamSet = bsTeamSetService.getById(workPlan.getMakeTeam());
if (bsTeamSet != null) {
MacToolUse prMacToolUse;
List<MesRbFilePreserveSlotEntity> preserveSlotList;
List<MesQcProduceRunEntity> qcProduceRunsList;
MesQcProduceRunEntity boxInfo = new MesQcProduceRunEntity();
MesQcProduceRunEntity boxInfo;
// 根据电子档案维护组装数据(上线前) 分槽
List<MacToolUse> dataByWpIdAndIndexList = workPlanMapper.getDataByWpIdAndIndexList(workPlan.getId(), "1");
if (dataByWpIdAndIndexList != null && dataByWpIdAndIndexList.size() > 0) {
List<MacToolUse> dataByWpIdAndIndexList = macToolUseService.getDataByWpIdAndIndexList(workPlan.getId(), "1");
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(dataByWpIdAndIndexList)) {
for (MacToolUse prMacToolUseItem : dataByWpIdAndIndexList) {
if (prMacToolUseItem != null && prMacToolUseItem.getId() != null) {
// 获取模板数据
preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(prMacToolUseItem.getRfpId()));
qcProduceRunsList = workPlanMapper.listPrByWpIdIndexAndMtnCode(workPlan.getId(), 1, prMacToolUseItem.getMtnCode());
qcProduceRunsList = qcProduceRunService.listPrByWpIdIndexAndMtnCode(dataByWpIdAndIndexList.stream().map(MacToolUse::getMtnCode).toList(), prMacToolUseItem.getMtnCode());
// 烘箱信息(从设备,工装使用记录获取)
List<MesQcProduceRunEntity> runs = workPlanMapper.getBoxInfoByWpIdMtnCodeList(workPlan.getId());
if (runs != null && runs.size() > 0) {
boxInfo = runs.get(0);
}
if (StringUtils.isNotBlank(boxInfo.getInDate())) {
boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId());
if (boxInfo.getInDate() != null) {
qcProduceRunsList.add(boxInfo);
}
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0) {
if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) {
// 2025-07-23 线上迁移修改删除了日志打印
// cdl 20250218 修改分槽同一槽号连续出现
this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan,
dsRbFilePreserveSlotList, prMacToolUseItem);
this.setRbFilePreserveDateNew(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUseItem);
}
}
}
}
// 根据电子档案维护组装数据(自动)
prMacToolUse = workPlanMapper.getDataByWpIdAndIndex(workPlan.getId(), "2");
prMacToolUse = macToolUseService.getDataByWpIdAndIndex(workPlan.getId(), "2");
if (prMacToolUse != null && prMacToolUse.getId() != null) {
List<ProReTemplate> dsRbFilePreserveList = null;
if (workPlan.getPpsId() != null) {
BsProcessSetEntity process = processSetService.getById(workPlan.getPpsId());
if ("喷砂".equals(process.getName()) || "涂色标".equals(process.getName())) {
dsRbFilePreserveList = workPlanMapper.getDataByWcIdAndPpsId(null,
workPlan.getPpsId(), Boolean.TRUE);
} else {
dsRbFilePreserveList = workPlanMapper.getDataByWcIdAndPpsId(bsCenterTeam.getWcId(),
workPlan.getPpsId(), Boolean.TRUE);
}
// 获取模板数据
List<ProReTemplate> dsRbFilePreserveList;
BsProcessSetEntity processSet = bsProcessSetService.getById(workPlan.getPpsId());
if (workPlan.getPpsId() != null && ("喷砂".equals(processSet.getName()) || "涂色标".equals(processSet.getName()))) {
dsRbFilePreserveList = proReTemplateService.getDataByWcIdAndPpsId(null, workPlan.getPpsId(), Boolean.TRUE);
} else {
dsRbFilePreserveList = proReTemplateService.getDataByWcIdAndPpsId(bsTeamSet.getWcId(), workPlan.getPpsId(), Boolean.TRUE);
}
if (dsRbFilePreserveList != null && !dsRbFilePreserveList.isEmpty()) {
preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(dsRbFilePreserveList.get(0).getId());
qcProduceRunsList = qcProduceRunService.listPrByWpIdIndex(workPlan.getId(), 2, Boolean.TRUE);
//sql不对
if (dsRbFilePreserveList != null && dsRbFilePreserveList.size() > 0) {
//00000000000000
preserveSlotList = workPlanMapper.getByRfpId(dsRbFilePreserveList.get(0).getId());
qcProduceRunsList = workPlanMapper.listPrByWpIdIndex(workPlan.getId(), 2, Boolean.TRUE);
List<MesQcProduceRunEntity> runs = workPlanMapper.getBoxInfoByWpIdMtnCodeList(workPlan.getId());
if (runs != null && runs.size() > 0) {
boxInfo = runs.get(0);
}
// 烘箱信息(从设备,工装使用记录获取)
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0 && StringUtils.isNotBlank(boxInfo.getInDate())) {
boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId());
if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty() && boxInfo.getInDate() != null) {
qcProduceRunsList.add(boxInfo);
}
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0) {
if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) {
// cdl 20250218 修改分槽同一槽号连续出现
this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan,
dsRbFilePreserveSlotList, prMacToolUse);
this.setRbFilePreserveDateNew(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUse);
}
}
// 获取额外面积数据
// BsAdditionalMess dataByMtuCode = bsAdditionalMessDao.getDataByOneData(prMacToolUse.getMtnCode(), BsAdditionalMess.TYPE_ONE);
// workPlan.setBsAdditionalMess(dataByMtuCode);
}
// 根据电子档案维护组装数据(线下)
//zxh 20250117 解决单工序绑定两个手动记录只显示一个问题
List<MacToolUse> prMacToolUseList = workPlanMapper.getDataByWpIdAndIndexList(workPlan.getId(), "3");
if (prMacToolUseList != null && prMacToolUseList.size() > 0) {
List<MacToolUse> prMacToolUseList = macToolUseService.getDataByWpIdAndIndexList(workPlan.getId(), "3");
if (prMacToolUseList != null && !prMacToolUseList.isEmpty()) {
for (MacToolUse prMacToolUseSd : prMacToolUseList) {
if (prMacToolUseSd != null && prMacToolUseSd.getId() != null) {
// 获取模板数据
preserveSlotList = workPlanMapper.getByRfpId(Long.valueOf(prMacToolUseSd.getRfpId()));
qcProduceRunsList = workPlanMapper.listPrByWpIdIndexAndMtnCode(workPlan.getId(), 3, prMacToolUseSd.getMtnCode());
preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(prMacToolUseSd.getRfpId()));
qcProduceRunsList = qcProduceRunService.listPrByWpIdIndexAndMtnCode(prMacToolUseList.stream().map(MacToolUse::getMtnCode).toList(), prMacToolUseSd.getMtnCode());
// 烘箱信息(从设备,工装使用记录获取)
List<MesQcProduceRunEntity> runs = workPlanMapper.getBoxInfoByWpIdMtnCodeList(workPlan.getId());
if (runs != null && runs.size() > 0) {
boxInfo = runs.get(0);
}
if (StringUtils.isNotBlank(boxInfo.getInDate())) {
boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId());
if (boxInfo.getInDate() != null) {
qcProduceRunsList.add(boxInfo);
}
if (qcProduceRunsList != null && qcProduceRunsList.size() > 0) {
if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) {
// cdl 20250218 修改分槽同一槽号连续出现
this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan,
dsRbFilePreserveSlotList, prMacToolUseSd);
this.setRbFilePreserveDateNew(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUseSd);
}
}
}
@ -947,39 +992,499 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
return dsRbFilePreserveSlotList;
}
private void setRbFilePreserveDateNew(List<MesRbFilePreserveSlotEntity> preserveSlotList, List<MesQcProduceRunEntity> qcProduceRunsList, WorkPlan workPlan, List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList, MacToolUse prMacToolUse) {
List<MesRbFilePreserveDetailEntity> dsRbFilePreserveDetailList = null;
ProduceMonitorFileSlotVO newDsRbFilePreserveSlot = null;
MesRbFilePreserveDetailEntity newDsRbFilePreserveDetail = null;
Map<String, MesRbFilePreserveSlotEntity> preserveSlotMap = preserveSlotList.stream().collect(Collectors.toMap(MesRbFilePreserveSlotEntity::getSlotName, java.util.function.Function.identity()));
List<ProduceMonitorFileSlotVO> temporaryList = new ArrayList<>();
for (MesQcProduceRunEntity qcProduceRun : qcProduceRunsList) {
// 根据维护的电子档案的槽号找寻对应生产追溯的的数据
if (StringUtils.isBlank(qcProduceRun.getWorkSlot())) {
continue;
}
MesRbFilePreserveSlotEntity dsRbFilePreserveSlot = preserveSlotMap.get(qcProduceRun.getWorkSlot().trim());
if ("水膜连续性检查".equals(qcProduceRun.getWorkSlot().trim())) {
qcProduceRun.setQualified("1");
}
// cdl 20250218 修改分槽同一槽号连续出现
this.setTemplateData(dsRbFilePreserveSlot, qcProduceRun, newDsRbFilePreserveSlot, dsRbFilePreserveDetailList, newDsRbFilePreserveDetail, workPlan, temporaryList, prMacToolUse);
}
// 判断是不是自动线并且有水墨连续性
MacToolUse macToolUse = macToolUseService.getHangNumIsNull(workPlan.getId());
if (macToolUse != null && macToolUse.getId() != null) {
List<MesRbFilePreserveSlotEntity> smSlotList = preserveSlotList.stream().filter(i -> i.getSlotName().contains("水膜连续性")).toList();
for (MesRbFilePreserveSlotEntity dsRbFilePreserveSlot : smSlotList) {
if (dsRbFilePreserveSlot.getSlotName().contains("水膜连续性")) {
MesQcProduceRunEntity qcProduceRun = new MesQcProduceRunEntity();
qcProduceRun.setQualified("1");
// cdl 20250218 修改分槽同一槽号连续出现
this.setTemplateData(dsRbFilePreserveSlot, qcProduceRun, newDsRbFilePreserveSlot, dsRbFilePreserveDetailList, newDsRbFilePreserveDetail, workPlan, temporaryList, prMacToolUse);
}
}
}
dsRbFilePreserveSlotList.addAll(temporaryList.stream().sorted(Comparator.comparing(ProduceMonitorFileSlotVO::getSlotIndex)).toList());
}
private void setTemplateData(MesRbFilePreserveSlotEntity dsRbFilePreserveSlot, MesQcProduceRunEntity qcProduceRun, ProduceMonitorFileSlotVO newDsRbFilePreserveSlot, List<MesRbFilePreserveDetailEntity> dsRbFilePreserveDetailList, MesRbFilePreserveDetailEntity newDsRbFilePreserveDetail, WorkPlan workPlan, List<ProduceMonitorFileSlotVO> temporaryList, MacToolUse prMacToolUse) {
if (dsRbFilePreserveSlot != null && dsRbFilePreserveSlot.getId() != null) {
// Date转String
// 装入槽子对应的信息
newDsRbFilePreserveSlot = new ProduceMonitorFileSlotVO();
newDsRbFilePreserveSlot.setRfpsType(dsRbFilePreserveSlot.getRfpsType());
newDsRbFilePreserveSlot.setInsertIndex(dsRbFilePreserveSlot.getInsertIndex());
newDsRbFilePreserveSlot.setSlotName(dsRbFilePreserveSlot.getSlotName());
newDsRbFilePreserveSlot.setSlotIndex(dsRbFilePreserveSlot.getSlotIndex());
List<MesRbFilePreserveDetailEntity> preserveDetailList = mesRbFilePreserveDetailService.getByRfpsId(dsRbFilePreserveSlot.getId());
if (!preserveDetailList.isEmpty()) {
dsRbFilePreserveDetailList = new ArrayList<>();
for (int i = 0; i < preserveDetailList.size(); i++) {
MesRbFilePreserveDetailEntity dsRbFilePreserveDetail = preserveDetailList.get(i);
Short rfpsType = 0;
if (dsRbFilePreserveDetail != null && dsRbFilePreserveDetail.getRfpsId() != null) {
rfpsType = mesRbFilePreserveSlotService.getById(dsRbFilePreserveDetail.getRfpsId()).getRfpsType();
}
newDsRbFilePreserveDetail = new MesRbFilePreserveDetailEntity();
newDsRbFilePreserveDetail.setDetailName(dsRbFilePreserveDetail.getDetailName());
newDsRbFilePreserveDetail.setDetailIndex(dsRbFilePreserveDetail.getDetailIndex());
// 工艺要求
newDsRbFilePreserveDetail.setAsk(dsRbFilePreserveDetail.getAsk());
newDsRbFilePreserveDetail.setParamName(dsRbFilePreserveDetail.getParamName());
if (i == 0) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getInDate());
} else if (i == 1) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getOutDate());
}
if (rfpsType == 1) { // 模板一
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
}
} else if (rfpsType == 2) { // 模板二
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
}
} else if (rfpsType == 3) { // 模板三
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
}
} else if (rfpsType == 4) { // 模板四
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
}
} else if (rfpsType == 5 || rfpsType == 22) { // 模板五
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
}
} else if (rfpsType == 6) { // 模板六
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
}
} else if (rfpsType == 7) { // 模板七
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
}
} else if (rfpsType == 8) { // 模板八
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
}
} else if (rfpsType == 9) { // 模板九
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
}
} else if (rfpsType == 10) { // 模板十
if (i == 0) {
newDsRbFilePreserveDetail.setQualified(qcProduceRun.getQualified());
}
} else if (rfpsType == 11) { // 模板十一
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
}
} else if (rfpsType == 12) { // 模板十二
if (i == 0) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataThree());
}
} else if (rfpsType == 13) { // 模板十三
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
}
} else if (rfpsType == 14) { // 模板十四
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 10) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 11) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
}
} else if (rfpsType == 15) { // 模板十五
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 5) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataFour());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 10) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 11) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
} else if (i == 12) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEleven());
} else if (i == 13) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwelve());
}
} else if (rfpsType == 16) { // 模板十六
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 10) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 11) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
} else if (i == 12) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEleven());
} else if (i == 13) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwelve());
} else if (i == 14) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThirteen());
} else if (i == 15) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFourteen());
}
} else if (rfpsType == 17) { // 模板十七
if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 3) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
}
} else if (rfpsType == 18) { // 模板十八
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
}
} else if (rfpsType == 19) { // 模板十九 //zxh 20250519 新增模板19和模板20
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 7) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataEight());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
} else if (i == 9) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen());
} else if (i == 10) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEleven());
} else if (i == 11) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwelve());
}
} else if (rfpsType == 20) { // 模板二十
if (i == 0) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getInDate());
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getInDate());
} else if (i == 1) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getInDate());
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getInDate());
} else if (i == 2) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getOutDate());
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getOutDate());
} else if (i == 3) {
newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getOutDate());
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getOutDate());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
}
} else if (rfpsType == 21) { // 模板十三
if (i == 0) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne());
} else if (i == 1) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo());
} else if (i == 2) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree());
} else if (i == 3) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour());
} else if (i == 4) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive());
} else if (i == 5) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix());
} else if (i == 6) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven());
} else if (i == 7) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight());
} else if (i == 8) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine());
}
}
String detailName = dsRbFilePreserveDetail.getDetailName();
if (detailName != null) {
if (detailName.contains("温度")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getTempSlot());
} else if (detailName.contains("电导率")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getEleRate());
} else if (detailName.contains("电流") && !(detailName.contains("壳体") || detailName.contains("插针"))) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getEleStream());
} else if (detailName.contains("链速")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getVSpeed());
} else if (detailName.contains("镍离子")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getNiValue());
} else if (detailName.contains("pH值")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getPhValue());
}
//zxh 20250604 新增软起时间和工作电压
else if (detailName.contains("软起时间")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getSoftWorkTime());
} else if (detailName.contains("工作电压")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getVoltage());
} else if (detailName.contains("初始电压")) {
newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getStartVol());
}
}
dsRbFilePreserveDetailList.add(newDsRbFilePreserveDetail);
}
newDsRbFilePreserveSlot.setChildrenList(dsRbFilePreserveDetailList);
}
temporaryList.add(newDsRbFilePreserveSlot);
}
}
private List<JSONObject> getCheckListNotNG(Long woId, List<WorkPlanExpandVO> wpList, Boolean eleOrPrint) {
List<JSONObject> checkList = new ArrayList<>();
//组装检测项集合
Map<String, JSONObject> ccMap = new LinkedHashMap<>();
JSONObject cc;
List<WorkPlanItemVO> piLst = workPlanItemService.listByWoIdNotNG(woId);
Map<Long, WorkPlanExpandVO> workPlanMap = wpList.stream()
.collect(Collectors.toMap(
WorkPlanExpandVO::getId,
Function.identity()
));
Map<String, List<JSONObject>> piMap = new LinkedHashMap<>();
List<JSONObject> lst;
if (CollectionUtils.isNotEmpty(piLst)) {
for (WorkPlanItemVO pi : piLst) {
lst = piMap.get(pi.getItemCode());
WorkPlanExpandVO workPlan = workPlanMap.get(pi.getWpId());
String testOrder = workPlan.getOrders() + "-" + pi.getItemCode();
JSONObject checkDetail = new JSONObject();
checkDetail.put("testOrders", testOrder);
checkDetail.put("checkName", pi.getCheckUserRealName());
if (StringUtils.isNotEmpty(pi.getCheckUserAccount())) {
String checkManByNewErp = workPlanMapper.getCheckManByNewErpMes(pi.getCheckUserAccount());
if (eleOrPrint) {
checkDetail.put("imgUrl", checkManByNewErp);
if (CollectionUtils.isEmpty(lst)) {
lst = new ArrayList<>();
piMap.put(testOrder, lst);
cc = new JSONObject();
cc.put("testOrders", testOrder);
if (pi.getCheckQty() != null && pi.getCheckQty() > 0) {
cc.put("checkQty", pi.getCheckQty());
}
if (pi.getTestQty() != null && pi.getTestQty() > 0) {
cc.put("testQty", pi.getTestQty());
} else {
if (checkManByNewErp != null && checkManByNewErp.indexOf("base64,") > 0) {
String checkManByNewErpSubString = checkManByNewErp.substring(checkManByNewErp.indexOf("base64,") + 7);
checkDetail.put("imgUrl", checkManByNewErpSubString);
cc.put("testQty", "");
}
cc.put("checkResult", WorkPlanItem.checkResultMap.get(pi.getCheckResult()));
if (StringUtils.isNotEmpty(pi.getCheckUserRealName())) {
String checkManByNewErp = null;
try {
checkManByNewErp = erpDataCheckerSealClient.getCheckManByNewErpMes(pi.getCheckUserRealName());
} catch (Exception e) {
// DB Link 等异常降级,避免阻塞 PDF 生成
}
cc.put("checkName", pi.getCheckUserRealName());
if (eleOrPrint) {
cc.put("imgUrl", checkManByNewErp);
} else {
if (checkManByNewErp != null && checkManByNewErp.indexOf("base64,") > 0) {
String checkManByNewErpSubString = checkManByNewErp.substring(checkManByNewErp.indexOf("base64,") + 7);
cc.put("imgUrl", checkManByNewErpSubString);
}
}
if (pi.getCheckDate() != null) {
cc.put("checkDate", pi.getCheckDate().toLocalDate().toString());
} else {
cc.put("checkDate", "");
}
}
ccMap.put(testOrder, cc);
}
if ("厚度检测".equals(pi.getItemName())) {
for (int i = 0; i < 3; i++) {
lst.add(this.buildCCC(pi.getItemName(), pi.getStandardName(), pi.getCheckValue(), pi.getId(), null, pi.getCreateTime()));
}
}
lst.add(this.buildCCC(pi.getItemName(), pi.getStandardName(), pi.getCheckValue(), pi.getId(), null, pi.getCreateTime()));
List<WorkPlanItemDetailVO> idLst;
for (Map.Entry<String, JSONObject> entry : ccMap.entrySet()) {
cc = ccMap.get(entry.getKey());
if (cc != null) {
lst = piMap.get(cc.get("testOrders"));
lst = lst.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()
-> new TreeSet<>(Comparator.comparing(i -> (Date) i.get("createTime")))), ArrayList::new));
if (lst != null && lst.size() > 0) {
for (JSONObject ccc : lst) {
idLst = workPlanItemDetailService.listVOByWorkPlanItemId((Long) ccc.get("wpiId"));
if (idLst != null && idLst.size() > 0) {
lst = new ArrayList<>();
for (WorkPlanItemDetailVO itemDetail : idLst) {
if ("厚度检测".equals(ccc.get("testName"))) {
cc.put("deviceCode", itemDetail.getGaugeValue8());
lst.add(this.buildCCC((String) ccc.get("testName"), (String) ccc.get("trialStandard"), itemDetail.getGaugeValueNotNUll(), null, itemDetail.getGaugeValue8(), (Date) ccc.get("createTime")));
} else if (itemDetail.getMtId() != null) {
lst.add(this.buildCCC((String) ccc.get("testName"), itemDetail.getRuleSize(),
itemDetail.getGaugeValue1(), (Long) ccc.get("wpiId"), itemDetail.getTools(), (Date) ccc.get("createTime")));
cc.put("deviceCode", itemDetail.getTools());
if (cc.get("trialStandard") != null) {
cc.put("trialStandard", (String) cc.get("trialStandard") + ';' + itemDetail.getRuleSize());
} else {
cc.put("trialStandard", itemDetail.getRuleSize());
}
if (cc.get("checkResult") != null) {
cc.put("checkResult", cc.get("checkResult"));
} else {
cc.put("checkResult", itemDetail.getGaugeValue1());
}
}
}
}
cc.put("cccList", lst);
checkList.add(cc);
break;
}
}
}
}
checkList.add(checkDetail);
}
}
return checkList;
}
private JSONObject buildCCC(String testName, String trialStandard, String checkValue, Long wpiId, String tools, Date createTime) {
JSONObject ccc = new JSONObject();
ccc.put("testName", testName);
ccc.put("trialStandard", trialStandard);
ccc.put("checkValue", checkValue);
ccc.put("wpiId", wpiId);
ccc.put("emTools", tools);
ccc.put("createTime", createTime);
return ccc;
}
public void getNewProcess(List<WorkPlan> wpList, JSONObject jsonObj, List<Boolean> modelFlag) {
if (wpList == null || wpList.size() == 0) {
return;
@ -1209,10 +1714,10 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
BsProcessSetEntity process = processSetService.getById(workPlan.getPpsId());
if ("喷砂".equals(process.getName()) || "涂色标".equals(process.getName())) {
dsRbFilePreserveList = workPlanMapper.getDataByWcIdAndPpsId(null,
workPlan.getPpsId(), Boolean.TRUE);
workPlan.getPpsId(), "0");
} else {
dsRbFilePreserveList = workPlanMapper.getDataByWcIdAndPpsId(bsCenterTeam.getWcId(),
workPlan.getPpsId(), Boolean.TRUE);
workPlan.getPpsId(), "0");
}
}
@ -2088,12 +2593,12 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
if (pi.getCheckUserId() != null) {
R<User> user = userClient.userInfoById(pi.getCheckUserId());
String userName = user.getData().getAccount();
String userName = user.getData().getRealName();
if (null != user && user.getData() != null) {
cc.setCheckName(user.getData().getRealName());
}
//zxh 20250212 从nerp获取检验员印章
String checkManByNewErp = workPlanMapper.getCheckManByNewErpMes(userName);
String checkManByNewErp = erpDataCheckerSealClient.getCheckManByNewErpMes(userName);
if (eleOrPrint) {

@ -0,0 +1,22 @@
package org.springblade.erpdata.feign;
import io.swagger.v3.oas.annotations.Hidden;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.erpdata.service.IErpDataCheckerSealService;
import org.springframework.web.bind.annotation.RestController;
@NonDS
@Hidden
@RestController
@AllArgsConstructor
public class ErpDataCheckerSealClient implements IErpDataCheckerSealClient {
@Resource
private final IErpDataCheckerSealService erpDataCheckerSealService;
@Override
public String getCheckManByNewErpMes(String userName) {
return erpDataCheckerSealService.getCheckManByNewErpMes(userName);
}
}

@ -0,0 +1,9 @@
package org.springblade.erpdata.mapper;
import com.baomidou.mybatisplus.core.mapper.Mapper;
public interface ErpDataCheckerSealMapper extends Mapper {
String getCheckManByNewErpMes(String userName);
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.erpdata.mapper.ErpDataCheckerSealMapper">
<select id="getCheckManByNewErpMes" resultType="String">
select a.value1,a.value2 from dba_mgr.v_rb_qms_checker_seal a where a.checker_name= #{userName}
</select>
</mapper>

@ -0,0 +1,7 @@
package org.springblade.erpdata.service;
public interface IErpDataCheckerSealService {
String getCheckManByNewErpMes(String userName);
}

@ -0,0 +1,21 @@
package org.springblade.erpdata.service.impl;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springblade.erpdata.mapper.ErpDataCheckerSealMapper;
import org.springblade.erpdata.service.IErpDataCheckerSealService;
import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class ErpDataCheckerSealServiceImpl implements IErpDataCheckerSealService {
@Resource
private final ErpDataCheckerSealMapper erpDataCheckerSealMapper;
@Override
public String getCheckManByNewErpMes(String userName) {
return erpDataCheckerSealMapper.getCheckManByNewErpMes(userName);
}
}

@ -35,7 +35,7 @@
and work_center_name LIKE CONCAT('%', CONCAT(#{param2.workCenterName}, '%'))
</if>
<if test="param2.equipCode !=null and param2.equipCode !=''">
and equip_code = #{param2.equipCode}
and equip_code LIKE CONCAT('%', CONCAT(#{param2.equipCode}, '%'))
</if>
<if test="param2.equipName !=null and param2.equipName !=''">
and equip_name LIKE CONCAT('%', CONCAT(#{param2.equipName}, '%'))

@ -33,7 +33,19 @@
<select id="selectSameTroughPage" resultMap="sameTroughResultMap">
select * from MES_SAME_TROUGH where is_deleted = 0
select * from MES_SAME_TROUGH
<where>
is_deleted = 0
<if test="param2.workCenterId !=null and param2.workCenterId !=''">
and work_center_id = #{param2.workCenterId}
</if>
<if test="param2.processId !=null and param2.processId !=''">
and process_id = #{param2.processId}
</if>
<if test="param2.craftId !=null and param2.craftId !=''">
and craft_id = #{param2.craftId}
</if>
</where>
</select>

@ -24,7 +24,13 @@
<select id="selectSintTempCurvePage" resultMap="sintTempCurveResultMap">
select * from MES_SINT_TEMP_CURVE where is_deleted = 0
select * from MES_SINT_TEMP_CURVE
<where>
is_deleted = 0
<if test="param2.processId !=null and param2.processId !=''">
and process_id = #{param2.processId}
</if>
</where>
</select>

@ -61,6 +61,7 @@ import org.springblade.scheduling.scheduling.service.*;
import org.springblade.scheduling.scheduling.vo.PersonAbilityVO;
import org.springblade.scheduling.scheduling.vo.SameTroughVO;
import org.springblade.scheduling.scheduling.vo.WorkPlanVO;
import org.springblade.system.cache.DictCache;
import org.springblade.wms.feign.StGlassCakeOutClient;
import org.springblade.wms.pojo.dto.StGlassCakeOutDTO;
import org.springframework.beans.BeanUtils;
@ -575,6 +576,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
isContainsOut = true;
}
} else {
log.info("当前订单是:" + order.getId() + ",工序是:" + craft.getId()+",进入设备匹配");
if ("设备".equals(mainProducerMap.get(craft.getPpsId()))) {
String glassCodeStr = null;
Map<String, Object> sameMap = new HashMap<>();
@ -810,8 +812,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (!isSchecuding) {
break;
}
log.info("当前订单是:" + order.getId() + ",工序是:" + craft.getId()+",设备匹配完成");
} else if ("人".equals(mainProducerMap.get(craft.getPpsId()))) {
log.info("当前订单是:" + order.getId() + ",工序是:" + craft.getId()+",进入人员匹配");
//匹配人资源
WorkPlanEntity workPlan = new WorkPlanEntity();
Map<String,Object> hourMap = new HashMap<>();
@ -848,9 +851,18 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} else {
totalTime = Math.ceil(totalTime + Double.parseDouble(ability.getStandardTime()) + ability.getPrepareTime().doubleValue());
}
if(ability.getPartType() == WorkOrderEnum.STATUS_PART_TYPE_4.getCode()){
Double tsb = DictCache.getKey("part_info", "涂色标") == null ? 0 : Double.valueOf(DictCache.getKey("part_info", "涂色标"));
Double tsd = DictCache.getKey("part_info", "涂色带") == null ? 0 : Double.valueOf(DictCache.getKey("part_info", "涂色带"));
Double tjt = DictCache.getKey("part_info", "涂箭头") == null ? 0 : Double.valueOf(DictCache.getKey("part_info", "涂箭头"));
int tsbNum = part.getTsbNum() == null ? 0 : Integer.parseInt(part.getTsbNum());
int tsdNum = part.getTsdNum() == null ? 0 : Integer.parseInt(part.getTsdNum());
int tjtNum = part.getTjtNum() == null ? 0 : Integer.parseInt(part.getTsdNum());
totalTime += tsbNum * tsb + tsdNum * tsd + tjtNum * tjt;
}
hourMap.put("totalTime",totalTime);
hourMap.put("standardTime",ability.getStandardTime());
hourMap.put("preareTime",ability.getPrepareTime());
hourMap.put("prepareTime",ability.getPrepareTime());
hourMap.put("hourType",ability.getType());
}else{
if("玻璃封接组装".equals(processMap.get(craft.getPpsId()))){//玻璃封接组装单独计算
@ -931,7 +943,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan.setPrepareTime(Double.valueOf(hourMap.get("prepareTime").toString()));
workPlan.setHourType(hourMap.get("hourType").toString());
workPlanList.add(workPlan);
log.info("当前订单是:" + order.getId() + ",工序是:" + craft.getId()+",人员匹配完成");
} else {
errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力和设备能力;");
log.info("未匹配到设备和人力资源的工序是:" + craft.getPpsId());
@ -997,8 +1009,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
this.save(workOrder);
//生成生产运行记录
disTaskingClient.saveWorkOrderRun(workOrder.getId().toString());
}else if(order.getStatus() == YieldOrderEnum.STATUS_OUTSOURCING_WAITING.getCode()){
workOrder = this.getOne(Wrappers.<WorkOrderEntity>lambdaQuery().eq(WorkOrderEntity::getYoId,order.getId()));
workOrder.setPlanEndDate(workPlanList.get(workPlanList.size() - 1).getPlanEndTime() == null ? null : workPlanList.get(workPlanList.size() - 1).getPlanEndTime().truncatedTo(ChronoUnit.DAYS).toString().substring(0, 10));
@ -1027,6 +1038,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
order.setErrorInfo(null);
yieldOrderService.updateById(order);
workOrderList.add(workOrder);
//生成生产运行记录
disTaskingClient.saveWorkOrderRun(workOrder.getId().toString());
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){
StGlassCakeOutDTO glassDto = new StGlassCakeOutDTO();
glassDto.setCardNo(workOrder.getCardNo());
@ -2122,7 +2135,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
hourMap.put("standardTime",standardTime);
hourMap.put("preareTime",prepareTime);
hourMap.put("prepareTime",prepareTime == null ? 0 : prepareTime);
hourMap.put("hourType",hourType);
hourMap.put("totalTime",Math.ceil(personTime));
return hourMap;
@ -2229,7 +2242,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
hourMap.put("standardTime",result);
hourMap.put("preareTime",0);
hourMap.put("prepareTime",0);
hourMap.put("hourType","0");
hourMap.put("totalTime",Math.ceil(result * qty));
return hourMap;
@ -2263,7 +2276,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
result = 0.6 + 0.6 * Math.pow(1.2, y);
}
hourMap.put("standardTime",result);
hourMap.put("preareTime",19);
hourMap.put("prepareTime",19);
hourMap.put("hourType","0");
hourMap.put("totalTime",Math.ceil(result * qty + 19));
return hourMap;
@ -2358,7 +2371,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
hourMap.put("standardTime",result);
hourMap.put("preareTime",3);
hourMap.put("prepareTime",3);
hourMap.put("hourType","0");
hourMap.put("totalTime",Math.ceil(result * qty + 3));
return hourMap;
@ -2406,7 +2419,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
hourMap.put("standardTime",result);
hourMap.put("preareTime",4);
hourMap.put("prepareTime",4);
hourMap.put("hourType","0");
hourMap.put("totalTime",Math.ceil(result * qty + 4));
return hourMap;
@ -2467,7 +2480,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
hourMap.put("standardTime",result);
hourMap.put("preareTime",0);
hourMap.put("prepareTime",0);
hourMap.put("hourType","0");
hourMap.put("totalTime",Math.ceil(result));
return hourMap;
@ -2497,7 +2510,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
hourMap.put("standardTime",result);
hourMap.put("preareTime",2);
hourMap.put("prepareTime",2);
hourMap.put("hourType","0");
hourMap.put("totalTime",Math.ceil(result * qty + 2));
return hourMap;
@ -2522,7 +2535,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
hourMap.put("standardTime",result);
hourMap.put("preareTime",3);
hourMap.put("prepareTime",3);
hourMap.put("hourType","0");
hourMap.put("totalTime",Math.ceil(result * qty + 3));
return hourMap;

Loading…
Cancel
Save