yang_shj
1 year ago
17 changed files with 699 additions and 27 deletions
@ -0,0 +1,17 @@
|
||||
package com.hnac.hzims.operational.access.feign; |
||||
|
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Component |
||||
public class AccessPlanV4ClientFallback implements IAccessPlanV4Client { |
||||
|
||||
@Override |
||||
public R<Boolean> listener(ProcessWorkFlowResponse processWorkFlowResponse) { |
||||
return R.fail("执行失败!"); |
||||
} |
||||
} |
@ -0,0 +1,17 @@
|
||||
package com.hnac.hzims.operational.access.feign; |
||||
|
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Component |
||||
public class AccessTaskV4ClientFallback implements IAccessTaskV4Client { |
||||
|
||||
@Override |
||||
public R<Boolean> listener(ProcessWorkFlowResponse processWorkFlowResponse) { |
||||
return R.fail("执行失败!"); |
||||
} |
||||
} |
@ -0,0 +1,25 @@
|
||||
package com.hnac.hzims.operational.access.feign; |
||||
|
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import com.hnac.hzims.operational.OperationalConstants; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.cloud.openfeign.FeignClient; |
||||
import org.springframework.web.bind.annotation.PostMapping; |
||||
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@FeignClient( |
||||
value = OperationalConstants.APP_NAME, |
||||
fallback = AccessTaskClientFallback.class |
||||
) |
||||
public interface IAccessPlanV4Client { |
||||
|
||||
String API_PREFIX = "/feign/accessPlanV4"; |
||||
|
||||
String PLAN_PROCESS_LISTENER = API_PREFIX + "listener"; |
||||
|
||||
@PostMapping(PLAN_PROCESS_LISTENER) |
||||
R<Boolean> listener(@RequestBody ProcessWorkFlowResponse processWorkFlowResponse); |
||||
} |
@ -0,0 +1,25 @@
|
||||
package com.hnac.hzims.operational.access.feign; |
||||
|
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import com.hnac.hzims.operational.OperationalConstants; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.cloud.openfeign.FeignClient; |
||||
import org.springframework.web.bind.annotation.PostMapping; |
||||
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@FeignClient( |
||||
value = OperationalConstants.APP_NAME, |
||||
fallback = AccessTaskClientFallback.class |
||||
) |
||||
public interface IAccessTaskV4Client { |
||||
|
||||
String API_PREFIX = "/feign/accessTaskV4"; |
||||
|
||||
String PLAN_PROCESS_LISTENER = API_PREFIX + "listener"; |
||||
|
||||
@PostMapping(PLAN_PROCESS_LISTENER) |
||||
R<Boolean> listener(@RequestBody ProcessWorkFlowResponse processWorkFlowResponse); |
||||
} |
@ -0,0 +1,38 @@
|
||||
package com.hnac.hzims.operational.access.controller; |
||||
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
||||
import com.hnac.hzims.operational.access.dto.AccessPlanV4DTO; |
||||
import com.hnac.hzims.operational.access.service.AccessPlanV4Service; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.AllArgsConstructor; |
||||
import org.springblade.core.boot.ctrl.BladeController; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.web.bind.annotation.PostMapping; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@RestController |
||||
@AllArgsConstructor |
||||
@RequestMapping("/overhaul_plan") |
||||
@Api(tags = "v4检修计划流程") |
||||
public class AccessPlanV4Controller extends BladeController { |
||||
|
||||
|
||||
private final AccessPlanV4Service service; |
||||
|
||||
/** |
||||
* v4检修计划流程开启 |
||||
* @return |
||||
*/ |
||||
@PostMapping("/overhaul_start_v4") |
||||
@ApiOperationSupport(order = 1) |
||||
@ApiOperation(value = "v4检修计划流程开启") |
||||
public R startV4(AccessPlanV4DTO entity) { |
||||
return R.status(service.startProcessV4(entity)); |
||||
} |
||||
} |
@ -0,0 +1,19 @@
|
||||
package com.hnac.hzims.operational.access.controller; |
||||
|
||||
import io.swagger.annotations.Api; |
||||
import lombok.AllArgsConstructor; |
||||
import org.springblade.core.boot.ctrl.BladeController; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@RestController |
||||
@AllArgsConstructor |
||||
@RequestMapping("/overhaul_task") |
||||
@Api(tags = "v4检修计划流程") |
||||
public class AccessV4Controller extends BladeController { |
||||
|
||||
} |
@ -0,0 +1,24 @@
|
||||
package com.hnac.hzims.operational.access.dto; |
||||
|
||||
import com.hnac.hzims.operational.access.entity.OperAccessPlanEntity; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class AccessPlanV4DTO extends OperAccessPlanEntity { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
@ApiModelProperty("检修材料列表") |
||||
private List<OperAccessMaterialDTO> accessMaterials; |
||||
|
||||
@ApiModelProperty("检修内容列表") |
||||
private List<OperAccessContentDTO> accessContents; |
||||
} |
@ -0,0 +1,39 @@
|
||||
package com.hnac.hzims.operational.access.dto; |
||||
|
||||
import com.hnac.hzims.operational.access.entity.OperAccessTaskEntity; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class AccessTaskV4DTO extends OperAccessTaskEntity { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
@ApiModelProperty(value = "创建机构集合") |
||||
private List<Long> deptIds; |
||||
|
||||
@ApiModelProperty(value = "工作流Key") |
||||
private String procDefId; |
||||
|
||||
@ApiModelProperty("为1时排除票据ID为空的数据") |
||||
private Long excludeNullTicket; |
||||
|
||||
@ApiModelProperty("检修任务详情") |
||||
private List<OperAccessTaskDetailDTO> accessTaskDetails; |
||||
|
||||
@ApiModelProperty("检修材料列表") |
||||
private List<OperAccessMaterialDTO> accessMaterials; |
||||
|
||||
@ApiModelProperty("开始时间") |
||||
private String startTime; |
||||
|
||||
@ApiModelProperty("结束时间") |
||||
private String endTime; |
||||
} |
@ -0,0 +1,34 @@
|
||||
package com.hnac.hzims.operational.access.feign; |
||||
|
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import com.hnac.hzims.operational.access.service.AccessPlanV4Service; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.web.bind.annotation.PostMapping; |
||||
import org.springframework.web.bind.annotation.RequestBody; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/feign/accessPlanV4") |
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
public class AccessPlanV4Client implements IAccessPlanV4Client { |
||||
|
||||
private final AccessPlanV4Service service; |
||||
|
||||
/** |
||||
* 检修计划流程监听 |
||||
* @param processWorkFlowResponse |
||||
* @return |
||||
*/ |
||||
@Override |
||||
@PostMapping("/listener") |
||||
public R<Boolean> listener(@RequestBody ProcessWorkFlowResponse processWorkFlowResponse) { |
||||
return R.status(service.listener(processWorkFlowResponse)); |
||||
} |
||||
} |
@ -0,0 +1,35 @@
|
||||
package com.hnac.hzims.operational.access.feign; |
||||
|
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import com.hnac.hzims.operational.access.service.AccessPlanV4Service; |
||||
import com.hnac.hzims.operational.access.service.AccessTaskV4Service; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.web.bind.annotation.PostMapping; |
||||
import org.springframework.web.bind.annotation.RequestBody; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/feign/accessTaskV4") |
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
public class AccessTaskV4Client implements IAccessPlanV4Client { |
||||
|
||||
private final AccessTaskV4Service service; |
||||
|
||||
/** |
||||
* 检修任务流程监听 |
||||
* @param processWorkFlowResponse |
||||
* @return |
||||
*/ |
||||
@Override |
||||
@PostMapping("/listener") |
||||
public R<Boolean> listener(@RequestBody ProcessWorkFlowResponse processWorkFlowResponse) { |
||||
return R.status(service.listener(processWorkFlowResponse)); |
||||
} |
||||
} |
@ -0,0 +1,14 @@
|
||||
package com.hnac.hzims.operational.access.service; |
||||
|
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import com.hnac.hzims.operational.access.dto.AccessPlanV4DTO; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface AccessPlanV4Service{ |
||||
|
||||
boolean startProcessV4(AccessPlanV4DTO entity); |
||||
|
||||
boolean listener(ProcessWorkFlowResponse processWorkFlowResponse); |
||||
} |
@ -0,0 +1,14 @@
|
||||
package com.hnac.hzims.operational.access.service; |
||||
|
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import com.hnac.hzims.operational.access.dto.AccessTaskV4DTO; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface AccessTaskV4Service { |
||||
|
||||
boolean startProcessV4(AccessTaskV4DTO entity); |
||||
|
||||
boolean listener(ProcessWorkFlowResponse processWorkFlowResponse); |
||||
} |
@ -0,0 +1,212 @@
|
||||
package com.hnac.hzims.operational.access.service.impl; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import com.hnac.hzims.operational.access.dto.*; |
||||
import com.hnac.hzims.operational.access.entity.OperAccessContentEntity; |
||||
import com.hnac.hzims.operational.access.entity.OperAccessMaterialEntity; |
||||
import com.hnac.hzims.operational.access.service.*; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.apache.commons.lang3.RandomUtils; |
||||
import org.springblade.core.log.exception.ServiceException; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.core.tool.utils.BeanUtil; |
||||
import org.springblade.core.tool.utils.CollectionUtil; |
||||
import org.springblade.core.tool.utils.DateUtil; |
||||
import org.springblade.core.tool.utils.ObjectUtil; |
||||
import org.springblade.flow.core.entity.BladeFlow; |
||||
import org.springblade.flow.core.feign.IFlowClient; |
||||
import org.springblade.flow.core.utils.FlowUtil; |
||||
import org.springframework.stereotype.Service; |
||||
import org.springframework.transaction.annotation.Transactional; |
||||
import org.springframework.util.CollectionUtils; |
||||
|
||||
import java.text.DecimalFormat; |
||||
import java.util.*; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
public class AccessPlanV4ServiceImpl implements AccessPlanV4Service{ |
||||
|
||||
private final IOperAccessPlanService planService; |
||||
|
||||
private final IOperAccessMaterialService materialService; |
||||
|
||||
private final IOperAccessContentService contentService; |
||||
|
||||
private final AccessTaskV4Service accessTaskV4Service; |
||||
|
||||
private final IFlowClient flowClient; |
||||
|
||||
/** |
||||
* 开启检修计划流程 |
||||
* @param entity |
||||
* @return |
||||
*/ |
||||
@Override |
||||
@Transactional(rollbackFor = Exception.class) |
||||
public boolean startProcessV4(AccessPlanV4DTO entity) { |
||||
// 步骤1.保存检修计划
|
||||
this.saveAccess(entity); |
||||
|
||||
// 步骤2.保存检修材料
|
||||
this.saveAccessMaterial(entity); |
||||
|
||||
// 步骤3.保存检修明细
|
||||
this.saveAccessContent(entity); |
||||
|
||||
// 步骤2.开启检修计划流程
|
||||
this.startProcess(entity); |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* 保存检修计划 |
||||
* @param entity |
||||
*/ |
||||
private void saveAccess(AccessPlanV4DTO entity) { |
||||
// 检修计划保存
|
||||
entity.setCode("PLAN_" + DateUtil.format(DateUtil.now(), DateUtil.PATTERN_DATETIME_MINI) + new DecimalFormat("###").format(RandomUtils.nextInt(0, 999))); |
||||
planService.save(entity); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 保存检修材料 |
||||
* @param entity |
||||
*/ |
||||
private void saveAccessMaterial(AccessPlanV4DTO entity) { |
||||
if(CollectionUtils.isEmpty(entity.getAccessMaterials())){ |
||||
return; |
||||
} |
||||
// 查询计划是否绑定检修材料
|
||||
List<OperAccessMaterialEntity> existsDetails = materialService.list(new LambdaQueryWrapper<OperAccessMaterialEntity>() {{ |
||||
eq(OperAccessMaterialEntity::getPlanId, entity.getId()); |
||||
eq(OperAccessMaterialEntity::getIsDeleted, 0L); |
||||
}}); |
||||
Set<Long> detailIds = entity.getAccessMaterials().stream().map(OperAccessMaterialDTO::getId).filter(Objects::nonNull).collect(Collectors.toSet()); |
||||
List<Long> ids = existsDetails.stream().map(OperAccessMaterialEntity::getId).filter(id -> !detailIds.contains(id)).collect(Collectors.toList()); |
||||
if (!CollectionUtils.isEmpty(ids)) { |
||||
materialService.deleteLogic(ids); |
||||
} |
||||
// 材料添加/修改
|
||||
for (OperAccessMaterialDTO material : entity.getAccessMaterials()) { |
||||
material.setPlanId(entity.getId()); |
||||
if (ObjectUtil.isEmpty(material.getId())) { |
||||
materialService.doSave(material); |
||||
continue; |
||||
} |
||||
materialService.updateById(material); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 保存检修明细 |
||||
* @param entity |
||||
*/ |
||||
private void saveAccessContent(AccessPlanV4DTO entity) { |
||||
if(CollectionUtils.isEmpty(entity.getAccessContents())){ |
||||
return; |
||||
} |
||||
// 查询计划是否绑定任务明细
|
||||
List<OperAccessContentEntity> existsDetails = contentService.list(new LambdaQueryWrapper<OperAccessContentEntity>() {{ |
||||
eq(OperAccessContentEntity::getPlanId, entity.getId()); |
||||
eq(OperAccessContentEntity::getIsDeleted, 0L); |
||||
}}); |
||||
Set<Long> detailIds = entity.getAccessContents().stream().map(OperAccessContentDTO::getId).filter(Objects::nonNull).collect(Collectors.toSet()); |
||||
List<Long> ids = existsDetails.stream().map(OperAccessContentEntity::getId).filter(id -> !detailIds.contains(id)).collect(Collectors.toList()); |
||||
if (!CollectionUtils.isEmpty(ids)) { |
||||
contentService.deleteLogic(ids); |
||||
} |
||||
// 明细添加/修改
|
||||
for (OperAccessContentDTO content : entity.getAccessContents()) { |
||||
content.setPlanId(entity.getId()); |
||||
if (ObjectUtil.isEmpty(content.getId())) { |
||||
contentService.doSave(content); |
||||
continue; |
||||
} |
||||
contentService.doUpdateById(content); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 开启检修计划流程 |
||||
* @param entity |
||||
*/ |
||||
private void startProcess(AccessPlanV4DTO entity) { |
||||
Map<String, Object> variables = JSONObject.parseObject(JSONObject.toJSONString(entity), Map.class); |
||||
R<BladeFlow> result = flowClient.startProcessInstanceContainNameByKey("overhaul_plan", FlowUtil.getBusinessKey("access_plan_v4",String.valueOf(entity.getId())), entity.getName(), variables); |
||||
// 更新任务流程Id
|
||||
if (result.isSuccess()) { |
||||
BladeFlow flow = result.getData(); |
||||
entity.setProcessInstanceId(flow.getProcessInstanceId()); |
||||
planService.updateById(entity); |
||||
} else { |
||||
throw new ServiceException("开启检修计划流程失败,code=" + result.getCode()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 检修计划流程监听 |
||||
* @param processWorkFlowResponse |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public boolean listener(ProcessWorkFlowResponse processWorkFlowResponse) { |
||||
Map<String, Object> variables = (Map<String, Object>) processWorkFlowResponse.getVariables(); |
||||
AccessPlanV4DTO entity = JSONObject.parseObject(variables.toString(), AccessPlanV4DTO.class); |
||||
entity.setTaskName(processWorkFlowResponse.getTaskName()); |
||||
entity.setNextStepOperator(processWorkFlowResponse.getNextStepOperator()); |
||||
if((Boolean) variables.get("pass")){ |
||||
entity.setTaskName("流程结束"); |
||||
entity.setNextStepOperator("流程结束,不需要人员处理"); |
||||
// 开启检修任务
|
||||
this.startTaskProcess(entity); |
||||
} |
||||
this.saveAccess(entity); |
||||
this.saveAccessMaterial(entity); |
||||
this.saveAccessContent(entity); |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* 开启检修任务 |
||||
* @param entity |
||||
*/ |
||||
private void startTaskProcess(AccessPlanV4DTO entity) { |
||||
for(OperAccessContentDTO item : entity.getAccessContents()){ |
||||
//任务参数
|
||||
AccessTaskV4DTO task = BeanUtil.copy(item, AccessTaskV4DTO.class); |
||||
task.setCreateTime(new Date()); |
||||
task.setCreateUser(entity.getCreateUser()); |
||||
task.setProcDefId(entity.getProcDefId()); |
||||
task.setHandler(item.getManager()); |
||||
task.setPlanId(entity.getId()); |
||||
task.setContentId(item.getId()); |
||||
task.setEmCode(item.getEmCode()); |
||||
// 任务详情
|
||||
if(CollectionUtil.isNotEmpty(item.getAccessContentDetails())){ |
||||
task.setAccessTaskDetails(item.getAccessContentDetails().stream().map(content -> { |
||||
OperAccessTaskDetailDTO detail = new OperAccessTaskDetailDTO(); |
||||
detail.setContentDetailId(content.getId()); |
||||
detail.setContent(content.getContent()); |
||||
detail.setName(content.getName()); |
||||
return detail; |
||||
}).collect(Collectors.toList())); |
||||
} |
||||
// 材料
|
||||
if(CollectionUtil.isNotEmpty(entity.getAccessMaterials())){ |
||||
task.setAccessMaterials(entity.getAccessMaterials().stream().map(o-> BeanUtil.copy(o,OperAccessMaterialDTO.class)).collect(Collectors.toList())); |
||||
} |
||||
accessTaskV4Service.startProcessV4(task); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,160 @@
|
||||
package com.hnac.hzims.operational.access.service.impl; |
||||
|
||||
import com.alibaba.fastjson.JSON; |
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.hnac.hzims.common.to.process.ProcessWorkFlowResponse; |
||||
import com.hnac.hzims.operational.access.dto.AccessTaskV4DTO; |
||||
import com.hnac.hzims.operational.access.dto.OperAccessTaskDetailDTO; |
||||
import com.hnac.hzims.operational.access.entity.OperAccessMaterialEntity; |
||||
import com.hnac.hzims.operational.access.entity.OperAccessTaskDetailEntity; |
||||
import com.hnac.hzims.operational.access.service.AccessTaskV4Service; |
||||
import com.hnac.hzims.operational.access.service.IOperAccessMaterialService; |
||||
import com.hnac.hzims.operational.access.service.IOperAccessTaskDetailService; |
||||
import com.hnac.hzims.operational.access.service.IOperAccessTaskService; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.apache.commons.lang3.RandomUtils; |
||||
import org.springblade.core.log.exception.ServiceException; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.core.tool.utils.CollectionUtil; |
||||
import org.springblade.core.tool.utils.DateUtil; |
||||
import org.springblade.core.tool.utils.ObjectUtil; |
||||
import org.springblade.flow.core.entity.BladeFlow; |
||||
import org.springblade.flow.core.feign.IFlowClient; |
||||
import org.springblade.flow.core.utils.FlowUtil; |
||||
import org.springblade.flow.core.utils.TaskUtil; |
||||
import org.springframework.stereotype.Service; |
||||
import org.springframework.transaction.annotation.Transactional; |
||||
import org.springframework.util.CollectionUtils; |
||||
|
||||
import java.text.DecimalFormat; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.Objects; |
||||
import java.util.Set; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@Slf4j |
||||
@RequiredArgsConstructor |
||||
public class AccessTaskV4ServiceImpl implements AccessTaskV4Service { |
||||
|
||||
private final IOperAccessTaskService taskService; |
||||
|
||||
private final IOperAccessMaterialService materialService; |
||||
|
||||
private final IOperAccessTaskDetailService detailService; |
||||
|
||||
private final IFlowClient flowClient; |
||||
|
||||
/** |
||||
* 开启检修任务流程 |
||||
* @param entity |
||||
* @return |
||||
*/ |
||||
@Override |
||||
@Transactional(rollbackFor = Exception.class) |
||||
public boolean startProcessV4(AccessTaskV4DTO entity) { |
||||
// 步骤1.保存检修任务
|
||||
this.save(entity); |
||||
|
||||
// 步骤2.保存检修材料
|
||||
this.saveMaterial(entity); |
||||
|
||||
// 步骤3.保存检修详情
|
||||
this.saveDetails(entity); |
||||
|
||||
// 步骤4.开启检修任务流程
|
||||
this.startProcess(entity); |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* 开启检修流程 |
||||
* @param entity |
||||
*/ |
||||
private void startProcess(AccessTaskV4DTO entity) { |
||||
Map<String, Object> variables = JSONObject.parseObject(JSONObject.toJSONString(entity), Map.class); |
||||
variables.put("handler",TaskUtil.getTaskUser(entity.getHandler().toString())); |
||||
R<BladeFlow> result = flowClient.startProcessInstanceContainNameByKey("overhaul_task", FlowUtil.getBusinessKey("access_task_v4", String.valueOf(entity.getId())), entity.getName(),variables); |
||||
// 更新任务流程Id
|
||||
if (result.isSuccess()) { |
||||
BladeFlow flow = result.getData(); |
||||
entity.setProcessInstanceId(flow.getProcessInstanceId()); |
||||
taskService.updateById(entity); |
||||
} else { |
||||
throw new ServiceException("开启检修任务流程失败,code=" + result.getCode()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 检修任务保存 |
||||
* @param entity |
||||
*/ |
||||
private void save(AccessTaskV4DTO entity) { |
||||
entity.setCode("TASK" + DateUtil.format(DateUtil.now(), DateUtil.PATTERN_DATETIME_MINI) + new DecimalFormat("###").format(RandomUtils.nextInt(0, 999))); |
||||
List<OperAccessMaterialEntity> materialEntityList = JSONObject.parseArray(JSON.toJSONString(entity.getAccessMaterials()), OperAccessMaterialEntity.class); |
||||
taskService.save(entity); |
||||
} |
||||
|
||||
/** |
||||
* 保存检修材料 |
||||
* @param entity |
||||
*/ |
||||
private void saveMaterial(AccessTaskV4DTO entity) { |
||||
if (CollectionUtil.isNotEmpty(entity.getAccessMaterials())) { |
||||
return; |
||||
} |
||||
materialService.saveOrUpdateBatch(entity.getAccessMaterials().stream().peek(material -> { |
||||
material.setPlanId(null); |
||||
material.setId(null); |
||||
material.setTaskId(entity.getId()); |
||||
}).collect(Collectors.toList())); |
||||
} |
||||
|
||||
/** |
||||
* 保存检修对象 |
||||
* @param entity |
||||
* |
||||
*/ |
||||
private void saveDetails(AccessTaskV4DTO entity) { |
||||
if(CollectionUtil.isEmpty(entity.getAccessTaskDetails())){ |
||||
return; |
||||
} |
||||
// 查询检修任务关联的检修对象
|
||||
List<OperAccessTaskDetailEntity> existsDetails = detailService.list(new LambdaQueryWrapper<OperAccessTaskDetailEntity>() {{ |
||||
eq(OperAccessTaskDetailEntity::getTaskId, entity.getId()); |
||||
eq(OperAccessTaskDetailEntity::getIsDeleted, 0L); |
||||
}}); |
||||
Set<Long> detailIds = entity.getAccessTaskDetails().stream().map(OperAccessTaskDetailDTO::getId).filter(Objects::nonNull).collect(Collectors.toSet()); |
||||
List<Long> ids = existsDetails.stream().map(OperAccessTaskDetailEntity::getId).filter(id -> !detailIds.contains(id)).collect(Collectors.toList()); |
||||
if (!CollectionUtils.isEmpty(ids)) { |
||||
detailService.deleteLogic(ids); |
||||
} |
||||
// 检修任务对象
|
||||
Set<Long> existsIds = existsDetails.stream().map(OperAccessTaskDetailEntity::getId).collect(Collectors.toSet()); |
||||
for (OperAccessTaskDetailDTO details : entity.getAccessTaskDetails()) { |
||||
details.setTaskId(entity.getId()); |
||||
if (ObjectUtil.isNotEmpty(entity.getId())) { |
||||
detailService.updateById(details); |
||||
continue; |
||||
} |
||||
detailService.doSave(details); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 检修任务流程监听 |
||||
* @param processWorkFlowResponse |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public boolean listener(ProcessWorkFlowResponse processWorkFlowResponse) { |
||||
|
||||
return false; |
||||
} |
||||
} |
Loading…
Reference in new issue