Commit 517f3745 authored by suhuiguang's avatar suhuiguang

1.安装告知作废功能

parent 9b0a2247
...@@ -76,4 +76,12 @@ public interface IJgInstallationNoticeService extends IService<JgInstallationNot ...@@ -76,4 +76,12 @@ public interface IJgInstallationNoticeService extends IService<JgInstallationNot
* @return * @return
*/ */
Map<String,Object> getCompanyType(); Map<String,Object> getCompanyType();
/**
* 作废申请
* @param sequenceNbr 业务唯一标识
* @param cancelReason 作废原因
* @return JgInstallationNoticeDto
*/
JgInstallationNoticeDto cancelApplication(Long sequenceNbr, String cancelReason);
} }
...@@ -163,4 +163,15 @@ public class JgInstallationNoticeController extends BaseController { ...@@ -163,4 +163,15 @@ public class JgInstallationNoticeController extends BaseController {
public void generateReport(HttpServletResponse response, @RequestParam("sequenceNbr") Long sequenceNbr) { public void generateReport(HttpServletResponse response, @RequestParam("sequenceNbr") Long sequenceNbr) {
iJgInstallationNoticeService.generateInstallationNoticeReport(sequenceNbr, response); iJgInstallationNoticeService.generateInstallationNoticeReport(sequenceNbr, response);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "PUT", value = "安装告知单个作废", notes = "安装告知单个作废")
@PutMapping(value = "/cancel/application")
public ResponseModel<JgInstallationNoticeDto> cancelApplication(@RequestBody JgInstallationNoticeDto jgInstallationNoticeDto){
JgInstallationNoticeDto result = iJgInstallationNoticeService.cancelApplication(jgInstallationNoticeDto.getSequenceNbr(), jgInstallationNoticeDto.getCancelReason());
return ResponseHelper.buildResponse(result);
}
} }
...@@ -15,4 +15,11 @@ public interface ICmWorkflowService { ...@@ -15,4 +15,11 @@ public interface ICmWorkflowService {
ProcessTaskDTO rollBack(String processInstanceId); ProcessTaskDTO rollBack(String processInstanceId);
ProcessTaskDTO assign(FlowTaskVo taskVo); ProcessTaskDTO assign(FlowTaskVo taskVo);
/**
* 终止流程
* @param processInstanceId 流程实例id
* @return ProcessInstanceDTO
*/
ProcessInstanceDTO stopProcess(String processInstanceId);
} }
package com.yeejoin.amos.boot.module.jg.biz.service; package com.yeejoin.amos.boot.module.jg.biz.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgUseInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgUseInfo;
import java.util.List; import java.util.List;
...@@ -11,7 +12,7 @@ import java.util.List; ...@@ -11,7 +12,7 @@ import java.util.List;
* @author system_generator * @author system_generator
* @date 2023-08-16 * @date 2023-08-16
*/ */
public interface IIdxBizJgUseInfoService { public interface IIdxBizJgUseInfoService extends IService<IdxBizJgUseInfo> {
boolean saveOrUpdateData(IdxBizJgUseInfo useInfo); boolean saveOrUpdateData(IdxBizJgUseInfo useInfo);
......
...@@ -7,10 +7,7 @@ import com.yeejoin.amos.boot.module.jg.biz.service.ICmWorkflowService; ...@@ -7,10 +7,7 @@ import com.yeejoin.amos.boot.module.jg.biz.service.ICmWorkflowService;
import com.yeejoin.amos.component.feign.config.InnerInvokException; import com.yeejoin.amos.component.feign.config.InnerInvokException;
import com.yeejoin.amos.component.feign.utils.FeignUtil; import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.feign.workflow.Workflow; import com.yeejoin.amos.feign.workflow.Workflow;
import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO; import com.yeejoin.amos.feign.workflow.model.*;
import com.yeejoin.amos.feign.workflow.model.FlowTaskVo;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.exception.BaseException; import org.typroject.tyboot.core.foundation.exception.BaseException;
...@@ -122,4 +119,23 @@ public class CmWorkflowServiceImpl implements ICmWorkflowService { ...@@ -122,4 +119,23 @@ public class CmWorkflowServiceImpl implements ICmWorkflowService {
} }
return processTaskDTO; return processTaskDTO;
} }
@Override
public ProcessInstanceDTO stopProcess(String processInstanceId) {
ProcessInstanceDTO processTaskDTO = new ProcessInstanceDTO();
try {
log.info("开始请求工作流终止流程接口:/stopProcess/{processInstanceId},请求参数:{}", processInstanceId);
processTaskDTO = Workflow.taskV2Client.stopProcess(processInstanceId).getResult();
} catch (InnerInvokException e) {
//拦截无审核人异常信息
String devMessage = getErrorMessage(e);
log.error(devMessage);
throw new LocalBadRequest(devMessage);
} catch (Exception e) {
log.error("调用工作流终止流程任接口失败", e);
throw new RuntimeException("调用工作流终止流程任接口失败");
}
return processTaskDTO;
}
} }
...@@ -29,6 +29,7 @@ import com.yeejoin.amos.boot.module.jg.api.vo.SortVo; ...@@ -29,6 +29,7 @@ import com.yeejoin.amos.boot.module.jg.api.vo.SortVo;
import com.yeejoin.amos.boot.module.jg.biz.config.LocalBadRequest; import com.yeejoin.amos.boot.module.jg.biz.config.LocalBadRequest;
import com.yeejoin.amos.boot.module.jg.biz.context.EquipUsedCheckStrategyContext; import com.yeejoin.amos.boot.module.jg.biz.context.EquipUsedCheckStrategyContext;
import com.yeejoin.amos.boot.module.jg.biz.context.FlowingEquipRedisContext; import com.yeejoin.amos.boot.module.jg.biz.context.FlowingEquipRedisContext;
import com.yeejoin.amos.boot.module.jg.biz.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient; import com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jg.biz.service.ICmWorkflowService; import com.yeejoin.amos.boot.module.jg.biz.service.ICmWorkflowService;
import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgConstructionInfoService; import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgConstructionInfoService;
...@@ -36,6 +37,7 @@ import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgUseInfoService; ...@@ -36,6 +37,7 @@ import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgUseInfoService;
import com.yeejoin.amos.boot.module.jg.biz.utils.CodeUtil; import com.yeejoin.amos.boot.module.jg.biz.utils.CodeUtil;
import com.yeejoin.amos.boot.module.jg.biz.utils.ImageUtils; import com.yeejoin.amos.boot.module.jg.biz.utils.ImageUtils;
import com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils; import com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils;
import com.yeejoin.amos.boot.module.ymt.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.*; import com.yeejoin.amos.boot.module.ymt.api.entity.*;
import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquCodeTypeEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.EquCodeTypeEnum;
...@@ -151,6 +153,11 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN ...@@ -151,6 +153,11 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
private CommonServiceImpl commonService; private CommonServiceImpl commonService;
@Autowired @Autowired
private RedissonClient redissonClient; private RedissonClient redissonClient;
@Autowired
private IdxBizJgConstructionInfoMapper constructionInfoMapper;
@Autowired
private ESEquipmentCategory esEquipmentCategory;
/** /**
* 根据sequenceNbr查询 * 根据sequenceNbr查询
...@@ -197,8 +204,8 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN ...@@ -197,8 +204,8 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
installationInfo.put(s, ObjectUtils.isEmpty(installationInfo.get(s)) ? new JSONArray() : parseArray(installationInfo.get(s).toString())); installationInfo.put(s, ObjectUtils.isEmpty(installationInfo.get(s)) ? new JSONArray() : parseArray(installationInfo.get(s).toString()));
} }
} }
if (Integer.parseInt(notice.getNoticeStatus()) == FlowStatusEnum.TO_BE_FINISHED.getCode()) { if (Integer.parseInt(notice.getNoticeStatus()) >= FlowStatusEnum.TO_BE_FINISHED.getCode()) {
// 完成时显示历史数据 // 完成及作废时显示历史数据
JSONObject hisData = commonService.queryHistoryData(notice.getSequenceNbr()); JSONObject hisData = commonService.queryHistoryData(notice.getSequenceNbr());
// 兼容老数据 // 兼容老数据
if (hisData == null) { if (hisData == null) {
...@@ -1153,6 +1160,14 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN ...@@ -1153,6 +1160,14 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
idxBizJgUseInfoMapper.update(idxBizJgUseInfo, lambda); idxBizJgUseInfoMapper.update(idxBizJgUseInfo, lambda);
} }
private void saveHisDataBeforeUpdate(JgInstallationNotice jgInstallationNotice) {
LambdaQueryWrapper<JgInstallationNoticeEq> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(JgInstallationNoticeEq::getEquipTransferId, jgInstallationNotice.getSequenceNbr());
JgInstallationNoticeEq jgRelationEquip = jgInstallationNoticeEqMapper.selectOne(queryWrapper);
Map<String, Object> map = idxBizJgRegisterInfoService.getDetailFieldCamelCaseByRecord(jgRelationEquip.getEquId());
commonService.saveOrUpdateHistory(BusinessTypeEnum.JG_INSTALLATION_NOTIFICATION.getName(), new JSONObject(map), jgRelationEquip.getEquId(), jgInstallationNotice.getSequenceNbr().toString());
}
private void saveHisDataBeforeUpdate(JgInstallationNotice jgInstallationNotice, String equId) { private void saveHisDataBeforeUpdate(JgInstallationNotice jgInstallationNotice, String equId) {
Map<String, Object> map = idxBizJgRegisterInfoService.getDetailFieldCamelCaseByRecord(equId); Map<String, Object> map = idxBizJgRegisterInfoService.getDetailFieldCamelCaseByRecord(equId);
commonService.saveOrUpdateHistory(BusinessTypeEnum.JG_INSTALLATION_NOTIFICATION.getName(), new JSONObject(map), equId, jgInstallationNotice.getSequenceNbr().toString()); commonService.saveOrUpdateHistory(BusinessTypeEnum.JG_INSTALLATION_NOTIFICATION.getName(), new JSONObject(map), equId, jgInstallationNotice.getSequenceNbr().toString());
...@@ -1231,4 +1246,82 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN ...@@ -1231,4 +1246,82 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
return result; return result;
} }
@Override
@Transactional(rollbackFor = Exception.class)
public JgInstallationNoticeDto cancelApplication(Long sequenceNbr, String cancelReason) {
// 1.更新为已作废
JgInstallationNotice installationNotice = this.getById(sequenceNbr);
String oldNoticeStatus = installationNotice.getNoticeStatus();
installationNotice.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_DISCARD.getCode()));
installationNotice.setCancelReason(cancelReason);
installationNotice.setCancelDate(new Date());
installationNotice.setCreateUserId(RequestContext.getExeUserId());
this.updateById(installationNotice);
// 2.更新关联的业务
this.processElseDataByStatus(Objects.requireNonNull(FlowStatusEnum.getEumByCode(Integer.parseInt(oldNoticeStatus))), installationNotice);
return null;
}
private void processElseDataByStatus(FlowStatusEnum oldNoticeStatus, JgInstallationNotice installationNotice) {
switch (oldNoticeStatus){
case TO_BE_SUBMITTED: // 待提交
// 1.写入历史表
this.saveHisDataBeforeUpdate(installationNotice);
// 2.删除暂存时生成的待办
commonService.deleteTaskModel(installationNotice.getSequenceNbr() + "");
break;
case TO_BE_FINISHED: // 已完成
// 1.删除之前完成时同步到一码通的施工信息
this.deleteConstructionInfo(installationNotice);
// 2.删除与设备的关系,设备可再次发起安装告知
this.clearUseInfoOfEquip(installationNotice);
// 3.清空redis 缓存的流程中及已完成安装告知的设备
this.delRepeatUseEquipData(installationNotice);
break;
default:
// 流程中(驳回、撤回等)
// 1.待办任务更新为已完成
this.finishedTask(installationNotice.getInstanceId());
// 2.终止流程
iCmWorkflowService.stopProcess(installationNotice.getInstanceId());
// 3.写入历史表
this.saveHisDataBeforeUpdate(installationNotice);
// 4.清空redis(缓存的流程中及已完成安装告知的设备)
this.delRepeatUseEquipData(installationNotice);
}
}
private void finishedTask(String instanceId) {
HashMap<String, Object> taskMap = new HashMap<>();
taskMap.put("taskStatus", FlowStatusEnum.TO_BE_PROCESSED.getCode());
taskMap.put("taskStatusLabel", FlowStatusEnum.TO_BE_PROCESSED.getName());
taskMap.put("flowStatus", FlowStatusEnum.TO_BE_PROCESSED.getCode());
taskMap.put("flowStatusLabel", FlowStatusEnum.TO_BE_PROCESSED.getName());
taskMap.put("relationId", instanceId);
commonService.updateTaskModel(taskMap);
}
private void deleteConstructionInfo(JgInstallationNotice installationNotice) {
constructionInfoMapper.delete(new LambdaQueryWrapper<IdxBizJgConstructionInfo>().eq(IdxBizJgConstructionInfo::getNoticeId, installationNotice.getSequenceNbr()));
}
private void clearUseInfoOfEquip(JgInstallationNotice installationNotice) {
// 2.1 数据库的的USE_UNIT_CREDIT_CODE赋空
LambdaQueryWrapper<JgInstallationNoticeEq> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(JgInstallationNoticeEq::getEquipTransferId, installationNotice.getSequenceNbr());
JgInstallationNoticeEq jgRelationEquip = jgInstallationNoticeEqMapper.selectOne(queryWrapper);
IdxBizJgUseInfo idxBizJgUseInfo = useInfoService.getOne(new LambdaQueryWrapper<IdxBizJgUseInfo>().eq(IdxBizJgUseInfo::getRecord,jgRelationEquip.getEquId()));
idxBizJgUseInfo.setUseUnitCreditCode(null);
idxBizJgUseInfo.setUseUnitName(null);
useInfoService.updateById(idxBizJgUseInfo);
// 2.2 es的USE_UNIT_CREDIT_CODE赋空
Optional<ESEquipmentCategoryDto> optional = esEquipmentCategory.findById(jgRelationEquip.getEquId());
if(optional.isPresent()){
ESEquipmentCategoryDto esEquipmentCategoryDto = optional.get();
esEquipmentCategoryDto.setUSE_UNIT_CREDIT_CODE(null);
esEquipmentCategoryDto.setUSE_UNIT_NAME(null);
esEquipmentCategory.save(esEquipmentCategoryDto);
}
}
} }
\ No newline at end of file
...@@ -65,4 +65,11 @@ public class ConstructionInfo extends AbstractEquipBaseEntity { ...@@ -65,4 +65,11 @@ public class ConstructionInfo extends AbstractEquipBaseEntity {
private String uscDate; private String uscDate;
/**
* 告知业务id-告知作废时使用
*/
@TableField(value = "\"NOTICE_ID\"")
private String noticeId;
} }
...@@ -74,4 +74,12 @@ public class IdxBizJgConstructionInfo extends TzsBaseEntity { ...@@ -74,4 +74,12 @@ public class IdxBizJgConstructionInfo extends TzsBaseEntity {
@TableField(exist = false) @TableField(exist = false)
private String supervisoryCode; private String supervisoryCode;
/**
* 告知业务id-告知作废时使用
*/
@TableField(value = "\"NOTICE_ID\"")
private String noticeId;
} }
...@@ -65,4 +65,14 @@ public enum FlowStatusEnum { ...@@ -65,4 +65,14 @@ public enum FlowStatusEnum {
return name; return name;
} }
public static FlowStatusEnum getEumByCode(int code) {
for (FlowStatusEnum statusEnum : FlowStatusEnum.values()) {
if (statusEnum.getCode() == code) {
return statusEnum;
}
}
return null;
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment