|
|
|
|
@ -1,6 +1,8 @@ |
|
|
|
|
package org.springblade.desk.produce.service.impl; |
|
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil; |
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
@ -13,6 +15,7 @@ import net.sourceforge.barbecue.Barcode; |
|
|
|
|
import net.sourceforge.barbecue.BarcodeFactory; |
|
|
|
|
import net.sourceforge.barbecue.BarcodeImageHandler; |
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
import org.springblade.common.exception.BusinessException; |
|
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl; |
|
|
|
|
import org.springblade.core.secure.BladeUser; |
|
|
|
|
@ -21,6 +24,7 @@ import org.springblade.core.tool.api.R; |
|
|
|
|
import org.springblade.core.tool.utils.DateUtil; |
|
|
|
|
import org.springblade.core.tool.utils.Func; |
|
|
|
|
import org.springblade.desk.basic.constant.FlowConst; |
|
|
|
|
import org.springblade.desk.basic.pojo.entity.BasicClazz; |
|
|
|
|
import org.springblade.desk.basic.pojo.entity.BsAssignEntity; |
|
|
|
|
import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity; |
|
|
|
|
import org.springblade.desk.basic.pojo.entity.WorkCenter; |
|
|
|
|
@ -36,6 +40,9 @@ import org.springblade.desk.device.pojo.entity.RackSetEntity; |
|
|
|
|
import org.springblade.desk.device.service.IEquipmentService; |
|
|
|
|
import org.springblade.desk.device.service.IFeiBaSetService; |
|
|
|
|
import org.springblade.desk.device.service.IRackSetService; |
|
|
|
|
import org.springblade.desk.energy.util.HttpRequestService; |
|
|
|
|
import org.springblade.desk.logistics.pojo.dto.AllocationMessPageDTO; |
|
|
|
|
import org.springblade.desk.logistics.pojo.vo.AllocationMessVO; |
|
|
|
|
import org.springblade.desk.order.mapper.YieldOrderMapper; |
|
|
|
|
import org.springblade.desk.order.pojo.entity.YieldOrder; |
|
|
|
|
import org.springblade.desk.order.pojo.enums.YieldOrderEnum; |
|
|
|
|
@ -52,12 +59,14 @@ import org.springblade.desk.quality.mapper.InspectionTaskMapper; |
|
|
|
|
import org.springblade.desk.quality.pojo.entity.*; |
|
|
|
|
import org.springblade.desk.quality.service.*; |
|
|
|
|
import org.springblade.desk.util.date.DateUtils; |
|
|
|
|
import org.springblade.erpdata.feign.IErpDataLogisticsClient; |
|
|
|
|
import org.springblade.scheduling.pojo.entity.WorkOrderEntity; |
|
|
|
|
import org.springblade.erpdata.feign.IErpDataProduceClient; |
|
|
|
|
import org.springblade.system.cache.DictCache; |
|
|
|
|
import org.springblade.system.cache.UserCache; |
|
|
|
|
import org.springblade.system.pojo.entity.User; |
|
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
|
import org.springframework.context.annotation.Lazy; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
|
|
@ -102,6 +111,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
|
|
|
|
|
private final IWorkPlanItemDetailService workPlanItemDetailService; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private final InspectionTaskMapper inspectionTaskMapper; |
|
|
|
|
|
|
|
|
|
private final IWorkOrderRunService workOrderRunService; |
|
|
|
|
@ -114,6 +124,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
|
|
|
|
|
private final IWorkPlanRunService workPlanRunService; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private final PlateAroundMapper plateAroundMapper; |
|
|
|
|
|
|
|
|
|
private final IProcessAbilityService processAbilityService; |
|
|
|
|
@ -123,6 +134,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
|
|
|
|
|
private final IDsPartService dsPartService; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private final YieldOrderMapper yieldOrderMapper; |
|
|
|
|
|
|
|
|
|
private final IEquipmentService equipmentService; |
|
|
|
|
@ -162,6 +174,14 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
|
|
|
|
|
private final IWorkOrderAdjustService workOrderAdjustService; |
|
|
|
|
|
|
|
|
|
private final IBasicClazzService basicClazzService; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private final HttpRequestService httpRequestService; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private final IErpDataLogisticsClient erpDataLogisticsClient; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO workOrder) { |
|
|
|
|
return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder)); |
|
|
|
|
@ -2602,4 +2622,153 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
nf.setGroupingUsed(useGrouping); |
|
|
|
|
return nf.format(n); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Boolean isTransferTest(Long woId) { |
|
|
|
|
List<WorkPlanItem> prWorkPlanItems = workPlanItemService.listByWoId(woId); |
|
|
|
|
|
|
|
|
|
// 没有试验项目,不能转试
|
|
|
|
|
if (!(prWorkPlanItems != null && !prWorkPlanItems.isEmpty())) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
boolean flag = false; |
|
|
|
|
for (WorkPlanItem prWorkPlanItem : prWorkPlanItems) { |
|
|
|
|
// 如果试验项目中包含 承压检测 则代表可以发起转试 24/8/5 牛营杰确认
|
|
|
|
|
if ("承压检测".equals(prWorkPlanItem.getItemName())) { |
|
|
|
|
if (prWorkPlanItem.getCheckResult() == -1) { |
|
|
|
|
flag = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return flag; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public List<Map<String, String>> trialItemList() { |
|
|
|
|
// 构造 SQL 查询语句
|
|
|
|
|
List<BasicClazz> basicClazzList = basicClazzService.list(new LambdaQueryWrapper<BasicClazz>() |
|
|
|
|
.eq(BasicClazz::getBizType, 11)); |
|
|
|
|
List<String> nameList = basicClazzList.stream().map(BasicClazz::getName).collect(Collectors.toList()); |
|
|
|
|
List<Map<String, String>> mapList = erpDataProduceClient.trialItemList(nameList).getData(); |
|
|
|
|
// 转换查询结果
|
|
|
|
|
List<Map<String, String>> result = new ArrayList<>(); |
|
|
|
|
if (mapList != null && !mapList.isEmpty()) { |
|
|
|
|
for (Map<String,String> map : mapList) { |
|
|
|
|
Map<String, String> item = new HashMap<>(); |
|
|
|
|
item.put("value", map.get("key") != null ? map.get("key") : ""); |
|
|
|
|
item.put("label", map.get("value") != null ? map.get("value") : ""); |
|
|
|
|
result.add(item); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Map<String,Object> queryAllocationMess(AllocationMessPageDTO dto) { |
|
|
|
|
List<AllocationMessVO> allocationMessList = erpDataLogisticsClient.queryAllocationMess(dto).getData(); |
|
|
|
|
int totalAllocationMessNum = erpDataLogisticsClient.queryAllocationMessNum(dto).getData(); |
|
|
|
|
Map<String,Object> result = new HashMap<>(3); |
|
|
|
|
result.put("current",dto.getPageNum()); |
|
|
|
|
result.put("record",allocationMessList); |
|
|
|
|
result.put("total",totalAllocationMessNum); |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void launchTest(Map<String, Object> data, BladeUser user) throws Exception { |
|
|
|
|
// 提取参数
|
|
|
|
|
String batchNo = (String) data.get("batchNo"); |
|
|
|
|
Integer quantity = Integer.parseInt(data.get("quantity").toString()); |
|
|
|
|
String woCode = (String) data.get("woCode"); |
|
|
|
|
String remark = (String) data.get("remark"); |
|
|
|
|
String partCode = (String) data.get("partCode"); |
|
|
|
|
String productType = (String) data.get("productType"); |
|
|
|
|
String partName = (String) data.get("partName"); |
|
|
|
|
Object testListObj = data.get("testList"); |
|
|
|
|
JSONArray testList = (JSONArray) JSON.toJSON(testListObj); |
|
|
|
|
Long woId = Long.parseLong(data.get("woId").toString()); |
|
|
|
|
|
|
|
|
|
// 生成转试单号
|
|
|
|
|
String pptCode = generatePptCode(); |
|
|
|
|
|
|
|
|
|
// 获取相关工序
|
|
|
|
|
WorkPlan workPlan = findRelevantWorkPlan(woId); |
|
|
|
|
|
|
|
|
|
// 处理每个测试项
|
|
|
|
|
processTestItems(testList, batchNo, quantity, woCode, remark, partCode, partName, productType, pptCode, workPlan, user); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String generatePptCode() { |
|
|
|
|
Calendar c = Calendar.getInstance(); |
|
|
|
|
Date currentDate = new Date(); |
|
|
|
|
c.setTime(currentDate); |
|
|
|
|
String year = String.valueOf(c.get(Calendar.YEAR)); |
|
|
|
|
int month = c.get(Calendar.MONTH) + 1; |
|
|
|
|
String formattedMonth = month < 10 ? "0" + month : String.valueOf(month); |
|
|
|
|
|
|
|
|
|
PlanTest latestData = planTestService.getLatestData(currentDate); |
|
|
|
|
StringBuilder pptCode = new StringBuilder("LCR" + year + "-" + formattedMonth); |
|
|
|
|
|
|
|
|
|
if (latestData != null && latestData.getId() != null) { |
|
|
|
|
if (org.apache.commons.lang3.StringUtils.isNotBlank(latestData.getCode())) { |
|
|
|
|
String numStr = String.valueOf(Integer.parseInt(latestData.getCode().substring(10)) + 1); |
|
|
|
|
pptCode.append("0".repeat(Math.max(0, 6 - numStr.length()))); |
|
|
|
|
pptCode.append(numStr); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
pptCode.append("000001"); |
|
|
|
|
} |
|
|
|
|
return pptCode.toString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private WorkPlan findRelevantWorkPlan(Long woId) { |
|
|
|
|
List<WorkPlanItem> prWorkPlanItems = workPlanItemService.listByWoId(woId); |
|
|
|
|
WorkPlan prWorkPlan = null; |
|
|
|
|
for (WorkPlanItem item : prWorkPlanItems) { |
|
|
|
|
if ("承压检测".equals(item.getItemName()) || "承压测试".equals(item.getItemName()) || "承压测试检测".equals(item.getItemName())) { |
|
|
|
|
if (item.getCheckResult() == -1) { |
|
|
|
|
prWorkPlan = workPlanService.getById(item.getWpId()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return prWorkPlan; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void processTestItems(JSONArray testList, String batchNo, Integer quantity, String woCode, String remark, |
|
|
|
|
String partCode, String partName, String productType, String pptCode, |
|
|
|
|
WorkPlan workPlan, BladeUser user) throws Exception { |
|
|
|
|
for (int i = 0; i < testList.size(); i++) { |
|
|
|
|
JSONObject object = testList.getObject(i, JSONObject.class); |
|
|
|
|
String value = object.getString("value"); |
|
|
|
|
String label = object.getString("label"); |
|
|
|
|
|
|
|
|
|
JSONObject response = httpRequestService.launchTest( |
|
|
|
|
batchNo, quantity, woCode, remark, value, label, i + 1, user, partCode, partName, productType, pptCode |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (response != null) { |
|
|
|
|
saveTestRecord(workPlan, user, value, label, pptCode, response, i + 1); |
|
|
|
|
} else { |
|
|
|
|
throw new BusinessException("LIMS系统接口调用失败,请联系相关负责人处理。"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void saveTestRecord(WorkPlan workPlan, BladeUser user, String testKey, String testName, |
|
|
|
|
String pptCode, JSONObject response, int sequence) { |
|
|
|
|
PlanTest prPlanTest = new PlanTest(); |
|
|
|
|
prPlanTest.setWpId(workPlan.getId()); |
|
|
|
|
prPlanTest.setTestUserId(user.getUserId()); |
|
|
|
|
prPlanTest.setTestUserName(user.getUserName()); |
|
|
|
|
prPlanTest.setTestTime(LocalDateTime.now()); |
|
|
|
|
prPlanTest.setTestNo((long) sequence); |
|
|
|
|
prPlanTest.setWpCode(testKey); |
|
|
|
|
prPlanTest.setTestName(testName); |
|
|
|
|
prPlanTest.setTestStatus("已送"); |
|
|
|
|
prPlanTest.setCode(pptCode); |
|
|
|
|
prPlanTest.setErpId(response.getString("id")); |
|
|
|
|
prPlanTest.setDataId(response.getString("str1")); |
|
|
|
|
planTestService.save(prPlanTest); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|