|
@@ -3,7 +3,6 @@ package com.fjhx.mes.service.production.impl;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
-import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
@@ -12,16 +11,20 @@ import com.fjhx.common.utils.Assert;
|
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
|
import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
|
|
|
import com.fjhx.mes.entity.production.dto.ProductionTaskDetailDto;
|
|
|
import com.fjhx.mes.entity.production.dto.ProductionTaskDetailSelectDto;
|
|
|
import com.fjhx.mes.entity.production.po.*;
|
|
|
import com.fjhx.mes.entity.production.vo.ProductionTaskDetailRecordVo;
|
|
|
import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
|
|
|
+import com.fjhx.mes.entity.technology.po.Technology;
|
|
|
import com.fjhx.mes.entity.work.po.WorkOrder;
|
|
|
import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
|
|
|
import com.fjhx.mes.entity.work.vo.WorkOrderVo;
|
|
|
import com.fjhx.mes.mapper.production.ProductionTaskDetailMapper;
|
|
|
+import com.fjhx.mes.service.applicable.ApplicableProductsService;
|
|
|
import com.fjhx.mes.service.production.*;
|
|
|
+import com.fjhx.mes.service.technology.TechnologyService;
|
|
|
import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
|
|
|
import com.fjhx.mes.service.work.WorkOrderService;
|
|
|
import com.fjhx.socket.core.PushTypeEnum;
|
|
@@ -75,6 +78,10 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
private ProductionProcessesService productionProcessesService;
|
|
|
@Autowired
|
|
|
private ProductionTaskProcessesDetailService productionTaskProcessesDetailService;
|
|
|
+ @Autowired
|
|
|
+ private ApplicableProductsService applicableProductsService;
|
|
|
+ @Autowired
|
|
|
+ private TechnologyService technologyService;
|
|
|
|
|
|
@Override
|
|
|
public Page<ProductionTaskDetailVo> getPage(ProductionTaskDetailSelectDto dto) {
|
|
@@ -170,7 +177,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
public synchronized void circulation(ProductionTaskDetailDto dto) {
|
|
|
ProductionTaskDetail productionTaskDetail = this.getById(dto.getId());
|
|
|
|
|
|
- if(Objects.equals(productionTaskDetail.getCirculationStatus(),1)){
|
|
|
+ if (Objects.equals(productionTaskDetail.getCirculationStatus(), 1)) {
|
|
|
throw new ServiceException("该任务已被提交,请重试或刷新!");
|
|
|
}
|
|
|
|
|
@@ -220,7 +227,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
productionTaskDetailRecordService.save(productionTaskDetailRecord);
|
|
|
|
|
|
//保存附件
|
|
|
- ObsFileUtil.saveFile(dto.getFileList(),productionTaskDetailRecord.getId());
|
|
|
+ ObsFileUtil.saveFile(dto.getFileList(), productionTaskDetailRecord.getId());
|
|
|
|
|
|
//推送消息给下一工序的用户有单可以抢了
|
|
|
Long nextProductionProcessesId = productionTaskDetail.getNextProductionProcessesId();
|
|
@@ -242,7 +249,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
throw new ServiceException("未查询到任务明细信息");
|
|
|
}
|
|
|
|
|
|
- if(Objects.equals(productionTaskDetail.getFinishStatus(),1)){
|
|
|
+ if (Objects.equals(productionTaskDetail.getFinishStatus(), 1)) {
|
|
|
throw new ServiceException("该任务已完工入库,请重试或刷新!");
|
|
|
}
|
|
|
|
|
@@ -262,7 +269,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
productionTaskDetailRecordService.save(productionTaskDetailRecord);
|
|
|
|
|
|
//保存附件
|
|
|
- ObsFileUtil.saveFile(productionTaskDetailDto.getFileList(),productionTaskDetailRecord.getId());
|
|
|
+ ObsFileUtil.saveFile(productionTaskDetailDto.getFileList(), productionTaskDetailRecord.getId());
|
|
|
|
|
|
StockWait stockWait = new StockWait();
|
|
|
stockWait.setType(1);//入库
|
|
@@ -350,7 +357,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
WorkOrderProductionProcesses wopp = productionProcessesList.get(i);
|
|
|
if (wopp.getId().equals(productionTaskDetail.getProductionProcessesId())) {
|
|
|
//默认赋值空 如果有下一节点赋值下一节点id
|
|
|
- if ((i - 1) >=0) {
|
|
|
+ if ((i - 1) >= 0) {
|
|
|
WorkOrderProductionProcesses nextProductionProcesses = productionProcessesList.get(i - 1);
|
|
|
productionTaskDetail.setPreviousProcessesId(nextProductionProcesses.getId());
|
|
|
break;
|
|
@@ -383,13 +390,13 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
* 获取当前用户某一工序还在进行中的任务数
|
|
|
*/
|
|
|
@Override
|
|
|
- public Long haveTaskCount(ProductionTaskDetailDto dto){
|
|
|
+ public Long haveTaskCount(ProductionTaskDetailDto dto) {
|
|
|
//获取负责人为当前用户 工序为某一工序 未在流转(进行中) 未完成 的任务计数
|
|
|
- return this.count(q->q
|
|
|
- .eq(ProductionTaskDetail::getPersonLiableId,SecurityUtils.getUserId())
|
|
|
- .eq(ObjectUtil.isNotEmpty(dto.getProductionProcessesId()),ProductionTaskDetail::getProductionProcessesId,dto.getProductionProcessesId())
|
|
|
- .eq(ProductionTaskDetail::getCirculationStatus,0)
|
|
|
- .eq(ProductionTaskDetail::getFinishStatus,0)
|
|
|
+ return this.count(q -> q
|
|
|
+ .eq(ProductionTaskDetail::getPersonLiableId, SecurityUtils.getUserId())
|
|
|
+ .eq(ObjectUtil.isNotEmpty(dto.getProductionProcessesId()), ProductionTaskDetail::getProductionProcessesId, dto.getProductionProcessesId())
|
|
|
+ .eq(ProductionTaskDetail::getCirculationStatus, 0)
|
|
|
+ .eq(ProductionTaskDetail::getFinishStatus, 0)
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -398,9 +405,9 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
*/
|
|
|
@Override
|
|
|
@DSTransactional
|
|
|
- public void revokeTask(ProductionTaskDetailDto dto){
|
|
|
+ public void revokeTask(ProductionTaskDetailDto dto) {
|
|
|
ProductionTaskDetail productionTaskDetail = getById(dto.getId());
|
|
|
- Assert.notEmpty(productionTaskDetail,"查询不到该任务信息");
|
|
|
+ Assert.notEmpty(productionTaskDetail, "查询不到该任务信息");
|
|
|
|
|
|
//修改流转状态
|
|
|
productionTaskDetail.setCirculationStatus(1);
|
|
@@ -417,7 +424,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
* 生产进度
|
|
|
*/
|
|
|
@Override
|
|
|
- public Page<ProductionTaskDetailVo> taskProgressPage(ProductionTaskDetailSelectDto dto){
|
|
|
+ public Page<ProductionTaskDetailVo> taskProgressPage(ProductionTaskDetailSelectDto dto) {
|
|
|
IWrapper<ProductionTaskDetail> wrapper = IWrapper.getWrapper();
|
|
|
wrapper.keyword(dto.getKeyword(),
|
|
|
new SqlField("t1.contractCode"),
|
|
@@ -426,37 +433,90 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
new SqlField("t1.productionTaskCode"),
|
|
|
new SqlField("t1.productCode"),
|
|
|
new SqlField("t1.productName"),
|
|
|
- new SqlField("t1",ProductionTaskDetail::getProductSn),
|
|
|
+ new SqlField("t1", ProductionTaskDetail::getProductSn),
|
|
|
new SqlField("t1.due_date"),
|
|
|
new SqlField("t1.productionProcessesName"),
|
|
|
new SqlField("t1.personLiableName"),
|
|
|
- new SqlField("t1",ProductionTaskDetail::getFinishTime)
|
|
|
+ new SqlField("t1", ProductionTaskDetail::getFinishTime)
|
|
|
);
|
|
|
//高级检索
|
|
|
- wrapper.like("t1.contractCode",dto.getContractCode());
|
|
|
- wrapper.like("t1.workOrderCode",dto.getWorkOrderCode());
|
|
|
- wrapper.like("t1.productionPlanCode",dto.getProductionPlanCode());
|
|
|
- wrapper.like("t1.productionTaskCode",dto.getProductionTaskCode());
|
|
|
- wrapper.like("t1.productCode",dto.getProductCode());
|
|
|
- wrapper.like("t1.productName",dto.getProductName());
|
|
|
- wrapper.like("t1",ProductionTaskDetail::getProductSn,dto.getProductSn());
|
|
|
- wrapper.eq("t1.due_date",dto.getDueDate());
|
|
|
- wrapper.like("t1.productionProcessesName",dto.getProductionProcessesName());
|
|
|
- wrapper.like("t1.personLiableName",dto.getPersonLiableName());
|
|
|
- wrapper.eq("t1",ProductionTaskDetail::getFinishStatus,dto.getGetFinishStatus());
|
|
|
+ wrapper.like("t1.contractCode", dto.getContractCode());
|
|
|
+ wrapper.like("t1.workOrderCode", dto.getWorkOrderCode());
|
|
|
+ wrapper.like("t1.productionPlanCode", dto.getProductionPlanCode());
|
|
|
+ wrapper.like("t1.productionTaskCode", dto.getProductionTaskCode());
|
|
|
+ wrapper.like("t1.productCode", dto.getProductCode());
|
|
|
+ wrapper.like("t1.productName", dto.getProductName());
|
|
|
+ wrapper.like("t1", ProductionTaskDetail::getProductSn, dto.getProductSn());
|
|
|
+ wrapper.eq("t1.due_date", dto.getDueDate());
|
|
|
+ wrapper.like("t1.productionProcessesName", dto.getProductionProcessesName());
|
|
|
+ wrapper.like("t1.personLiableName", dto.getPersonLiableName());
|
|
|
+ wrapper.eq("t1", ProductionTaskDetail::getFinishStatus, dto.getGetFinishStatus());
|
|
|
// wrapper.eq("t1",ProductionTaskDetail::getFinishTime,dto.getGetFinishTime());
|
|
|
|
|
|
//完成时间包含时分秒需要将时间特殊处理
|
|
|
- if(ObjectUtil.isNotEmpty(dto.getGetFinishTime())) {
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getGetFinishTime())) {
|
|
|
Date beginTime = DateUtil.beginOfDay(DateUtil.parse(dto.getGetFinishTime()));
|
|
|
Date endTime = DateUtil.endOfDay(DateUtil.parse(dto.getGetFinishTime()));
|
|
|
wrapper.between("t1", ProductionTaskDetail::getFinishTime, beginTime, endTime);
|
|
|
}
|
|
|
|
|
|
|
|
|
- wrapper.orderByDesc("t1",ProductionTaskDetail::getId);
|
|
|
+ wrapper.orderByDesc("t1", ProductionTaskDetail::getId);
|
|
|
+
|
|
|
+ Page<ProductionTaskDetailVo> page = baseMapper.taskProgressPage(dto.getPage(), wrapper);
|
|
|
+
|
|
|
+ //处理工序
|
|
|
+ Map<Long, Long> applicableProductsMap = new HashMap<>();
|
|
|
+ Map<Long, String> technologyMap = new HashMap<>();
|
|
|
+ Map<Long, String> productionProcessesMap = new HashMap<>();
|
|
|
+
|
|
|
+
|
|
|
+ List<ProductionTaskDetailVo> records = page.getRecords();
|
|
|
+ List<Long> productIds = records.stream().map(ProductionTaskDetail::getProductId).distinct().collect(Collectors.toList());
|
|
|
+ List<ApplicableProducts> applicableProducts = applicableProductsService.list(q -> q.in(ApplicableProducts::getProductId, productIds));
|
|
|
+ if (ObjectUtil.isNotEmpty(applicableProducts)) {
|
|
|
+ applicableProductsMap = applicableProducts.stream().collect(Collectors.toMap(ApplicableProducts::getProductId,ApplicableProducts::getTechnologyId));
|
|
|
+
|
|
|
+ List<Long> technologyIds = applicableProducts.stream().map(ApplicableProducts::getTechnologyId).collect(Collectors.toList());
|
|
|
+ List<Technology> technologys = technologyService.list(q -> q.in(Technology::getId, technologyIds));
|
|
|
+ if (ObjectUtil.isNotEmpty(technologys)) {
|
|
|
+ technologyMap = technologys.stream().collect(Collectors.toMap(Technology::getId,Technology::getProcessRoute));
|
|
|
+
|
|
|
+ List<Long> ppIds = new ArrayList<>();
|
|
|
+ for (Technology technology : technologys) {
|
|
|
+ String processRoute = technology.getProcessRoute();
|
|
|
+ String[] split = processRoute.split(",");
|
|
|
+ for (String s : split) {
|
|
|
+ ppIds.add(Long.parseLong(s));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(ObjectUtil.isNotEmpty(ppIds)) {
|
|
|
+ productionProcessesMap = productionProcessesService.mapKV(ProductionProcesses::getId, ProductionProcesses::getName, q -> q.in(ProductionProcesses::getId, ppIds));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (ProductionTaskDetailVo record : records) {
|
|
|
+ //赋值非定制工序列表
|
|
|
+ if("0".equals(record.getIsCustomized())){
|
|
|
+ Long technologyId = applicableProductsMap.getOrDefault(record.getProductId(), -1L);
|
|
|
+ String processRoute = technologyMap.getOrDefault(technologyId, "");
|
|
|
+ String[] split = processRoute.split(",");
|
|
|
+ List<String> arr = new ArrayList<>();
|
|
|
+ for (String s : split) {
|
|
|
+ if(ObjectUtil.isEmpty(s)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String ppName = productionProcessesMap.getOrDefault(Long.parseLong(s),"");
|
|
|
+ arr.add(ppName);
|
|
|
+ }
|
|
|
+
|
|
|
+ String collect = arr.stream().collect(Collectors.joining("->"));
|
|
|
+ record.setProductionProcessesNames(collect);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- Page<ProductionTaskDetailVo> page = baseMapper.taskProgressPage(dto.getPage(),wrapper);
|
|
|
return page;
|
|
|
}
|
|
|
|
|
@@ -466,7 +526,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
@Override
|
|
|
public ProductionTaskDetailVo detail(Long id) {
|
|
|
ProductionTaskDetailVo productionTaskDetailVo = baseMapper.getDetail(IWrapper.<ProductionTaskDetail>getWrapper()
|
|
|
- .eq("ptd",ProductionTaskDetail::getId,id)
|
|
|
+ .eq("ptd", ProductionTaskDetail::getId, id)
|
|
|
);
|
|
|
// ProductionTaskDetail productionTaskDetail = this.getById(id);
|
|
|
ProductionTask productionTask = productionTaskService.getById(productionTaskDetailVo.getProductionTaskId());
|
|
@@ -478,12 +538,12 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
productionTaskDetailVo.getNextProductionProcessesId()
|
|
|
);
|
|
|
|
|
|
- Map<Long,String> productionProcessesMap;
|
|
|
- if (Objects.equals(workOrder.getIsCustomized(),1)){
|
|
|
+ Map<Long, String> productionProcessesMap;
|
|
|
+ if (Objects.equals(workOrder.getIsCustomized(), 1)) {
|
|
|
//定制
|
|
|
productionProcessesMap = workOrderProductionProcessesService.mapKV(WorkOrderProductionProcesses::getId,
|
|
|
WorkOrderProductionProcesses::getName, q -> q.in(WorkOrderProductionProcesses::getId, processesIds));
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
//非定制
|
|
|
productionProcessesMap = productionProcessesService.mapKV(ProductionProcesses::getId, ProductionProcesses::getName,
|
|
|
q -> q.in(ProductionProcesses::getId, processesIds));
|