|
@@ -1,12 +1,27 @@
|
|
|
package com.dayou.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.dayou.common.BaseEntity;
|
|
|
import com.dayou.configuration.DfsConfig;
|
|
|
+import com.dayou.dto.AssetsProWareHouseDTO;
|
|
|
+import com.dayou.dto.TaskRecordDTO;
|
|
|
+import com.dayou.dto.WareHouseDTO;
|
|
|
+import com.dayou.dto.WorkNodeCommit;
|
|
|
+import com.dayou.entity.*;
|
|
|
import com.dayou.enums.MainBusinessEnum;
|
|
|
+import com.dayou.enums.ProductionEnum;
|
|
|
+import com.dayou.enums.workflow.WorkflowNodeEnum;
|
|
|
+import com.dayou.exception.ErrorCode;
|
|
|
import com.dayou.mapper.MajorProductionMapper;
|
|
|
import com.dayou.mapper.PersonalTargetMapper;
|
|
|
-import com.dayou.service.IBusinessProductionService;
|
|
|
-import com.dayou.service.IPersonalTargetService;
|
|
|
+import com.dayou.mapper.WorkFlowNodeInstanceMapper;
|
|
|
+import com.dayou.service.*;
|
|
|
+import com.dayou.service.workflow.IWorkFlowNodeInstanceService;
|
|
|
+import com.dayou.service.workflow.IWorkFlowService;
|
|
|
+import com.dayou.service.workflow.IWorkTaskRecordService;
|
|
|
import com.dayou.utils.FileUploadUtils;
|
|
|
import com.dayou.utils.PersonalUtils;
|
|
|
import com.dayou.utils.QRCodeUtil;
|
|
@@ -18,12 +33,18 @@ import org.springframework.context.ResourceLoaderAware;
|
|
|
import org.springframework.core.io.Resource;
|
|
|
import org.springframework.core.io.ResourceLoader;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.io.*;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
import static com.dayou.common.Constants.PNG;
|
|
|
import static com.dayou.common.Constants.PROD_VALIDATE_URI;
|
|
|
import static com.dayou.enums.MainBusinessEnum.PERSONAL_BUSINESS;
|
|
|
+import static com.dayou.enums.ProductionEnum.*;
|
|
|
+import static com.dayou.enums.workflow.NodeLogEnum.PASS;
|
|
|
+import static com.dayou.enums.workflow.WorkflowNodeEnum.*;
|
|
|
|
|
|
/**
|
|
|
* 类说明:
|
|
@@ -46,6 +67,23 @@ public class BusinessProductionServiceImpl implements IBusinessProductionService
|
|
|
|
|
|
@Autowired
|
|
|
private DfsConfig dfsConfig;
|
|
|
+ @Autowired
|
|
|
+ private IMajorProductionService majorProductionService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private WorkFlowNodeInstanceMapper workFlowNodeInstanceMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPersonalProductionService personalProductionService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IAssetsProductionService assetsProductionService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IWorkFlowService workFlowService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IWorkTaskRecordService workTaskRecordService;
|
|
|
|
|
|
@Override
|
|
|
public void setResourceLoader(ResourceLoader resourceLoader) {
|
|
@@ -107,8 +145,7 @@ public class BusinessProductionServiceImpl implements IBusinessProductionService
|
|
|
String baseDir = dfsConfig.getPath()+dfsConfig.getCode();
|
|
|
String dateIndexFileName = FileUploadUtils.createDateIndexFileName(reportNo + PNG);
|
|
|
File absoluteFile = FileUploadUtils.getAbsoluteFile(baseDir, dateIndexFileName);
|
|
|
- String flog = production.substring(0, 1);
|
|
|
- QRCodeUtil.write(reportNo+flog,200,absoluteFile);
|
|
|
+ QRCodeUtil.write(reportNo,200,absoluteFile);
|
|
|
return dfsConfig.getDomain() + dfsConfig.getCode() + dateIndexFileName;
|
|
|
} catch (IOException e) {
|
|
|
throw new RuntimeException(e);
|
|
@@ -116,4 +153,121 @@ public class BusinessProductionServiceImpl implements IBusinessProductionService
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public Boolean inOutWareHouse(String productionNo) {
|
|
|
+ if (StrUtil.isNotBlank(productionNo)){
|
|
|
+
|
|
|
+ Map<String,Object> nodeMap = workFlowNodeInstanceMapper.getInOutInstanceNode(productionNo);
|
|
|
+ if (CollectionUtil.isEmpty(nodeMap)){
|
|
|
+ ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"该产品目前还不能进行出入库操作。");
|
|
|
+ }
|
|
|
+ MainBusinessEnum businessType = MainBusinessEnum.valueOf((String) nodeMap.get("businessType"));
|
|
|
+ Long businessId = (Long) nodeMap.get("businessId");
|
|
|
+ Long recodeId = (Long) nodeMap.get("id");
|
|
|
+ String code = (String) nodeMap.get("code");
|
|
|
+
|
|
|
+ //完成出库业务操作
|
|
|
+ Boolean doRet = doInOutWareHouse(businessType, businessId, recodeId, productionNo,code);
|
|
|
+
|
|
|
+ if (doRet){
|
|
|
+ //提交工作流节点
|
|
|
+ WorkNodeCommit workNodeCommit = new WorkNodeCommit();
|
|
|
+ workNodeCommit.setState(PASS);
|
|
|
+ workNodeCommit.setIfCheckTask(true);
|
|
|
+ workNodeCommit.setComments(code.contains("IN")?"入库":"出库");
|
|
|
+ workNodeCommit.setInstanceNodeId((Long) nodeMap.get("instanceId"));
|
|
|
+ workNodeCommit.setBusinessSubId((String) nodeMap.get("businessSubId"));
|
|
|
+ workNodeCommit.setBusinessMinId((String) nodeMap.get("businessMinId"));
|
|
|
+ return workFlowService.commit(workNodeCommit);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return Boolean.FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Boolean doInOutWareHouse(MainBusinessEnum businessEnum,Long businessId,Long recordId,String productionNo,String code) {
|
|
|
+
|
|
|
+ Boolean doWareHouseRet = Boolean.FALSE;
|
|
|
+ switch (businessEnum){
|
|
|
+ case PERSONAL_BUSINESS:
|
|
|
+ TaskRecordDTO<PersonalProduction> taskRecord = new TaskRecordDTO<>();
|
|
|
+ taskRecord.setRecordId(recordId);
|
|
|
+ PersonalTarget personalTarget = personalTargetMapper.selectOne(new LambdaQueryWrapper<PersonalTarget>()
|
|
|
+ .eq(PersonalTarget::getPersonalId, businessId)
|
|
|
+ .select(BaseEntity::getId));
|
|
|
+ Long targetId = personalTarget.getId();
|
|
|
+ PersonalProduction production = new PersonalProduction();
|
|
|
+ production.setTargetId(targetId);
|
|
|
+ if (STATEMENT_IN.name().equals(code)){
|
|
|
+ production.setProduction(STATEMENT.name());
|
|
|
+ taskRecord.setTaskData(production);
|
|
|
+ doWareHouseRet = personalProductionService.repertoryIn(taskRecord);
|
|
|
+ }else if (STATEMENT_OUT.name().equals(code)){
|
|
|
+ production.setProduction(STATEMENT.name());
|
|
|
+ taskRecord.setTaskData(production);
|
|
|
+ doWareHouseRet = personalProductionService.repertoryOut(taskRecord);
|
|
|
+ }else if (REPORT_IN.name().equals(code)){
|
|
|
+ production.setProduction(REPORT.name());
|
|
|
+ taskRecord.setTaskData(production);
|
|
|
+ doWareHouseRet = personalProductionService.repertoryIn(taskRecord);
|
|
|
+ }else if (REPORT_OUT.name().equals(code)){
|
|
|
+ production.setProduction(REPORT.name());
|
|
|
+ taskRecord.setTaskData(production);
|
|
|
+ doWareHouseRet = personalProductionService.repertoryOut(taskRecord);
|
|
|
+ }else if (LETTER_IN.name().equals(code)){
|
|
|
+ production.setProduction(LETTER.name());
|
|
|
+ taskRecord.setTaskData(production);
|
|
|
+ doWareHouseRet = personalProductionService.repertoryIn(taskRecord);
|
|
|
+ }else if (LETTER_OUT.name().equals(code)){
|
|
|
+ production.setProduction(LETTER.name());
|
|
|
+ taskRecord.setTaskData(production);
|
|
|
+ doWareHouseRet = personalProductionService.repertoryOut(taskRecord);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case MAJOR_BUSINESS:
|
|
|
+ TaskRecordDTO<WareHouseDTO> taskRecordDTO = new TaskRecordDTO<>();
|
|
|
+ taskRecordDTO.setRecordId(recordId);
|
|
|
+ MajorProduction mp = majorProductionService.getOne(new LambdaQueryWrapper<MajorProduction>()
|
|
|
+ .select(BaseEntity::getId,MajorProduction::getProduction,MajorProduction::getRepertoryState)
|
|
|
+ .eq(MajorProduction::getMajorId, businessId)
|
|
|
+ .eq(MajorProduction::getReportNo, productionNo));
|
|
|
+ Long productionId = mp.getId();
|
|
|
+ String productionType = mp.getProduction();
|
|
|
+ Boolean state = mp.getRepertoryState()==null?Boolean.FALSE:Boolean.TRUE;
|
|
|
+ WareHouseDTO wareHouseDTO = WareHouseDTO.builder()
|
|
|
+ .productionId(productionId)
|
|
|
+ .productionType(productionType)
|
|
|
+ .repertoryState(Boolean.FALSE)
|
|
|
+ .repertoryState(state)
|
|
|
+ .reportNo(productionNo).build();
|
|
|
+ taskRecordDTO.setTaskData(wareHouseDTO);
|
|
|
+ doWareHouseRet = majorProductionService.warehouse(taskRecordDTO);
|
|
|
+ break;
|
|
|
+ case ASSET_BUSINESS:
|
|
|
+ AssetsProduction ap = assetsProductionService.getOne(new LambdaQueryWrapper<AssetsProduction>()
|
|
|
+ .select(BaseEntity::getId, AssetsProduction::getProductionType, AssetsProduction::getRepertoryState)
|
|
|
+ .eq(AssetsProduction::getBusinessId, businessId)
|
|
|
+ .eq(AssetsProduction::getProductionNo, productionNo));
|
|
|
+ Long id = ap.getId();
|
|
|
+ String pt = ap.getProductionType();
|
|
|
+ Boolean status = ap.getRepertoryState()==null?Boolean.FALSE:Boolean.TRUE;
|
|
|
+ AssetsProWareHouseDTO assetsProWareHouseDTO = new AssetsProWareHouseDTO();
|
|
|
+ assetsProWareHouseDTO.setBusinessId(businessId);
|
|
|
+ assetsProWareHouseDTO.setProductionId(id);
|
|
|
+ assetsProWareHouseDTO.setProductionType(pt);
|
|
|
+ assetsProWareHouseDTO.setRepertoryState(status);
|
|
|
+ assetsProWareHouseDTO.setProductionNo(productionNo);
|
|
|
+ doWareHouseRet = assetsProductionService.assetsProRepertory(assetsProWareHouseDTO);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (doWareHouseRet){
|
|
|
+ //完成任务
|
|
|
+ return workTaskRecordService.update(new LambdaUpdateWrapper<WorkTaskRecord>().set(WorkTaskRecord::getFinished, Boolean.TRUE)
|
|
|
+ .set(WorkTaskRecord::getFinishTime, LocalDateTime.now()).eq(BaseEntity::getId, recordId));
|
|
|
+ }
|
|
|
+ return doWareHouseRet;
|
|
|
+
|
|
|
+ }
|
|
|
}
|