Commit e2e4bc65 authored by tianbo's avatar tianbo

Merge remote-tracking branch 'origin/develop_tzs_register' into develop_tzs_register

parents 6f4c8064 e1ed0343
...@@ -14,6 +14,7 @@ public class CylinderFillingCheckModel extends AbstractBaseModel{ ...@@ -14,6 +14,7 @@ public class CylinderFillingCheckModel extends AbstractBaseModel{
* *
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private String sequenceCode; //气瓶唯一标识码*
private String fillingCheckId; //充装后复查ID private String fillingCheckId; //充装后复查ID
private int withinScope; //充装量在规定范围内* private int withinScope; //充装量在规定范围内*
private int sealedState; //瓶阀及其与瓶口连接的密封良好* private int sealedState; //瓶阀及其与瓶口连接的密封良好*
......
...@@ -13,6 +13,7 @@ public class CylinderFillingExamineModel extends AbstractBaseModel{ ...@@ -13,6 +13,7 @@ public class CylinderFillingExamineModel extends AbstractBaseModel{
* *
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private String sequenceCode; //气瓶唯一标识码*
private String fillingExamineId; //充装信息审核ID private String fillingExamineId; //充装信息审核ID
private String fillingAuditDate; //报表生成时间 private String fillingAuditDate; //报表生成时间
private String fillingAuditUrl; //充装审核报表附件地址 private String fillingAuditUrl; //充装审核报表附件地址
......
...@@ -13,6 +13,7 @@ public class CylinderFillingRecordModel extends AbstractBaseModel{ ...@@ -13,6 +13,7 @@ public class CylinderFillingRecordModel extends AbstractBaseModel{
* *
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private String sequenceCode; //气瓶唯一标识码*
private String fillingRecordId; //充装记录Id* private String fillingRecordId; //充装记录Id*
private String fillingStartTime; //充装开始时间* private String fillingStartTime; //充装开始时间*
private String fillingEndTime; //充装结束时间* private String fillingEndTime; //充装结束时间*
...@@ -20,10 +21,10 @@ public class CylinderFillingRecordModel extends AbstractBaseModel{ ...@@ -20,10 +21,10 @@ public class CylinderFillingRecordModel extends AbstractBaseModel{
private double fillingQuantity; //充装量(Kg)* private double fillingQuantity; //充装量(Kg)*
private double temperature; //室温* private double temperature; //室温*
private int abnormal; //异常情况* private int abnormal; //异常情况*
private String inspectorName; private String inspectorName; // 检查人员姓名
private String fillingBeforeId; private String fillingBeforeId; // 充装信息审核ID
private String fillingCheckId; private String fillingCheckId; // 充装后复查ID
private String fillingExamineId; private String fillingExamineId; // 充装信息审核ID
private double dischargeVolume; // 卸液量(Kg) 小数点两位
} }
...@@ -19,7 +19,8 @@ public class CylinderFillingCheck extends AbstractBaseEntity{/** ...@@ -19,7 +19,8 @@ public class CylinderFillingCheck extends AbstractBaseEntity{/**
* *
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@TableField("sequence_code")
private String sequenceCode; //气瓶唯一标识码*
@TableField("filling_check_id") @TableField("filling_check_id")
private String fillingCheckId; //充装后复查ID private String fillingCheckId; //充装后复查ID
......
...@@ -19,6 +19,8 @@ public class CylinderFillingExamine extends AbstractBaseEntity{/** ...@@ -19,6 +19,8 @@ public class CylinderFillingExamine extends AbstractBaseEntity{/**
* *
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@TableField("sequence_code")
private String sequenceCode; //气瓶唯一标识码*
@TableField("filling_examine_id") @TableField("filling_examine_id")
private String fillingExamineId; //充装信息审核ID private String fillingExamineId; //充装信息审核ID
@TableField("filling_audit_date") @TableField("filling_audit_date")
......
...@@ -19,6 +19,8 @@ public class CylinderFillingRecord extends AbstractBaseEntity{/** ...@@ -19,6 +19,8 @@ public class CylinderFillingRecord extends AbstractBaseEntity{/**
* *
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@TableField("sequence_code")
private String sequenceCode; //气瓶唯一标识码*
@TableField("filling_record_id") @TableField("filling_record_id")
private String fillingRecordId; //充装记录Id* private String fillingRecordId; //充装记录Id*
@TableField("filling_starttime") @TableField("filling_starttime")
...@@ -41,5 +43,6 @@ public class CylinderFillingRecord extends AbstractBaseEntity{/** ...@@ -41,5 +43,6 @@ public class CylinderFillingRecord extends AbstractBaseEntity{/**
private String fillingCheckId; private String fillingCheckId;
@TableField("filling_examine_id") @TableField("filling_examine_id")
private String fillingExamineId; private String fillingExamineId;
@TableField("discharge_volume")
private double dischargeVolume; // 卸液量(Kg) 小数点两位
} }
...@@ -29,7 +29,7 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -29,7 +29,7 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
## emqx properties: ## emqx properties:
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://36.46.151.113:1883 emqx.broker=tcp://36.46.151.113:1883
emqx.client-user-name=super emqx.client-user-name=super
......
...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
## emqx properties: ## emqx properties:
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://36.46.151.113:1883 emqx.broker=tcp://36.46.151.113:1883
emqx.client-user-name=super emqx.client-user-name=super
......
...@@ -42,7 +42,7 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -42,7 +42,7 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
## emqx properties: ## emqx properties:
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://172.16.10.243:2883 emqx.broker=tcp://172.16.10.243:2883
emqx.client-user-name=super emqx.client-user-name=super
......
...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
## emqx properties: ## emqx properties:
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://36.46.151.113:1883 emqx.broker=tcp://36.46.151.113:1883
emqx.client-user-name=super emqx.client-user-name=super
......
...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
## emqx properties: ## emqx properties:
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://36.46.151.113:1883 emqx.broker=tcp://36.46.151.113:1883
emqx.client-user-name=super emqx.client-user-name=super
......
...@@ -3,7 +3,6 @@ package com.yeejoin.amos.boot.module.jg.api.entity; ...@@ -3,7 +3,6 @@ package com.yeejoin.amos.boot.module.jg.api.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity; import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
......
...@@ -44,6 +44,18 @@ public class JgResumeInfoController extends BaseController { ...@@ -44,6 +44,18 @@ public class JgResumeInfoController extends BaseController {
} }
/** /**
* 新增监管履历信息表
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/saveBatchResume")
@ApiOperation(httpMethod = "POST", value = "批量新增", notes = "批量新增")
public void saveBatchResume(@RequestBody List<JgResumeInfoDto> jgResumeInfoDtoList) {
jgResumeInfoServiceImpl.saveBatchResume(jgResumeInfoDtoList);
}
/**
* 根据sequenceNbr更新 * 根据sequenceNbr更新
* *
* @param sequenceNbr 主键 * @param sequenceNbr 主键
......
...@@ -81,6 +81,8 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC ...@@ -81,6 +81,8 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
@Autowired @Autowired
IJgInstallationNoticeService jrmInstallationNoticeService; IJgInstallationNoticeService jrmInstallationNoticeService;
@Autowired @Autowired
EmqKeeper emqKeeper;
@Autowired
private JgMaintenanceContractMapper maintenanceContractMapper; private JgMaintenanceContractMapper maintenanceContractMapper;
@Autowired @Autowired
private JgMaintenanceContractEqMapper maintenanceContractEqMapper; private JgMaintenanceContractEqMapper maintenanceContractEqMapper;
...@@ -92,8 +94,6 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC ...@@ -92,8 +94,6 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
private RedissonClient redissonClient; private RedissonClient redissonClient;
@Autowired @Autowired
private JgResumeInfoServiceImpl jgResumeInfoService; private JgResumeInfoServiceImpl jgResumeInfoService;
@Autowired
EmqKeeper emqKeeper;
/** /**
* 分页查询 * 分页查询
...@@ -130,7 +130,7 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC ...@@ -130,7 +130,7 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
} }
} }
contractList = maintenanceContractMapper.getContractList(page, sortMap, dto, reginParams.getUserModel().getUserId()); contractList = maintenanceContractMapper.getContractList(page, sortMap, dto, reginParams.getUserModel().getUserId());
List<JgMaintenanceContractDto> records = contractList.getRecords().stream().peek(x->x.setUnitType(company.getCompanyType())).collect(Collectors.toList()); List<JgMaintenanceContractDto> records = contractList.getRecords().stream().peek(x -> x.setUnitType(company.getCompanyType())).collect(Collectors.toList());
contractList.setRecords(records); contractList.setRecords(records);
BeanUtils.copyProperties(contractList, result); BeanUtils.copyProperties(contractList, result);
return result; return result;
...@@ -297,6 +297,24 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC ...@@ -297,6 +297,24 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
modelDto.setModel(taskMessageDto); modelDto.setModel(taskMessageDto);
// 再插入新代办、数据待定 // 再插入新代办、数据待定
commonService.buildTaskModel(Collections.singletonList(modelDto)); commonService.buildTaskModel(Collections.singletonList(modelDto));
// 新增人员履历消息表
LambdaQueryWrapper<JgMaintenanceContractEq> lambda = new QueryWrapper<JgMaintenanceContractEq>().lambda();
lambda.eq(JgMaintenanceContractEq::getEquipTransferId, contract.getSequenceNbr());
List<JgMaintenanceContractEq> jgMaintenanceContractEqList = jgMaintenanceContractEqService.getBaseMapper().selectList(lambda);
jgResumeInfoService.saveBatchResume(
jgMaintenanceContractEqList.stream()
.map(v -> JgResumeInfoDto.builder()
.applyNo(contract.getApplyNo())
.businessType(BusinessTypeEnum.JG_MAINTENANCE_RECORD.getName())
.businessId(String.valueOf(contract.getSequenceNbr()))
.equId(String.valueOf(v.getEquId()))
.approvalUnit(contract.getReceiveOrgName())
.approvalUnitCode(contract.getReceiveOrgCode())
.status("正常")
.routePath(taskV2Model.getRoutePath())
.build())
.collect(Collectors.toList())
);
} }
...@@ -429,15 +447,6 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC ...@@ -429,15 +447,6 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
equip.setEquId(String.valueOf(x.get("SEQUENCE_NBR"))); equip.setEquId(String.valueOf(x.get("SEQUENCE_NBR")));
equip.setEquipTransferId(contract.getSequenceNbr().toString()); equip.setEquipTransferId(contract.getSequenceNbr().toString());
equipList.add(equip); equipList.add(equip);
jgResumeInfoService.createWithModel(JgResumeInfoDto.builder()
.applyNo(contractDto.getApplyNo())
.businessType(BusinessTypeEnum.JG_MAINTENANCE_RECORD.getName())
.businessId(contract.getSequenceNbr() + "")
.equId(String.valueOf(x.get("record")))
.approvalUnit(contractDto.getReceiveOrgName())
.approvalUnitCode(contractDto.getReceiveOrgCode())
.status("正常")
.build());
}); });
// 保存关联设备信息 // 保存关联设备信息
jgMaintenanceContractEqService.saveBatch(equipList); jgMaintenanceContractEqService.saveBatch(equipList);
......
...@@ -5,9 +5,12 @@ import com.yeejoin.amos.boot.module.jg.api.dto.JgResumeInfoDto; ...@@ -5,9 +5,12 @@ import com.yeejoin.amos.boot.module.jg.api.dto.JgResumeInfoDto;
import com.yeejoin.amos.boot.module.jg.api.entity.JgResumeInfo; import com.yeejoin.amos.boot.module.jg.api.entity.JgResumeInfo;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgResumeInfoMapper; import com.yeejoin.amos.boot.module.jg.api.mapper.JgResumeInfoMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IJgResumeInfoService; import com.yeejoin.amos.boot.module.jg.api.service.IJgResumeInfoService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* 服务实现类 * 服务实现类
...@@ -30,4 +33,15 @@ public class JgResumeInfoServiceImpl extends BaseService<JgResumeInfoDto,JgResum ...@@ -30,4 +33,15 @@ public class JgResumeInfoServiceImpl extends BaseService<JgResumeInfoDto,JgResum
public List<JgResumeInfoDto> queryForJgResumeInfoList() { public List<JgResumeInfoDto> queryForJgResumeInfoList() {
return this.queryForList("" , false); return this.queryForList("" , false);
} }
public void saveBatchResume(List<JgResumeInfoDto> jgResumeInfoDtoList) {
Collection<JgResumeInfo> jgResumeInfoCollection = jgResumeInfoDtoList.stream()
.map(dto -> {
JgResumeInfo info = new JgResumeInfo();
BeanUtils.copyProperties(dto, info);
return info;
})
.collect(Collectors.toList());
this.saveBatch(jgResumeInfoCollection);
}
} }
\ No newline at end of file
...@@ -693,23 +693,13 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -693,23 +693,13 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
jgRelationEquipMapper.delete(new QueryWrapper<JgUseRegistrationEq>().lambda().eq(JgUseRegistrationEq::getEquipTransferId, useRegistration.getSequenceNbr())); jgRelationEquipMapper.delete(new QueryWrapper<JgUseRegistrationEq>().lambda().eq(JgUseRegistrationEq::getEquipTransferId, useRegistration.getSequenceNbr()));
} }
// 更新关联气瓶信息 // 更新关联气瓶信息
equipmentLists.stream() List<JgUseRegistrationEq> equipList = equipmentLists.stream()
.map(x -> { .map(x -> new JgUseRegistrationEq()
JgUseRegistrationEq equip = new JgUseRegistrationEq() .setEquId(String.valueOf(x.get("record")))
.setEquId(String.valueOf(x.get("record"))) .setEquipTransferId(String.valueOf(useRegistration.getSequenceNbr())))
.setEquipTransferId(String.valueOf(useRegistration.getSequenceNbr())); .collect(Collectors.toList());
jgResumeInfoService.createWithModel(JgResumeInfoDto.builder() // 保存关联设备信息
.applyNo(useRegistration.getApplyNo()) jgUseRegistrationEqService.saveBatch(equipList);
.businessType(BusinessTypeEnum.JG_USAGE_REGISTRATION.getName()+"(单位)")
.businessId(String.valueOf(useRegistration.getSequenceNbr()))
.equId(String.valueOf(x.get("record")))
.approvalUnit(useRegistration.getReceiveOrgName())
.approvalUnitCode(useRegistration.getReceiveOrgCode())
.status("正常")
.build());
return equip;
})
.forEach(jgUseRegistrationEqService::save);
// 启动流程 // 启动流程
if (!ObjectUtils.isEmpty(map.get("submit"))) { if (!ObjectUtils.isEmpty(map.get("submit"))) {
...@@ -1019,14 +1009,13 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -1019,14 +1009,13 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
taskMessageDto.setEquipId(String.valueOf(mapData.get("equipId"))); taskMessageDto.setEquipId(String.valueOf(mapData.get("equipId")));
params.put("model", taskMessageDto); params.put("model", taskMessageDto);
TaskV2Model taskV2Model = commonServiceImpl.updateTaskModel(params); TaskV2Model taskV2Model = commonServiceImpl.updateTaskModel(params);
jgResumeInfoService.createWithModel(JgResumeInfoDto.builder() jgResumeInfoService.createWithModel(JgResumeInfoDto.builder()
.applyNo(jgUseRegistration.getApplyNo()) .applyNo(jgUseRegistration.getApplyNo())
.businessType(BusinessTypeEnum.JG_USAGE_REGISTRATION.getName() + "(台套)") .businessType(BusinessTypeEnum.JG_USAGE_REGISTRATION.getName())
.businessId(jgUseRegistration.getSequenceNbr() + "") .businessId(jgUseRegistration.getSequenceNbr() + "")
.equId((String) mapData.get("equipId")) .equId((String) mapData.get("equipId"))
.approvalUnit(jgUseRegistration.getReceiveOrgName()) .approvalUnit(jgUseRegistration.getReceiveOrgName())
.approvalUnitCode(jgUseRegistration.getReceiveOrgCode()) .approvalUnitCode(jgUseRegistration.getReceiveCompanyCode())
.status("正常") .status("正常")
.routePath(taskV2Model.getRoutePath()) .routePath(taskV2Model.getRoutePath())
.build()); .build());
......
...@@ -230,7 +230,7 @@ public class WordTemplateUtils { ...@@ -230,7 +230,7 @@ public class WordTemplateUtils {
/** /**
* 下载填充模板的字段,特殊符号转义 * 下载填充模板的字段,特殊符号转义
*/ */
private static Map<String, Object> escapeSpecialCharacters(Map<String, ?> inputMap) { public static Map<String, Object> escapeSpecialCharacters(Map<String, ?> inputMap) {
Map<String, Object> escapedMap = new HashMap<>(); Map<String, Object> escapedMap = new HashMap<>();
for (Map.Entry<String, ?> entry : inputMap.entrySet()) { for (Map.Entry<String, ?> entry : inputMap.entrySet()) {
String key = entry.getKey(); String key = entry.getKey();
......
...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
## emqx properties: ## emqx properties:
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://172.16.10.243:2883 emqx.broker=tcp://172.16.10.243:2883
emqx.client-user-name=super emqx.client-user-name=super
......
...@@ -2,7 +2,7 @@ package com.yeejoin.amos.boot.module.jyjc.api.mapper; ...@@ -2,7 +2,7 @@ package com.yeejoin.amos.boot.module.jyjc.api.mapper;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseUnitLicenceDto; import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseUnitLicenceDto;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzsUserInfoDto; import com.yeejoin.amos.boot.module.ymt.api.dto.TzsUserInfoDto;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -27,7 +27,10 @@ public interface JyjcBaseMapper { ...@@ -27,7 +27,10 @@ public interface JyjcBaseMapper {
String selectBusinessData(String tableName, String instanceId,String key); String selectBusinessData(String tableName, String instanceId,String key);
void updateBusinessData(String tableName, String assignee, String transferToUserIds, String instanceId, String nextTaskId,String key); void updateBusinessData(String tableName, String assignee, String transferToUserIds, String instanceId, String nextTaskId, String key);
void updateBusinessDataWithCompany(String tableName, String assignee, String transferToUserIds, String instanceId, String nextTaskId, String key, String inspectionUnitCode, String companyName);
List<TzsUserInfoDto> selectParentOrgUsers(@Param("parentOrgCodeList") Set<String> parentOrgCodeList); List<TzsUserInfoDto> selectParentOrgUsers(@Param("parentOrgCodeList") Set<String> parentOrgCodeList);
...@@ -37,4 +40,6 @@ public interface JyjcBaseMapper { ...@@ -37,4 +40,6 @@ public interface JyjcBaseMapper {
* @return List<TzsUserInfoDto> * @return List<TzsUserInfoDto>
*/ */
List<TzsUserInfoDto> selectUserByCompanyCodes(@Param("companyCodes") List<String> companyCodes); List<TzsUserInfoDto> selectUserByCompanyCodes(@Param("companyCodes") List<String> companyCodes);
CompanyModel selectOneCompanyByCode(String companyCode);
} }
package com.yeejoin.amos.boot.module.jyjc.api.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author Administrator
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class InstanceRuntimeData implements Serializable {
/**
* 下一个执行节点id
*/
private String nextTaskId;
/**
* 最近流程执行人
*/
private String promoter;
/**
* 下一节点执行人
*/
private String nextExecuteUserIds;
}
package com.yeejoin.amos.boot.module.jyjc.api.model;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
*
*
* @author system_generator
* @date 2024-05-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="JgResumeInfoDto", description="")
@Builder
public class JgResumeInfoDto extends BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "申请编号")
private String applyNo;
@ApiModelProperty(value = "业务状态")
private String status;
@ApiModelProperty(value = "业务id")
private String businessId;
@ApiModelProperty(value = "创建时间")
private Date createDate;
@ApiModelProperty(value = "创建人id ")
private String createUserId;
@ApiModelProperty(value = "创建人")
private String createUserName;
@ApiModelProperty(value = "设备ID")
private String equId;
@ApiModelProperty(value = "业务类型")
private String businessType;
@ApiModelProperty(value = "审批单位")
private String approvalUnit;
@ApiModelProperty(value = "审批单位Code")
private String approvalUnitCode;
@ApiModelProperty(value = "详情路径")
private String routePath;
}
...@@ -8,6 +8,15 @@ ...@@ -8,6 +8,15 @@
next_task_id = #{nextTaskId} next_task_id = #{nextTaskId}
where ${key} = #{instanceId} where ${key} = #{instanceId}
</update> </update>
<update id="updateBusinessDataWithCompany">
update ${tableName}
set transfer_to_user_ids = #{transferToUserIds},
next_execute_user_ids = #{assignee},
next_task_id = #{nextTaskId},
inspection_unit_code = #{inspectionUnitCode},
inspection_unit_name = #{companyName}
where ${key} = #{instanceId}
</update>
<select id="selectBaseUnitLicenceList" parameterType="map" resultType="com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseUnitLicenceDto"> <select id="selectBaseUnitLicenceList" parameterType="map" resultType="com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseUnitLicenceDto">
select * from tz_base_unit_licence select * from tz_base_unit_licence
...@@ -68,6 +77,14 @@ ...@@ -68,6 +77,14 @@
</foreach> </foreach>
GROUP BY c.company_code GROUP BY c.company_code
</select> </select>
<select id="selectOneCompanyByCode" resultType="com.yeejoin.amos.feign.privilege.model.CompanyModel">
SELECT
c.*
FROM
"privilege_company" c
WHERE
c.company_code =#{companyCode}
</select>
</mapper> </mapper>
...@@ -123,13 +123,13 @@ ...@@ -123,13 +123,13 @@
<choose> <choose>
<when test="identity == 'apply'"> <when test="identity == 'apply'">
and tzjia.application_unit_code = #{currentApplicationUnitCode} OR tzjia.transfer_to_user_ids LIKE concat ( '%', #{currentUserId}, '%' ) and (tzjia.application_unit_code = #{currentApplicationUnitCode} OR tzjia.transfer_to_user_ids LIKE concat ( '%', #{currentUserId}, '%' ))
</when> </when>
<when test="identity == 'receive'"> <when test="identity == 'receive'">
and tzjia.inspection_unit_code = #{currentInspectionUnitCode} OR tzjia.transfer_to_user_ids LIKE concat ( '%', #{currentUserId}, '%' ) and (tzjia.inspection_unit_code = #{currentInspectionUnitCode} OR tzjia.transfer_to_user_ids LIKE concat ( '%', #{currentUserId}, '%' ))
</when> </when>
<when test="identity == 'all'"> <when test="identity == 'all'">
and (tzjia.application_unit_code = #{currentApplicationUnitCode} or tzjia.inspection_unit_code = #{currentInspectionUnitCode}) OR tzjia.transfer_to_user_ids LIKE concat ( '%', #{currentUserId}, '%' ) and ((tzjia.application_unit_code = #{currentApplicationUnitCode} or tzjia.inspection_unit_code = #{currentInspectionUnitCode}) OR tzjia.transfer_to_user_ids LIKE concat ( '%', #{currentUserId}, '%' ))
</when> </when>
<otherwise> <otherwise>
1=2 1=2
......
...@@ -77,8 +77,8 @@ public class RuleActionHandler { ...@@ -77,8 +77,8 @@ public class RuleActionHandler {
return baseUnitLicenceMapper.selectList(new LambdaQueryWrapper<TzBaseUnitLicence>() return baseUnitLicenceMapper.selectList(new LambdaQueryWrapper<TzBaseUnitLicence>()
.select(TzBaseUnitLicence::getUnitCode) .select(TzBaseUnitLicence::getUnitCode)
.eq(TzBaseUnitLicence::getLicenceType, LicenceTypeEnum.JY_JC.getCode()) .eq(TzBaseUnitLicence::getLicenceType, LicenceTypeEnum.JY_JC.getCode())
.in(TzBaseUnitLicence::getItemCode, Arrays.asList(itemCode.split(","))) .in(TzBaseUnitLicence::getItemCode, Arrays.asList(itemCode.split(","))));
.ge(TzBaseUnitLicence::getExpiryDate, LocalDate.now())); // .ge(TzBaseUnitLicence::getExpiryDate, LocalDate.now()));
} }
public List<TzBaseEnterpriseInfoDto> getInspectionUnitList(List<TzBaseUnitLicence> unitLicenceList, Boolean isMatchArea, String record, String openBizType) { public List<TzBaseEnterpriseInfoDto> getInspectionUnitList(List<TzBaseUnitLicence> unitLicenceList, Boolean isMatchArea, String record, String openBizType) {
......
...@@ -5,10 +5,11 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils; ...@@ -5,10 +5,11 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.yeejoin.amos.boot.biz.common.controller.BaseController; import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.jyjc.biz.job.InspectionExpireRemindJob; import com.yeejoin.amos.boot.module.jyjc.biz.job.InspectionExpireRemindJob;
import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl; import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonserviceImpl; import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto; import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.systemctl.Systemctl; import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel; import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -36,7 +37,7 @@ import java.util.stream.Collectors; ...@@ -36,7 +37,7 @@ import java.util.stream.Collectors;
public class CommonController extends BaseController { public class CommonController extends BaseController {
@Autowired @Autowired
CommonserviceImpl commonserviceImpl; CommonServiceImpl commonserviceImpl;
@Autowired @Autowired
TaskModelServiceImpl taskModelService; TaskModelServiceImpl taskModelService;
...@@ -133,29 +134,29 @@ public class CommonController extends BaseController { ...@@ -133,29 +134,29 @@ public class CommonController extends BaseController {
* /common/transfer * /common/transfer
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/bj/transfer") @PostMapping(value = "/kt/transfer")
@ApiOperation(httpMethod = "POST", value = "公共转办接口", notes = "公共转办接口") @ApiOperation(httpMethod = "POST", value = "公共转办接口-开通", notes = "公共转办接口-开通")
public ResponseModel<Object> transferBJ(@RequestBody Map<String, Object> map) { public ResponseModel<Object> transferKT(@RequestBody Map<String, Object> map) {
map.put("key", "instance_id"); map.put("key", "workflow_prostance_id");
Object result = taskModelService.transfer(map); Object result = taskModelService.transfer(map);
return ResponseHelper.buildResponse(result); return ResponseHelper.buildResponse(result);
} }
/** /**
* 公共转办接口 * 公共转办接口
* /common/transfer * /common/transfer
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/kt/transfer") @PostMapping(value = "/bj/transfer")
@ApiOperation(httpMethod = "POST", value = "公共转办接口", notes = "公共转办接口") @ApiOperation(httpMethod = "POST", value = "公共转办接口-报检", notes = "公共转办接口-报检")
public ResponseModel<Object> transferKT(@RequestBody Map<String, Object> map) { public ResponseModel<Object> transferBJ(@RequestBody Map<String, Object> map) {
map.put("key", "workflow_prostance_id"); map.put("key", "instance_id");
Object result = taskModelService.transfer(map); Object result = taskModelService.transfer2(map);
return ResponseHelper.buildResponse(result); return ResponseHelper.buildResponse(result);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{unitCode}/user-list") @GetMapping(value = "/{unitCode}/user-list")
@ApiOperation(httpMethod = "GET", value = "查询指定公司、指定人员类型的人员列表", notes = "查询指定公司、指定人员类型的人员列表") @ApiOperation(httpMethod = "GET", value = "查询指定公司、指定人员类型的人员列表", notes = "查询指定公司、指定人员类型的人员列表")
...@@ -180,4 +181,12 @@ public class CommonController extends BaseController { ...@@ -180,4 +181,12 @@ public class CommonController extends BaseController {
regularlyRemindJob.sendReminderMessage(); regularlyRemindJob.sendReminderMessage();
return ResponseHelper.buildResponse("succese"); return ResponseHelper.buildResponse("succese");
} }
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "amos/{unitCode}/users")
@ApiOperation(httpMethod = "GET", value = "查询指定公司、指定人员类型的人员列表", notes = "查询指定公司、指定人员类型的人员列表")
public ResponseModel<List<AgencyUserModel>> getAmosUseListByCompanyCode(@ApiParam(value = "公司编码") @PathVariable String unitCode) {
return ResponseHelper.buildResponse(commonserviceImpl.getAmosUseListByCompanyCode(unitCode));
}
} }
...@@ -56,7 +56,7 @@ public class JyjcInspectionApplicationController extends BaseController { ...@@ -56,7 +56,7 @@ public class JyjcInspectionApplicationController extends BaseController {
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save") @PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增") @ApiOperation(httpMethod = "POST", value = "暂存、提交", notes = "新增")
public ResponseModel<List<JyjcInspectionApplicationModel>> save(@RequestBody JSONObject model) { public ResponseModel<List<JyjcInspectionApplicationModel>> save(@RequestBody JSONObject model) {
if (model.containsKey(basic)) { if (model.containsKey(basic)) {
JSONObject finallyJson = new JSONObject(); JSONObject finallyJson = new JSONObject();
...@@ -69,7 +69,7 @@ public class JyjcInspectionApplicationController extends BaseController { ...@@ -69,7 +69,7 @@ public class JyjcInspectionApplicationController extends BaseController {
finallyJson.putAll(filePageDataObj); finallyJson.putAll(filePageDataObj);
model = finallyJson; model = finallyJson;
} }
// operationType: 1-暂存 // operationType: 1-暂存 0-提交
ReginParams selectedOrgInfo = getSelectedOrgInfo(); ReginParams selectedOrgInfo = getSelectedOrgInfo();
model.put("applicationUnitCode", selectedOrgInfo.getCompany().getCompanyCode()); model.put("applicationUnitCode", selectedOrgInfo.getCompany().getCompanyCode());
...@@ -124,67 +124,6 @@ public class JyjcInspectionApplicationController extends BaseController { ...@@ -124,67 +124,6 @@ public class JyjcInspectionApplicationController extends BaseController {
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.selectBySeq(sequenceNbr)); return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.selectBySeq(sequenceNbr));
} }
/**
* 列表分页查询
*
* @param current 当前页
* @param current 每页大小
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/pageByInstitution")
@ApiOperation(httpMethod = "GET", value = "分页查询(检验机构)", notes = "分页查询(检验机构)")
public ResponseModel<Page<JyjcInspectionApplicationModel>> queryForPageByInstitution(@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@RequestParam(required = false) String applicationNo,
@RequestParam(required = false) String inspectionClassify,
@RequestParam(required = false) String applicationUnitCode,
@RequestParam(required = false) String applicationUnitName,
@RequestParam(required = false) String inspectionUnitName,
@RequestParam(required = false) String equipClassify,
@RequestParam(required = false) String inspectionUnitCode,
@RequestParam(required = false) String applicationDate,
@RequestParam(required = false) String acceptDate,
@RequestParam(required = false) String inspectionChargePerson,
@RequestParam(required = false) String status,
@RequestParam(required = false) String roles, String bizType) {
Page<JyjcInspectionApplication> page = new Page<JyjcInspectionApplication>();
page.setCurrent(current);
page.setSize(size);
ReginParams reginParams = getSelectedOrgInfo();
inspectionUnitCode = reginParams.getCompany().getCompanyCode();
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.queryForJyjcInspectionApplicationPage(page, applicationNo, inspectionClassify, applicationUnitCode, equipClassify, inspectionUnitCode, applicationUnitName, inspectionUnitName, applicationDate, acceptDate, inspectionChargePerson, status, bizType));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/pageByCompany")
@ApiOperation(httpMethod = "GET", value = "分页查询(报检单位)", notes = "分页查询(报检单位)")
public ResponseModel<Page<JyjcInspectionApplicationModel>> queryForPageByCompany(@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@RequestParam(required = false) String applicationNo,
@RequestParam(required = false) String inspectionClassify,
@RequestParam(required = false) String applicationUnitCode,
@RequestParam(required = false) String equipClassify,
@RequestParam(required = false) String inspectionUnitCode,
@RequestParam(required = false) String applicationUnitName,
@RequestParam(required = false) String inspectionUnitName,
@RequestParam(required = false) String applicationDate,
@RequestParam(required = false) String acceptDate,
@RequestParam(required = false) String inspectionChargePerson,
@RequestParam(required = false) String roles,
@RequestParam(required = false) String status, String bizType) {
Page<JyjcInspectionApplication> page = new Page<JyjcInspectionApplication>();
page.setCurrent(current);
page.setSize(size);
ReginParams reginParams = getSelectedOrgInfo();
applicationUnitCode = reginParams.getCompany().getCompanyCode();
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.queryForJyjcInspectionApplicationPage(page, applicationNo, inspectionClassify, applicationUnitCode, equipClassify, inspectionUnitCode, applicationUnitName, inspectionUnitName, applicationDate, acceptDate, inspectionChargePerson, status, bizType));
}
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/pageList") @PostMapping(value = "/pageList")
...@@ -226,11 +165,7 @@ public class JyjcInspectionApplicationController extends BaseController { ...@@ -226,11 +165,7 @@ public class JyjcInspectionApplicationController extends BaseController {
@PostMapping(value = "/flow/{type}/receive") @PostMapping(value = "/flow/{type}/receive")
public ResponseModel executeFlow(@PathVariable(value = "type") String type, @RequestBody Map<String, Object> params) { public ResponseModel executeFlow(@PathVariable(value = "type") String type, @RequestBody Map<String, Object> params) {
params.put("type", type); params.put("type", type);
try { jyjcInspectionApplicationServiceImpl.doReceive(params);
jyjcInspectionApplicationServiceImpl.doReceive(params);
} catch (Exception e) {
return CommonResponseUtil.failure("该项流程发生变化,请返回列表刷新查看状态后重试");
}
HashMap<String, String> result = new HashMap<>(); HashMap<String, String> result = new HashMap<>();
result.put("result", "success"); result.put("result", "success");
return ResponseHelper.buildResponse(result); return ResponseHelper.buildResponse(result);
...@@ -264,12 +199,13 @@ public class JyjcInspectionApplicationController extends BaseController { ...@@ -264,12 +199,13 @@ public class JyjcInspectionApplicationController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "撤回", notes = "撤回") @ApiOperation(httpMethod = "GET", value = "撤回", notes = "撤回")
@GetMapping(value = "/flow/rollback") @GetMapping(value = "/flow/rollback")
public ResponseModel<Boolean> doRollbackFlow(@RequestParam("sequenceNbr") String sequenceNbr) { public ResponseModel<Boolean> doRollbackFlow(@RequestParam("sequenceNbr") String sequenceNbr,
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.doRollback(sequenceNbr)); @RequestParam("instanceId") String instanceId,
@RequestParam("nextTaskId") String nextTaskId) {
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.doRollback(sequenceNbr, instanceId, nextTaskId));
} }
/** /**
* 查询指定设备种类的设备列表
* *
* @return * @return
*/ */
......
...@@ -16,7 +16,6 @@ import com.yeejoin.amos.feign.privilege.model.RoleModel; ...@@ -16,7 +16,6 @@ import com.yeejoin.amos.feign.privilege.model.RoleModel;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.context.RequestContext; import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType; import org.typroject.tyboot.core.foundation.enumeration.UserType;
...@@ -37,7 +36,6 @@ import java.util.stream.Collectors; ...@@ -37,7 +36,6 @@ import java.util.stream.Collectors;
@RestController @RestController
@Api(tags = "检验业务申请单api") @Api(tags = "检验业务申请单api")
@RequestMapping(value = "/jyjc-opening-application") @RequestMapping(value = "/jyjc-opening-application")
@EnableScheduling
public class JyjcOpeningApplicationController extends BaseController { public class JyjcOpeningApplicationController extends BaseController {
@Autowired @Autowired
...@@ -50,35 +48,24 @@ public class JyjcOpeningApplicationController extends BaseController { ...@@ -50,35 +48,24 @@ public class JyjcOpeningApplicationController extends BaseController {
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save") @PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增") @ApiOperation(httpMethod = "POST", value = "新增、编辑的保存", notes = "新增、编辑的保存")
public ResponseModel<JyjcOpeningApplicationModel> save(@RequestBody JSONObject model) { public ResponseModel<JyjcOpeningApplicationModel> save(@RequestBody JSONObject model) {
JyjcOpeningApplicationModel jyjcOpeningApplicationModel = new JyjcOpeningApplicationModel(); JyjcOpeningApplicationModel jyjcOpeningApplicationModel = new JyjcOpeningApplicationModel();
// 兼容工作台暂存逻辑、编辑时报错逻辑 // 兼容工作台暂存逻辑、编辑时报错逻辑
if (model.containsKey("applyInfo")) { // 工作台暂存逻辑 if (model.containsKey("applyInfo")) {
// 工作台暂存逻辑
BeanUtil.copyProperties(model.get("applyInfo"), jyjcOpeningApplicationModel); BeanUtil.copyProperties(model.get("applyInfo"), jyjcOpeningApplicationModel);
} else { // 详情保存逻辑 } else {
// 详情保存逻辑
BeanUtil.copyProperties(model, jyjcOpeningApplicationModel); BeanUtil.copyProperties(model, jyjcOpeningApplicationModel);
} }
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.saveOrUpdateModel(jyjcOpeningApplicationModel, false)); return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.saveOrUpdate(jyjcOpeningApplicationModel));
} }
/**
* 根据sequenceNbr更新
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "更新", notes = "更新")
public ResponseModel<JyjcOpeningApplicationModel> updateBySequenceNbrJyjcOpeningApplication(@RequestBody JyjcOpeningApplicationModel model, @PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.saveOrUpdateModel(model, false));
}
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/submit") @PutMapping(value = "/submit")
@ApiOperation(httpMethod = "PUT", value = "保存并提交", notes = "保存并提交") @ApiOperation(httpMethod = "PUT", value = "保存并提交、提交", notes = "保存并提交")
public ResponseModel<List<JyjcOpeningApplicationModel>> updateBySequenceNbrAndStartFlow(@RequestBody JSONObject jsonObject, @RequestParam(value = "sequenceNbr", required = false) Long sequenceNbr) { public ResponseModel<List<JyjcOpeningApplicationModel>> updateBySequenceNbrAndStartFlow(@RequestBody JSONObject jsonObject, @RequestParam(value = "sequenceNbr", required = false) Long sequenceNbr) {
JyjcOpeningApplicationModel model = new JyjcOpeningApplicationModel(); JyjcOpeningApplicationModel model = new JyjcOpeningApplicationModel();
if (jsonObject.containsKey("applyInfo")) { if (jsonObject.containsKey("applyInfo")) {
...@@ -93,18 +80,10 @@ public class JyjcOpeningApplicationController extends BaseController { ...@@ -93,18 +80,10 @@ public class JyjcOpeningApplicationController extends BaseController {
throw new BadRequest("企业资质信息和检验人员信息为空,无法提交!"); throw new BadRequest("企业资质信息和检验人员信息为空,无法提交!");
} }
} }
JyjcOpeningApplicationModel data = jyjcOpeningApplicationServiceImpl.saveOrUpdateModel(model, true); JyjcOpeningApplicationModel data = jyjcOpeningApplicationServiceImpl.submitApplication(model);
return ResponseHelper.buildResponse(Collections.singletonList(data)); return ResponseHelper.buildResponse(Collections.singletonList(data));
} }
@Deprecated
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/startFlow/{sequenceNbr}")
@ApiOperation(httpMethod = "POST", value = "重新提交开通申请", notes = "重新提交开通申请")
public ResponseModel<JyjcOpeningApplicationModel> resubmitJyjcOpeningApplication(@RequestBody JyjcOpeningApplicationModel model, @PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.resubmit(model));
}
/** /**
* 根据sequenceNbr删除 * 根据sequenceNbr删除
...@@ -200,8 +179,10 @@ public class JyjcOpeningApplicationController extends BaseController { ...@@ -200,8 +179,10 @@ public class JyjcOpeningApplicationController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "撤回业务开通申请", notes = "撤回业务开通申请") @ApiOperation(httpMethod = "GET", value = "撤回业务开通申请", notes = "撤回业务开通申请")
@GetMapping(value = "/rollBackFlow") @GetMapping(value = "/rollBackFlow")
public ResponseModel<Object> overflow(@RequestParam("sequenceNbr") String sequenceNbr) { public ResponseModel<Object> overflow(@RequestParam("sequenceNbr") String sequenceNbr,
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.stopFlow(sequenceNbr)); @RequestParam("instanceId") String instanceId,
@RequestParam("nextTaskId") String nextTaskId) {
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.stopFlow(sequenceNbr, instanceId, nextTaskId));
} }
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
......
...@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Sequence; ...@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Sequence;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult; import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionDetectionSaveToDbEvent; import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionDetectionSaveToDbEvent;
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.BizEmqPublisher; import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.BizEmqPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonserviceImpl; import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.InspectionDetectionInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.InspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.InspectionDetectionInfoMapper; import com.yeejoin.amos.boot.module.ymt.api.mapper.InspectionDetectionInfoMapper;
...@@ -37,7 +37,7 @@ public class InspectionDetectionSaveToDbEventListener implements ApplicationList ...@@ -37,7 +37,7 @@ public class InspectionDetectionSaveToDbEventListener implements ApplicationList
private int threadNumber; private int threadNumber;
@Autowired @Autowired
CommonserviceImpl commonService; CommonServiceImpl commonService;
@Autowired @Autowired
private Sequence sequence; private Sequence sequence;
......
...@@ -3,10 +3,11 @@ package com.yeejoin.amos.boot.module.jyjc.biz.feign; ...@@ -3,10 +3,11 @@ package com.yeejoin.amos.boot.module.jyjc.biz.feign;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.feign.MultipartSupportConfig; import com.yeejoin.amos.boot.biz.common.feign.MultipartSupportConfig;
import com.yeejoin.amos.boot.module.jyjc.api.model.JgResumeInfoDto;
import com.yeejoin.amos.component.feign.model.FeignClientResult; import com.yeejoin.amos.component.feign.model.FeignClientResult;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map; import java.util.Map;
@FeignClient(contextId = "jyjc", name = "${tzsJg.feign.name:TZS-JG}", path = "jg", configuration = {MultipartSupportConfig.class}) @FeignClient(contextId = "jyjc", name = "${tzsJg.feign.name:TZS-JG}", path = "jg", configuration = {MultipartSupportConfig.class})
...@@ -17,7 +18,12 @@ public interface JgFeignClient { ...@@ -17,7 +18,12 @@ public interface JgFeignClient {
* *
* */ * */
@RequestMapping(value = "/equipment-register/page", method = RequestMethod.GET) @RequestMapping(value = "/equipment-register/page", method = RequestMethod.GET)
FeignClientResult<Page<JSONObject>> queryForPage(@RequestParam Map<String,Object> map); FeignClientResult<Page<JSONObject>> queryForPage(@RequestParam Map<String, Object> map);
/***
* 设备注册信息分页查询
* */
@RequestMapping(value = "/jg-resume-info/saveBatchResume", method = RequestMethod.POST)
FeignClientResult saveBatchResume(@RequestBody List<JgResumeInfoDto> jgResumeInfoDtoList);
} }
...@@ -7,7 +7,6 @@ import com.yeejoin.amos.boot.module.jyjc.api.model.NeedTipEquipInfo; ...@@ -7,7 +7,6 @@ import com.yeejoin.amos.boot.module.jyjc.api.model.NeedTipEquipInfo;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzsUserInfoDto; import com.yeejoin.amos.boot.module.ymt.api.dto.TzsUserInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.dto.UseInfoModel; import com.yeejoin.amos.boot.module.ymt.api.dto.UseInfoModel;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzsUserInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.UseInfoMapper; import com.yeejoin.amos.boot.module.ymt.api.mapper.UseInfoMapper;
import com.yeejoin.amos.component.robot.AmosRequestContext; import com.yeejoin.amos.component.robot.AmosRequestContext;
import com.yeejoin.amos.feign.systemctl.Systemctl; import com.yeejoin.amos.feign.systemctl.Systemctl;
...@@ -50,18 +49,14 @@ public class InspectionExpireRemindJob { ...@@ -50,18 +49,14 @@ public class InspectionExpireRemindJob {
private UseInfoMapper useInfoMapper; private UseInfoMapper useInfoMapper;
private TzsUserInfoMapper tzsUserInfoMapper;
private AmosRequestContext amosRequestContext; private AmosRequestContext amosRequestContext;
private JyjcBaseMapper jyjcBaseMapper; private JyjcBaseMapper jyjcBaseMapper;
public InspectionExpireRemindJob(UseInfoMapper useInfoMapper, public InspectionExpireRemindJob(UseInfoMapper useInfoMapper,
TzsUserInfoMapper tzsUserInfoMapper,
AmosRequestContext amosRequestContext, AmosRequestContext amosRequestContext,
JyjcBaseMapper jyjcBaseMapper) { JyjcBaseMapper jyjcBaseMapper) {
this.useInfoMapper = useInfoMapper; this.useInfoMapper = useInfoMapper;
this.tzsUserInfoMapper = tzsUserInfoMapper;
this.amosRequestContext = amosRequestContext; this.amosRequestContext = amosRequestContext;
this.jyjcBaseMapper = jyjcBaseMapper; this.jyjcBaseMapper = jyjcBaseMapper;
} }
......
package com.yeejoin.amos.boot.module.jyjc.biz.runner;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionApplicationServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcOpeningApplicationServiceImpl;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
* @author Administrator
*/
@Component
public class ApplicationRunnerImpl implements ApplicationRunner {
private JyjcInspectionApplicationServiceImpl inspectionApplicationService;
private JyjcOpeningApplicationServiceImpl openingApplicationService;
public ApplicationRunnerImpl(JyjcInspectionApplicationServiceImpl inspectionApplicationService,
JyjcOpeningApplicationServiceImpl openingApplicationService) {
this.inspectionApplicationService = inspectionApplicationService;
this.openingApplicationService = openingApplicationService;
}
@Override
public void run(ApplicationArguments args) {
inspectionApplicationService.initFlowData2Redis();
openingApplicationService.initFlowData2Redis();
}
}
...@@ -5,24 +5,28 @@ import cn.hutool.core.collection.CollectionUtil; ...@@ -5,24 +5,28 @@ import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.service.IDataDictionaryService; import com.yeejoin.amos.boot.biz.common.service.IDataDictionaryService;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey; import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils; import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.jyjc.api.enums.BizTypeEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.BizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper; import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.InstanceRuntimeData;
import com.yeejoin.amos.boot.module.jyjc.api.model.TaskModelDto; import com.yeejoin.amos.boot.module.jyjc.api.model.TaskModelDto;
import com.yeejoin.amos.boot.module.jyjc.api.model.WorkflowResultDto; import com.yeejoin.amos.boot.module.jyjc.api.model.WorkflowResultDto;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CmWorkflowServiceImpl; import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CmWorkflowServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.util.JsonUtils; import com.yeejoin.amos.boot.module.jyjc.biz.util.JsonUtils;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.systemctl.Systemctl; import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.TaskV2Model; import com.yeejoin.amos.feign.systemctl.model.TaskV2Model;
import com.yeejoin.amos.feign.workflow.model.ActTaskDTO; import com.yeejoin.amos.feign.workflow.model.ActTaskDTO;
import com.yeejoin.amos.feign.workflow.model.FlowTaskVo; import com.yeejoin.amos.feign.workflow.model.FlowTaskVo;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO; import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
...@@ -37,6 +41,7 @@ import java.lang.reflect.Field; ...@@ -37,6 +41,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -46,6 +51,9 @@ public class TaskModelServiceImpl { ...@@ -46,6 +51,9 @@ public class TaskModelServiceImpl {
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Autowired @Autowired
CommonServiceImpl commonService;
@Autowired
IDataDictionaryService iDataDictionaryService; IDataDictionaryService iDataDictionaryService;
@Value("classpath:/json/bizTypeInfo.json") @Value("classpath:/json/bizTypeInfo.json")
...@@ -57,11 +65,14 @@ public class TaskModelServiceImpl { ...@@ -57,11 +65,14 @@ public class TaskModelServiceImpl {
@Autowired @Autowired
JyjcBaseMapper jyjcBaseMapper; JyjcBaseMapper jyjcBaseMapper;
@Autowired
RedissonClient redissonClient;
public void deleteTaskModel(String id) { public void deleteTaskModel(String id) {
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(id).getResult(); List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(id).getResult();
if (result.size() >0 ){ if (result.size() > 0) {
List<Long> idList= result.stream().map(TaskV2Model::getSequenceNbr).collect(Collectors.toList()); List<Long> idList = result.stream().map(TaskV2Model::getSequenceNbr).collect(Collectors.toList());
String ids = idList.stream().map(Object::toString).collect(Collectors.joining(",")); String ids = idList.stream().map(Object::toString).collect(Collectors.joining(","));
Systemctl.taskV2Client.delete(ids); Systemctl.taskV2Client.delete(ids);
} }
...@@ -75,13 +86,13 @@ public class TaskModelServiceImpl { ...@@ -75,13 +86,13 @@ public class TaskModelServiceImpl {
List<TaskV2Model> taskV2Models = new ArrayList<>(); List<TaskV2Model> taskV2Models = new ArrayList<>();
for (TaskModelDto obj : list) { for (TaskModelDto obj : list) {
//判断是否是暂存 新增若无下一节点执行人即为暂存 //判断是否是暂存 新增若无下一节点执行人即为暂存
boolean flag = StringUtils.isEmpty(obj.getNextExecuteUser())? true:false; boolean flag = StringUtils.isEmpty(obj.getNextExecuteUser()) ? true : false;
if (flag){ if (flag) {
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(obj.getRelationId()).getResult(); List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(obj.getRelationId()).getResult();
if (CollectionUtil.isNotEmpty(result) && result.size() > 0){ if (CollectionUtil.isNotEmpty(result) && result.size() > 0) {
TaskV2Model taskV2Model = result.get(0); TaskV2Model taskV2Model = result.get(0);
taskV2Model.setTaskContent(obj.getTaskContent()); taskV2Model.setTaskContent(obj.getTaskContent());
Systemctl.taskV2Client.update(taskV2Model,taskV2Model.getSequenceNbr()); Systemctl.taskV2Client.update(taskV2Model, taskV2Model.getSequenceNbr());
break; break;
} }
} }
...@@ -98,19 +109,19 @@ public class TaskModelServiceImpl { ...@@ -98,19 +109,19 @@ public class TaskModelServiceImpl {
for (Map map : urlList) { for (Map map : urlList) {
//获取暂存的可编辑页面url //获取暂存的可编辑页面url
if (flag && map.get("type").equals(obj.getTaskType()) if (flag && map.get("type").equals(obj.getTaskType())
&& map.get("pageType").equals("draft")){ && map.get("pageType").equals("draft")) {
model.setRoutePath(map.get("url").toString()+ urlParams ); model.setRoutePath(map.get("url").toString() + urlParams);
break; break;
} }
//其他逻辑均按详情页面获取 //其他逻辑均按详情页面获取
else if (map.get("type").equals(obj.getTaskType()) else if (map.get("type").equals(obj.getTaskType())
&& map.get("pageType").equals(null == obj.getPageType()?"look":obj.getPageType())) { && map.get("pageType").equals(null == obj.getPageType() ? "look" : obj.getPageType())) {
model.setRoutePath(map.get("url").toString().replace("{roleIds}", obj.getNextExecuteUser()) + urlParams + "&nextExecuteUserIds=" + model.getExecuteUserIds()); model.setRoutePath(map.get("url").toString().replace("{roleIds}", obj.getNextExecuteUser()) + urlParams + "&nextExecuteUserIds=" + model.getExecuteUserIds());
break; break;
} }
} }
//是true则为暂存 除公共部分统一处理 //是true则为暂存 除公共部分统一处理
if (flag){ if (flag) {
model.setFlowStatus(FlowStatusEnum.TO_BE_SUBMITTED.getCode()); model.setFlowStatus(FlowStatusEnum.TO_BE_SUBMITTED.getCode());
model.setFlowStatusLabel(FlowStatusEnum.TO_BE_SUBMITTED.getName()); model.setFlowStatusLabel(FlowStatusEnum.TO_BE_SUBMITTED.getName());
model.setStartUserId(RequestContext.getExeUserId()); model.setStartUserId(RequestContext.getExeUserId());
...@@ -124,14 +135,13 @@ public class TaskModelServiceImpl { ...@@ -124,14 +135,13 @@ public class TaskModelServiceImpl {
model.setTaskName(BizTypeEnum.getNameByNum(obj.getTaskType())); model.setTaskName(BizTypeEnum.getNameByNum(obj.getTaskType()));
model.setTaskTypeLabel(BizTypeEnum.getNameByCode(obj.getTaskType())); model.setTaskTypeLabel(BizTypeEnum.getNameByCode(obj.getTaskType()));
// model.setTaskContent("【申请单号:"+obj.getTaskCode()+"】待提交"); // model.setTaskContent("【申请单号:"+obj.getTaskCode()+"】待提交");
}else { } else {
model.setTaskStatus(0); model.setTaskStatus(0);
model.setTaskTitle(obj.getStartUser() + "发起了" + obj.getTaskName()); model.setTaskTitle(obj.getStartUser() + "发起了" + obj.getTaskName());
} }
model.setFlowInstanceId(model.getRelationId()); model.setFlowInstanceId(model.getRelationId());
model.setTaskSource("workFlow"); model.setTaskSource("workFlow");
model.setExtras(JSON.toJSONString(obj.getModel())); model.setExtras(JSON.toJSONString(obj.getModel()));
// model.setTerminal(params.getOrDefault("terminal","WEB").toString());
model.setCreateDate(new Date()); model.setCreateDate(new Date());
model.setRecUserId(RequestContext.getExeUserId()); model.setRecUserId(RequestContext.getExeUserId());
model.setAgencyCode(RequestContext.getAgencyCode()); model.setAgencyCode(RequestContext.getAgencyCode());
...@@ -142,7 +152,7 @@ public class TaskModelServiceImpl { ...@@ -142,7 +152,7 @@ public class TaskModelServiceImpl {
} }
public void updateTaskContentById(Map<String, Object> params){ public void updateTaskContentById(Map<String, Object> params) {
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(params.get("relationId").toString()).getResult(); List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(params.get("relationId").toString()).getResult();
List<TaskV2Model> collect = result.stream().sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r1.getSequenceNbr())).collect(Collectors.toList()); List<TaskV2Model> collect = result.stream().sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r1.getSequenceNbr())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(collect)) { if (CollectionUtil.isNotEmpty(collect)) {
...@@ -219,74 +229,6 @@ public class TaskModelServiceImpl { ...@@ -219,74 +229,6 @@ public class TaskModelServiceImpl {
} }
/** /**
* 待办编辑接口 【如果没有代办直接返回空,业务判断】 ---- 在用,误删
* 参数
* taskStatus
* taskStatusLabel 操作名称 1驳回 2通过 3重新提交
* flowStatusLabel 任务状态枚举code
* 流程实例id instanceId
* flowCode 任务id
**/
public TaskV2Model updateTaskModelNew(Map<String, Object> params) {
String exeUserId = RequestContext.getExeUserId();
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(params.get("relationId").toString()).getResult();
// TaskV2Model model = result.stream().filter(e->e.getFlowCode().equals(params.get("flowCode").toString())).sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r2.getSequenceNbr())) // 按时间降序排序
// .findFirst()
// .orElse(null);
List<TaskV2Model> collect = result.stream().sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r1.getSequenceNbr())).collect(Collectors.toList());
if (null == collect || collect.size() == 0) {
TaskV2Model model = new TaskV2Model();
model.setFlowStatus(Integer.valueOf(params.get("flowStatus").toString()));
model.setFlowStatusLabel(params.get("flowStatusLabel").toString());
model.setTaskStatus(Integer.valueOf(params.get("taskStatus").toString()));
model.setTaskStatusLabel(params.get("taskStatusLabel").toString());
return model;
}
collect.get(0).setFlowStatus(Integer.valueOf(params.get("flowStatus").toString()));
collect.get(0).setFlowStatusLabel(params.get("flowStatusLabel").toString());
collect.get(0).setTaskStatus(Integer.valueOf(params.get("taskStatus").toString()));
collect.get(0).setTaskStatusLabel(params.get("taskStatusLabel").toString());
collect.get(0).setEndUserId(exeUserId);
collect.get(0).setEndDate(new Date());
//当流程完成时将所有待办状态统一修改为已完成
if (collect.get(0).getFlowStatusLabel().equals(FlowStatusEnum.TO_BE_FINISHED.getName())) {
String urlParams = "";
try {
urlParams = "&" + toQueryParams(params.get("model"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
List<Map> urlList = JsonUtils.getResourceList(urlInfo);
for (Map map : urlList) {
if (map.get("type").equals(collect.get(0).getTaskType()) && map.get("pageType").equals("look")) {
urlParams = map.get("url").toString().replace("{roleIds}", "") + urlParams + "&nextExecuteUserIds=";
break;
}
}
collect.get(0).setRoutePath(urlParams);
for (TaskV2Model taskV2Model : collect) {
taskV2Model.setTaskStatusLabel((FlowStatusEnum.TO_BE_FINISHED.getName()));
taskV2Model.setTaskStatus(FlowStatusEnum.TO_BE_FINISHED.getCode());
taskV2Model.setFlowStatusLabel((FlowStatusEnum.TO_BE_FINISHED.getName()));
taskV2Model.setFlowStatus(FlowStatusEnum.TO_BE_FINISHED.getCode());
}
Systemctl.taskV2Client.batchUpdate(collect);
} else {
collect.get(0).setRoutePath(collect.get(0).getRoutePath().replace("roleIds=", "roleIds=55555&fq="));
Systemctl.taskV2Client.update(collect.get(0), collect.get(0).getSequenceNbr());
}
collect.get(0).setEndUserId(null);
collect.get(0).setTaskStatus(null);
collect.get(0).setEndDate(null);
collect.get(0).setSequenceNbr(null);
collect.get(0).setCreateDate(new Date());
collect.get(0).setStartDate(new Date());
return collect.get(0);
}
/**
* 待办 撤回 * 待办 撤回
* *
* @param id 工作流实例id * @param id 工作流实例id
...@@ -318,13 +260,13 @@ public class TaskModelServiceImpl { ...@@ -318,13 +260,13 @@ public class TaskModelServiceImpl {
} }
for (Map map : urlList) { for (Map map : urlList) {
if (map.get("type").equals(obj.get("taskType")) && map.get("pageType").equals(obj.getOrDefault("pageType","edit"))) { if (map.get("type").equals(obj.get("taskType")) && map.get("pageType").equals(obj.getOrDefault("pageType", "edit"))) {
lastTaskModel.setRoutePath(map.get("url").toString().replace("{roleIds}", obj.get("nextExecuteUser").toString()) + urlParams); lastTaskModel.setRoutePath(map.get("url").toString().replace("{roleIds}", obj.get("nextExecuteUser").toString()) + urlParams);
break; break;
} }
} }
Systemctl.taskV2Client.update(lastTaskModel, lastTaskModel.getSequenceNbr()); Systemctl.taskV2Client.update(lastTaskModel, lastTaskModel.getSequenceNbr());
}else if (list.size() == 1) { } else if (list.size() == 1) {
model.setExecuteUserIds(model.getStartUserId()); model.setExecuteUserIds(model.getStartUserId());
model.setTaskStatusLabel("重新提交"); model.setTaskStatusLabel("重新提交");
model.setTaskStatus(FlowStatusEnum.TO_SUBMITTED.getCode()); model.setTaskStatus(FlowStatusEnum.TO_SUBMITTED.getCode());
...@@ -348,13 +290,13 @@ public class TaskModelServiceImpl { ...@@ -348,13 +290,13 @@ public class TaskModelServiceImpl {
private static String toQueryParams2(JSONObject jsonObject) { private static String toQueryParams2(JSONObject jsonObject) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
Set<String> keys = jsonObject.keySet(); Set<String> keys = jsonObject.keySet();
keys.forEach(key->{ keys.forEach(key -> {
Object value = jsonObject.get(key); Object value = jsonObject.get(key);
if (sb.length() > 0) { if (sb.length() > 0) {
sb.append('&'); sb.append('&');
} }
try { try {
if(value != null && !"".equals(value)){ if (value != null && !"".equals(value)) {
sb.append(URLEncoder.encode(key, "UTF-8")) sb.append(URLEncoder.encode(key, "UTF-8"))
.append('=') .append('=')
.append(URLEncoder.encode(value.toString(), "UTF-8")); .append(URLEncoder.encode(value.toString(), "UTF-8"));
...@@ -367,8 +309,6 @@ public class TaskModelServiceImpl { ...@@ -367,8 +309,6 @@ public class TaskModelServiceImpl {
} }
public <T> String toQueryParams(T obj) throws UnsupportedEncodingException { public <T> String toQueryParams(T obj) throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
...@@ -397,24 +337,6 @@ public class TaskModelServiceImpl { ...@@ -397,24 +337,6 @@ public class TaskModelServiceImpl {
} }
/**
* 根据流程状态name 获取流程状态code
*
* @param name 流程状态name
* @return 流程状态code
*/
public Integer getDictionaryCodeByName(String name) {
List<DataDictionary> jggzzz = iDataDictionaryService.getByType("JGGZZZ");
for (DataDictionary item : jggzzz) {
if (item.getName().equals(name)) {
return Integer.parseInt(item.getCode());
}
}
return null;
}
/** /**
* 根据工作流返回信息,组装业务需要的数据 * 根据工作流返回信息,组装业务需要的数据
* *
...@@ -459,7 +381,6 @@ public class TaskModelServiceImpl { ...@@ -459,7 +381,6 @@ public class TaskModelServiceImpl {
return workflowResultDtoList; return workflowResultDtoList;
} }
public Object transfer(Map<String, Object> map) { public Object transfer(Map<String, Object> map) {
if (ObjectUtils.isEmpty(map.get("nextTaskId")) || map.get("nextTaskId") == null) { if (ObjectUtils.isEmpty(map.get("nextTaskId")) || map.get("nextTaskId") == null) {
throw new BadRequest("nextTaskId不能为空"); throw new BadRequest("nextTaskId不能为空");
...@@ -469,48 +390,152 @@ public class TaskModelServiceImpl { ...@@ -469,48 +390,152 @@ public class TaskModelServiceImpl {
} }
String taskId = map.get("nextTaskId").toString(); String taskId = map.get("nextTaskId").toString();
String instanceId = map.get("instanceId").toString(); String instanceId = map.get("instanceId").toString();
String tableName = map.get("tableName").toString(); String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
String assignee = map.get("assignee").toString(); RLock lock = redissonClient.getLock(lockKey);
try {
FlowTaskVo flowTaskVo = new FlowTaskVo(); boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
flowTaskVo.setTaskId(taskId); // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
flowTaskVo.setAssignee(assignee); if (!isLocked) {
ProcessTaskDTO processTaskDTO = cmWorkflowService.assign(flowTaskVo); throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
//修改待办 }
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(instanceId).getResult(); // 流程执行时,状态及权限校验
List<TaskV2Model> collect = result.stream().sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r1.getSequenceNbr())).collect(Collectors.toList()); commonService.checkForExecuteFlow(taskId, instanceId);
if (collect == null || collect.size() == 0) { String tableName = map.get("tableName").toString();
return null; String assignee = map.get("assignee").toString();
FlowTaskVo flowTaskVo = new FlowTaskVo();
flowTaskVo.setTaskId(taskId);
flowTaskVo.setAssignee(assignee);
ProcessTaskDTO processTaskDTO = cmWorkflowService.assign(flowTaskVo);
//修改待办
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(instanceId).getResult();
List<TaskV2Model> collect = result.stream().sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r1.getSequenceNbr())).collect(Collectors.toList());
if (collect.size() == 0) {
return null;
}
TaskV2Model taskV2Model = collect.get(0);
taskV2Model.setExecuteUserIds(RequestContext.getExeUserId());
taskV2Model.setTaskStatus(FlowStatusEnum.TO_BE_TRANSFER.getCode());
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_TRANSFER.getName());
taskV2Model.setEndUserId(RequestContext.getExeUserId());
taskV2Model.setEndDate(new Date());
String routhPath = taskV2Model.getRoutePath().replace("nextExecuteUserIds", "executeUserId") + "&nextExecuteUserIds=" + assignee;
taskV2Model.setRoutePath(routhPath);
Systemctl.taskV2Client.update(taskV2Model, taskV2Model.getSequenceNbr());
//创建新待办
taskV2Model.setExecuteUserIds(assignee);
String nextTaskId = processTaskDTO.getNextTask().get(0).getId();
taskV2Model.setFlowCode(nextTaskId);
String routhPath1 = routhPath.replace("nextTaskId", "nextTask") + "&nextTaskId=" + nextTaskId;
taskV2Model.setCreateDate(new Date());
taskV2Model.setRoutePath(routhPath1);
taskV2Model.setTaskStatus(0);
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_PROCESSED.getName());
taskV2Model.setEndUserId(null);
taskV2Model.setEndDate(null);
taskV2Model.setSequenceNbr(null);
Systemctl.taskV2Client.create(taskV2Model);
String key = map.get("key").toString();
String id = jyjcBaseMapper.selectBusinessData(tableName, instanceId, key);
id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee;
//修改业务数据
jyjcBaseMapper.updateBusinessData(tableName, assignee, id, instanceId, nextTaskId, key);
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(assignee, "", nextTaskId));
return Boolean.TRUE;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return Boolean.FALSE;
}
public Object transfer2(Map<String, Object> map) {
if (ObjectUtils.isEmpty(map.get("nextTaskId")) || map.get("nextTaskId") == null) {
throw new BadRequest("nextTaskId不能为空");
} }
TaskV2Model taskV2Model = collect.get(0); if (ObjectUtils.isEmpty(map.get("instanceId")) || map.get("instanceId") == null) {
taskV2Model.setExecuteUserIds(RequestContext.getExeUserId()); throw new BadRequest("instanceId不能为空");
taskV2Model.setTaskStatus(FlowStatusEnum.TO_BE_TRANSFER.getCode()); }
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_TRANSFER.getName()); String inspectUnitCode = map.get("transferOrg").toString();
taskV2Model.setEndUserId(RequestContext.getExeUserId()); CompanyModel companyModel = jyjcBaseMapper.selectOneCompanyByCode(inspectUnitCode);
taskV2Model.setEndDate(new Date()); String taskId = map.get("nextTaskId").toString();
String routhPath = taskV2Model.getRoutePath().replace("nextExecuteUserIds", "executeUserId") + "&nextExecuteUserIds=" + assignee; String instanceId = map.get("instanceId").toString();
taskV2Model.setRoutePath(routhPath); String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
Systemctl.taskV2Client.update(taskV2Model, taskV2Model.getSequenceNbr()); RLock lock = redissonClient.getLock(lockKey);
//创建新待办 try {
taskV2Model.setExecuteUserIds(assignee); boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
String nextTaskId = processTaskDTO.getNextTask().get(0).getId(); // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
taskV2Model.setFlowCode(nextTaskId); if (!isLocked) {
String routhPath1 = routhPath.replace("nextTaskId", "nextTask") + "&nextTaskId=" + nextTaskId; throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
taskV2Model.setCreateDate(new Date()); }
taskV2Model.setRoutePath(routhPath1); // 流程执行时,状态及权限校验
taskV2Model.setTaskStatus(0); commonService.checkForExecuteFlow(taskId, instanceId);
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_PROCESSED.getName()); String tableName = map.get("tableName").toString();
taskV2Model.setEndUserId(null); String assignee = map.get("assignee").toString();
taskV2Model.setEndDate(null);
taskV2Model.setSequenceNbr(null); FlowTaskVo flowTaskVo = new FlowTaskVo();
Systemctl.taskV2Client.create(taskV2Model); flowTaskVo.setTaskId(taskId);
flowTaskVo.setAssignee(assignee);
String key = map.get("key").toString(); ProcessTaskDTO processTaskDTO = cmWorkflowService.assign(flowTaskVo);
String id = jyjcBaseMapper.selectBusinessData(tableName, instanceId,key); //修改待办
id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee; List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(instanceId).getResult();
//修改业务数据 List<TaskV2Model> collect = result.stream().sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r1.getSequenceNbr())).collect(Collectors.toList());
jyjcBaseMapper.updateBusinessData(tableName, assignee, id, instanceId,nextTaskId,key); if (collect.size() == 0) {
return Boolean.TRUE; return null;
}
TaskV2Model taskV2Model = collect.get(0);
taskV2Model.setExecuteUserIds(RequestContext.getExeUserId());
taskV2Model.setTaskStatus(FlowStatusEnum.TO_BE_TRANSFER.getCode());
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_TRANSFER.getName());
taskV2Model.setEndUserId(RequestContext.getExeUserId());
taskV2Model.setEndDate(new Date());
String routhPath = taskV2Model.getRoutePath().replace("nextExecuteUserIds", "executeUserId") + "&nextExecuteUserIds=" + assignee;
taskV2Model.setRoutePath(routhPath);
Systemctl.taskV2Client.update(taskV2Model, taskV2Model.getSequenceNbr());
//创建新待办
taskV2Model.setExecuteUserIds(assignee);
String nextTaskId = processTaskDTO.getNextTask().get(0).getId();
taskV2Model.setFlowCode(nextTaskId);
String routhPath1 = routhPath.replace("nextTaskId", "nextTask") + "&nextTaskId=" + nextTaskId;
taskV2Model.setCreateDate(new Date());
taskV2Model.setRoutePath(routhPath1);
taskV2Model.setTaskStatus(0);
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_PROCESSED.getName());
taskV2Model.setEndUserId(null);
taskV2Model.setEndDate(null);
taskV2Model.setSequenceNbr(null);
Systemctl.taskV2Client.create(taskV2Model);
String key = map.get("key").toString();
String id = jyjcBaseMapper.selectBusinessData(tableName, instanceId, key);
id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee;
//修改业务数据
jyjcBaseMapper.updateBusinessDataWithCompany(tableName, assignee, id, instanceId, nextTaskId, key, inspectUnitCode, companyModel.getCompanyName());
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(assignee, "", nextTaskId));
return Boolean.TRUE;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return Boolean.FALSE;
}
public InstanceRuntimeData buildInstanceRuntimeData(String executeUserIds, String promoter, String nextTaskId) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(executeUserIds)
.promoter(promoter)
.nextTaskId(nextTaskId)
.build();
} }
} }
...@@ -9,23 +9,32 @@ import com.yeejoin.amos.boot.biz.common.entity.BaseEntity; ...@@ -9,23 +9,32 @@ import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey; import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils; import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.jyjc.api.enums.OpenBizTypeEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.OpenBizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.InstanceRuntimeData;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto; import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper; import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzsUserInfoMapper; import com.yeejoin.amos.boot.module.ymt.api.mapper.TzsUserInfoMapper;
import com.yeejoin.amos.feign.systemctl.Systemctl; import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.context.RequestContext; import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.util.HashMap;
import java.util.List; import java.util.List;
/**
* @author Administrator
*/
@Service @Service
public class CommonserviceImpl { public class CommonServiceImpl {
@Value("${jyjc.user-post:6615}") @Value("${jyjc.user-post:6615}")
private String jyjcUserPost; private String jyjcUserPost;
...@@ -47,6 +56,12 @@ public class CommonserviceImpl { ...@@ -47,6 +56,12 @@ public class CommonserviceImpl {
@Autowired @Autowired
TzBaseEnterpriseInfoMapper enterpriseInfoMapper; TzBaseEnterpriseInfoMapper enterpriseInfoMapper;
@Autowired
RedissonClient redissonClient;
@Autowired
JyjcBaseMapper jyjcBaseMapper;
/** /**
* @return ReginParams * @return ReginParams
...@@ -109,12 +124,79 @@ public class CommonserviceImpl { ...@@ -109,12 +124,79 @@ public class CommonserviceImpl {
} }
@Async /**
public void sendMessage(HashMap<String, String> smsParams, List<String> phones) { * 执行流程时前置校验是否已经执行
for (String phone : phones) { *
smsParams.put("mobile", phone); * @param taskId 任务id
Systemctl.smsClient.sendCommonSms(smsParams); * @param instanceId 实例id
*/
public void checkForExecuteFlow(String taskId, String instanceId) {
InstanceRuntimeData instanceRuntimeData = getInstanceRuntimeData(instanceId);
if (instanceRuntimeData == null) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 当前任务id与当前任务id不一致时,不让操作,解决老页面没关闭,但是流程已经被被人执行(通过、驳回、撤回),工作流未限制错误
String currentTaskId = instanceRuntimeData.getNextTaskId();
if (!taskId.equals(currentTaskId)) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 当前流程已经被转办给其他人或者页面按钮问题导致的权限未控制
String nextExecuteUserIds = instanceRuntimeData.getNextExecuteUserIds();
if (!nextExecuteUserIds.contains(RequestContext.getExeUserId())) {
throw new BadRequest("当前登录人无执行权限!");
} }
}
private InstanceRuntimeData getInstanceRuntimeData(String instanceId) {
RBucket<InstanceRuntimeData> rBucket = redissonClient.getBucket(buildJcInstanceDataKey(instanceId));
return rBucket.get();
}
private String buildJcInstanceDataKey(String instanceId) {
return "JC_INSTANCE_DATA:" + instanceId;
}
public static String buildJcExecuteLockKey(String instanceId) {
return "JC_INSTANCE_LOCK:" + instanceId;
} }
/**
* 最新流程数据缓存
*
* @param instanceId 实例id
* @param instanceData 流程数据
*/
public void saveExecuteFlowData2Redis(String instanceId, InstanceRuntimeData instanceData) {
redissonClient.getBucket(buildJcInstanceDataKey(instanceId)).set(instanceData);
}
/**
* 撤回时校验流程是否已经执行
*
* @param taskId 前端业务上送任务id
* @param instanceId 实例id
*/
public void checkForRevocationFlow(String taskId, String instanceId) {
InstanceRuntimeData instanceRuntimeData = getInstanceRuntimeData(instanceId);
if (instanceRuntimeData == null) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 前端页面上送任务id与当前任务id不一致时,不让操作,解决老页面没关闭,但是流程已经被被人执行(通过、驳回、撤回),工作流未限制错误
String currentTaskId = instanceRuntimeData.getNextTaskId();
if (!taskId.equals(currentTaskId)) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
if (!instanceRuntimeData.getPromoter().equals(RequestContext.getExeUserId())) {
throw new BadRequest("无权限执行该任务");
}
}
public List<AgencyUserModel> getAmosUseListByCompanyCode(String unitCode) {
CompanyModel companyModel = jyjcBaseMapper.selectOneCompanyByCode(unitCode);
FeignClientResult<List<AgencyUserModel>> result = Privilege.agencyUserClient.queryByCompanyId(companyModel.getSequenceNbr(), null, null, false);
return result.getResult();
}
} }
...@@ -7,7 +7,6 @@ import com.alibaba.fastjson.JSON; ...@@ -7,7 +7,6 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
...@@ -19,6 +18,7 @@ import com.yeejoin.amos.boot.biz.common.workflow.feign.WorkflowFeignService; ...@@ -19,6 +18,7 @@ import com.yeejoin.amos.boot.biz.common.workflow.feign.WorkflowFeignService;
import com.yeejoin.amos.boot.module.common.api.dto.AttachmentDto; import com.yeejoin.amos.boot.module.common.api.dto.AttachmentDto;
import com.yeejoin.amos.boot.module.jyjc.api.entity.*; import com.yeejoin.amos.boot.module.jyjc.api.entity.*;
import com.yeejoin.amos.boot.module.jyjc.api.enums.*; import com.yeejoin.amos.boot.module.jyjc.api.enums.*;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationEquipMapper; import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationEquipMapper;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationMapper; import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.*; import com.yeejoin.amos.boot.module.jyjc.api.model.*;
...@@ -32,6 +32,7 @@ import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum; ...@@ -32,6 +32,7 @@ import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper; import com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper;
import com.yeejoin.amos.component.feign.model.FeignClientResult; import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.systemctl.model.TaskV2Model; import com.yeejoin.amos.feign.systemctl.model.TaskV2Model;
import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO; import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO;
import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO; import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO;
...@@ -40,6 +41,8 @@ import com.yeejoin.amos.feign.workflow.model.TaskResultDTO; ...@@ -40,6 +41,8 @@ import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -51,8 +54,10 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -51,8 +54,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.typroject.tyboot.core.foundation.context.RequestContext; import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil; import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -72,8 +77,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -72,8 +77,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
private JyjcInspectionApplicationEquipServiceImpl applicationEquipService; private JyjcInspectionApplicationEquipServiceImpl applicationEquipService;
@Autowired @Autowired
TzsServiceFeignClient tzsServiceFeignClient; TzsServiceFeignClient tzsServiceFeignClient;
@Autowired
private WorkflowHelper workflowHelper;
@Autowired @Autowired
EventPublisher eventPublisher; EventPublisher eventPublisher;
...@@ -97,7 +100,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -97,7 +100,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Autowired @Autowired
WorkflowFeignService workflowFeignService; WorkflowFeignService workflowFeignService;
@Autowired @Autowired
CommonserviceImpl commonservice; CommonServiceImpl commonService;
@Autowired @Autowired
CmWorkflowServiceImpl cmWorkflowService; CmWorkflowServiceImpl cmWorkflowService;
@Value("classpath:/json/bizTypeInfo.json") @Value("classpath:/json/bizTypeInfo.json")
...@@ -108,6 +111,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -108,6 +111,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Autowired @Autowired
JgFeignClient jgFeignClient; JgFeignClient jgFeignClient;
@Autowired @Autowired
private RedisUtils redisUtils; private RedisUtils redisUtils;
...@@ -123,6 +127,12 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -123,6 +127,12 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Autowired @Autowired
JyjcOpeningApplicationServiceImpl openingApplicationService; JyjcOpeningApplicationServiceImpl openingApplicationService;
@Autowired
RedissonClient redissonClient;
@Autowired
JyjcBaseMapper jyjcBaseMapper;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public JyjcInspectionApplicationModel save(@RequestBody JSONObject obj) { public JyjcInspectionApplicationModel save(@RequestBody JSONObject obj) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class); ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
...@@ -136,9 +146,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -136,9 +146,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
ArrayList<String> roleListAll = new ArrayList<>(); ArrayList<String> roleListAll = new ArrayList<>();
ArrayList<String> roleListNext = new ArrayList<>(); ArrayList<String> roleListNext = new ArrayList<>();
if (!model.getOperationType().equals("2")) { if (!"2".equals(model.getOperationType())) {
String taskName = ""; String taskName = "";
if (model.getOperationType().equals("0")) { // 工作台提交逻辑、详情页面保存并提交逻辑 if ("0".equals(model.getOperationType())) { // 工作台提交逻辑、详情页面保存并提交逻辑
List<ProcessTaskDTO> processTasks = new ArrayList<>(); List<ProcessTaskDTO> processTasks = new ArrayList<>();
ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO(); ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO();
List<ActWorkflowStartDTO> list = new ArrayList<>(); List<ActWorkflowStartDTO> list = new ArrayList<>();
...@@ -152,6 +162,8 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -152,6 +162,8 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
if (inspectionUnit.length == 2) { if (inspectionUnit.length == 2) {
model.setInspectionUnitCode(inspectionUnit[0]); model.setInspectionUnitCode(inspectionUnit[0]);
model.setInspectionUnitName(inspectionUnit[1]); model.setInspectionUnitName(inspectionUnit[1]);
} else {
this.setInspectionUnitNameAfterSave(model);
} }
dto.setNextExecuteUserCompanyCode(model.getInspectionUnitCode()); dto.setNextExecuteUserCompanyCode(model.getInspectionUnitCode());
processTasks = cmWorkflowService.startBatch(actWorkflowBatchDTO); processTasks = cmWorkflowService.startBatch(actWorkflowBatchDTO);
...@@ -172,13 +184,17 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -172,13 +184,17 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
model.setNextExecuteIds(nextExcuteIds); model.setNextExecuteIds(nextExcuteIds);
model.setNextTaskId(nextTaskId); model.setNextTaskId(nextTaskId);
model.setNextTaskName(taskName); model.setNextTaskName(taskName);
model.setPromoter(RequestContext.getExeUserId());
model.setNextExecuteUserIds(nextUserIds); model.setNextExecuteUserIds(nextUserIds);
model.setStatus(String.valueOf(FlowStatusEnum.TO_SUBMITTED.getCode())); //6611 对应数据字典 检验流程状态 待受理 model.setStatus(String.valueOf(FlowStatusEnum.TO_SUBMITTED.getCode())); //6611 对应数据字典 检验流程状态 待受理
} else if (model.getOperationType().equals("1")) { // 工作台暂存、详情保存逻辑 commonService.saveExecuteFlowData2Redis(model.getProcessInstanceId(), this.buildInstanceRuntimeData(model));
} else if ("1".equals(model.getOperationType())) { // 工作台暂存、详情保存逻辑
String[] inspectionUnit = model.getInspectionUnitCode().split("_"); String[] inspectionUnit = model.getInspectionUnitCode().split("_");
if (inspectionUnit.length == 2) { if (inspectionUnit.length == 2) {
model.setInspectionUnitCode(inspectionUnit[0]); model.setInspectionUnitCode(inspectionUnit[0]);
model.setInspectionUnitName(inspectionUnit[1]); model.setInspectionUnitName(inspectionUnit[1]);
}else {
this.setInspectionUnitNameAfterSave(model);
} }
model.setStatus(String.valueOf(FlowStatusEnum.TO_BE_SUBMITTED.getCode())); model.setStatus(String.valueOf(FlowStatusEnum.TO_BE_SUBMITTED.getCode()));
} }
...@@ -194,9 +210,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -194,9 +210,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
} }
} }
List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JY.getCode(), 1).getResult();
model.setApplicationNo(codes.get(0));
model.setApplicationDate(new Date()); model.setApplicationDate(new Date());
model.setPromoter(reginParams.getUserModel().getUserId()); model.setPromoter(reginParams.getUserModel().getUserId());
model.setApplicationUnitName(reginParams.getCompany().getCompanyName()); model.setApplicationUnitName(reginParams.getCompany().getCompanyName());
...@@ -220,6 +233,8 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -220,6 +233,8 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
model.setCreateUserId(reginParams.getUserModel().getUserId()); model.setCreateUserId(reginParams.getUserModel().getUserId());
model.setNumberOfEquip(equipInfos.size()); model.setNumberOfEquip(equipInfos.size());
if (null == model.getSequenceNbr()) { if (null == model.getSequenceNbr()) {
List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JY.getCode(), 1).getResult();
model.setApplicationNo(codes.get(0));
model = this.createWithModel(model); model = this.createWithModel(model);
if (StringUtils.isNotBlank(model.getProcessInstanceId())) { if (StringUtils.isNotBlank(model.getProcessInstanceId())) {
this.createdTaskModel(model); this.createdTaskModel(model);
...@@ -268,7 +283,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -268,7 +283,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
applicationEquipService.saveBatch(equipInfos); applicationEquipService.saveBatch(equipInfos);
// 附件保存 // 附件保存
List<String> enumNameList = DocumentEnum.getEnumNameList(); List<String> enumNameList = DocumentEnum.getEnumNameList();
List<JyjcInspectionApplicationAttachmentModel> attachmentModels = new ArrayList<>();
for (String code : enumNameList) { for (String code : enumNameList) {
if (obj.containsKey(code)) { if (obj.containsKey(code)) {
JyjcInspectionApplicationAttachment attachments = new JyjcInspectionApplicationAttachment(); JyjcInspectionApplicationAttachment attachments = new JyjcInspectionApplicationAttachment();
...@@ -290,6 +304,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -290,6 +304,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
model.setDockingUnitCode(jyjcOpeningApplications.get(0).getDockingUnitCode()); model.setDockingUnitCode(jyjcOpeningApplications.get(0).getDockingUnitCode());
} }
} }
this.setInspectionUnitNameAfterSave(model);
//更新报检装备监管码 //更新报检装备监管码
jyjcInspectionApplicationEquipService.getBaseMapper().deleteByApplicationSeq(model.getSequenceNbr()); jyjcInspectionApplicationEquipService.getBaseMapper().deleteByApplicationSeq(model.getSequenceNbr());
...@@ -362,12 +377,20 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -362,12 +377,20 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
model.setNextTaskName(taskName1); model.setNextTaskName(taskName1);
model.setNextExecuteIds(executorRoleIds); model.setNextExecuteIds(executorRoleIds);
model.setNextExecuteUserIds(nextUserIds); model.setNextExecuteUserIds(nextUserIds);
executeOneStep(model, taskName1, nextUserIds); createNextTask(model, taskName1, nextUserIds);
commonService.saveExecuteFlowData2Redis(model.getProcessInstanceId(), this.buildInstanceRuntimeData(model));
this.updateWithModel(model); this.updateWithModel(model);
} }
return this.buildRedundancyField(model); return this.buildRedundancyField(model);
} }
private void setInspectionUnitNameAfterSave(JyjcInspectionApplicationModel model) {
CompanyModel companyModel = jyjcBaseMapper.selectOneCompanyByCode(model.getInspectionUnitCode());
if(companyModel != null){
model.setInspectionUnitName(companyModel.getCompanyName());
}
}
private JyjcInspectionApplicationModel buildRedundancyField(JyjcInspectionApplicationModel model) { private JyjcInspectionApplicationModel buildRedundancyField(JyjcInspectionApplicationModel model) {
// 冗余前端显示检验检测类型名称 // 冗余前端显示检验检测类型名称
if (StringUtils.isNotEmpty(model.getInspectionType())) { if (StringUtils.isNotEmpty(model.getInspectionType())) {
...@@ -384,17 +407,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -384,17 +407,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Override @Override
public Boolean deleteBatchData(List<Long> sequenceNbr) { public Boolean deleteBatchData(List<Long> sequenceNbr) {
// List<JyjcInspectionApplication> jyjcInspectionApplications = this.getBaseMapper().selectBatchIds(sequenceNbr);
//// long count = jyjcInspectionApplications.stream().filter(e ->
//// e.getStatus().equals(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()))
//// || e.getStatus().equals(String.valueOf(FlowStatusEnum.TO_SUBMITTED.getCode()))
//// ).count();
////
//// if (count > 0) {
//// throw new BadRequest("存在 已完成、待受理状态的报检单 不可删除!");
//// }
this.deleteBatchSeq(sequenceNbr); this.deleteBatchSeq(sequenceNbr);
for (Long seq : sequenceNbr) { for (Long seq : sequenceNbr) {
jyjcInspectionApplicationEquipService.getBaseMapper().deleteByApplicationSeq(seq); jyjcInspectionApplicationEquipService.getBaseMapper().deleteByApplicationSeq(seq);
...@@ -423,7 +435,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -423,7 +435,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
String inspectionChargePerson, String inspectionChargePerson,
String status, String bizType) { String status, String bizType) {
// return this.getBaseMapper().queryForDataList(page, applicationNo, inspectionClassify, applicationUnitCode, applicationUnitName, equipClassify, inspectionUnitCode, inspectionUnitName, applicationDate, acceptDate, inspectionChargePerson, status, bizType,roleIds);
return this.getBaseMapper().queryForDataList(page, applicationNo, inspectionClassify, applicationUnitCode, applicationUnitName, equipClassify, inspectionUnitCode, inspectionUnitName, applicationDate, acceptDate, inspectionChargePerson, status, bizType); return this.getBaseMapper().queryForDataList(page, applicationNo, inspectionClassify, applicationUnitCode, applicationUnitName, equipClassify, inspectionUnitCode, inspectionUnitName, applicationDate, acceptDate, inspectionChargePerson, status, bizType);
} }
...@@ -544,73 +555,109 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -544,73 +555,109 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void doReceive(Map<String, Object> params) { public void doReceive(Map<String, Object> params) {
String instanceId = params.get("instanceId").toString();
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + ""); String nextTaskId = params.get("nextTaskId").toString();
LambdaQueryWrapper<JyjcInspectionApplication> lambda = new QueryWrapper<JyjcInspectionApplication>().lambda(); String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
lambda.eq(JyjcInspectionApplication::getSequenceNbr, sequenceNbr); RLock lock = redissonClient.getLock(lockKey);
JyjcInspectionApplication entity = this.getBaseMapper().selectOne(lambda); try {
String taskId = entity.getNextTaskId(); boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
//组装信息 // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
TaskResultDTO task = new TaskResultDTO(); if (!isLocked) {
task.setResultCode("approvalStatus"); throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
task.setTaskId(taskId); }
task.setComment(params.getOrDefault("comments", "").toString()); // 流程执行时,状态及权限校验
HashMap<String, Object> map = new HashMap<>(); commonService.checkForExecuteFlow(nextTaskId, instanceId);
map.put("approvalStatus", "0"); Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
task.setVariable(map); JyjcInspectionApplication entity = this.getBaseMapper().selectById(sequenceNbr);
//执行流程 //组装信息
task.setNextExecuteUserCompanyCode(entity.getInspectionUnitCode()); TaskResultDTO task = new TaskResultDTO();
cmWorkflowService.complete(taskId, task); task.setResultCode("approvalStatus");
entity.setStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode())); task.setTaskId(nextTaskId);
JyjcInspectionApplicationModel model = new JyjcInspectionApplicationModel(); task.setComment(params.getOrDefault("comments", "").toString());
model.setStatusName(FlowStatusEnum.TO_BE_FINISHED.getName()); HashMap<String, Object> map = new HashMap<>();
entity.setAcceptDate(new Date()); map.put("approvalStatus", "0");
entity.setInnerPersonCode(params.getOrDefault("innerPersonCode", "").toString()); task.setVariable(map);
String processDescription = (String) params.get("comments"); //执行流程
if (StringUtils.isNotBlank(processDescription)) { task.setNextExecuteUserCompanyCode(entity.getInspectionUnitCode());
entity.setProcessDescription(processDescription); cmWorkflowService.complete(nextTaskId, task);
} entity.setStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()));
this.updateById(entity); JyjcInspectionApplicationModel model = new JyjcInspectionApplicationModel();
BeanUtils.copyProperties(entity, model); model.setStatusName(FlowStatusEnum.TO_BE_FINISHED.getName());
updateTaskModel(model); entity.setAcceptDate(new Date());
// 执行接收业务 entity.setInnerPersonCode(params.getOrDefault("innerPersonCode", "").toString());
JyjcInspectionApplicationModel inspectionApplicationModel = this.queryBySeq(sequenceNbr); String processDescription = (String) params.get("comments");
if (StringUtils.isNotBlank(processDescription)) {
List<JyjcInspectionApplicationEquipModel> applicationEquipModels = applicationEquipService.listApplicationEquipByApplicationSeq(sequenceNbr); entity.setProcessDescription(processDescription);
if (inspectionApplicationModel == null || ValidationUtil.isEmpty(applicationEquipModels)) { }
log.warn("JyjcInspectionApplicationModel Not Found!"); entity.setNextExecuteUserIds("");
return; entity.setPromoter("");
entity.setNextExecuteIds("");
entity.setNextTaskId("");
this.updateById(entity);
BeanUtils.copyProperties(entity, model);
TaskV2Model taskV2Model = updateTaskModel(model);
List<JyjcInspectionApplicationEquipModel> applicationEquipModels = applicationEquipService.listApplicationEquipByApplicationSeq(sequenceNbr);
List<JyjcInspectionResult> resultModels = new ArrayList<>();
List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JG.getCode(), applicationEquipModels.size()).getResult();
List<JgResumeInfoDto> jgResumeInfoDtoList = new ArrayList<>();
for (int i = 0; i < applicationEquipModels.size(); i++) {
JyjcInspectionResult resultModel = new JyjcInspectionResult();
resultModel.setInspectionUnitCode(model.getInspectionUnitCode());
resultModel.setInspectionUnitName(model.getInspectionUnitName());
resultModel.setApplicationNo(model.getApplicationNo());
resultModel.setApplicationUnitCode(model.getApplicationUnitCode());
resultModel.setApplicationUnitName(model.getApplicationUnitName());
resultModel.setResultStatus(ResultStatusEnum.NO_RESULT.getCode());
resultModel.setApplicationDate(model.getApplicationDate());
resultModel.setInspectionType(model.getInspectionType());
resultModel.setInspectionTypeName(this.getDictNameByCode(model.getInspectionType()));
// 解析设备
resultModel.setBizType(model.getBizType());
resultModel.setResultNo(codes.get(i));
//设备唯一标识
resultModel.setEquipUnicode(applicationEquipModels.get(i).getEquipUnicode());
resultModel.setSupervisoryCode(applicationEquipModels.get(i).getSupervisoryCode());
resultModel.setEquDefine(applicationEquipModels.get(i).getEquDefine());
resultModel.setEquCategory(applicationEquipModels.get(i).getEquCategory());
resultModel.setEquList(applicationEquipModels.get(i).getEquList());
resultModel.setIsExistNc(false);
this.setResultTypeByBizType(resultModel, model.getBizType());
resultModels.add(resultModel);
// 新增设备履历信息
jgResumeInfoDtoList.add(JgResumeInfoDto.builder()
.applyNo(entity.getApplicationNo())
.businessType(resultModel.getInspectionTypeName())
.businessId(String.valueOf(entity.getSequenceNbr()))
.equId(applicationEquipModels.get(i).getEquipUnicode())
.approvalUnit(model.getInspectionUnitName())
.approvalUnitCode(model.getInspectionUnitCode())
.status("正常")
.routePath(taskV2Model.getRoutePath())
.build());
}
inspectionResultService.saveOrUpdateBatch(resultModels);
// 报检信息推送
this.pushInspectionApplication(model);
this.saveBatchResume(jgResumeInfoDtoList);
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(model.getProcessInstanceId(), this.buildInstanceRuntimeData(entity));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
} }
List<JyjcInspectionResult> resultModels = new ArrayList<>(); }
List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JG.getCode(), applicationEquipModels.size()).getResult();
for (int i = 0; i < applicationEquipModels.size(); i++) { private void saveBatchResume(List<JgResumeInfoDto> jgResumeInfoDtoList) {
JyjcInspectionResult resultModel = new JyjcInspectionResult(); try {
resultModel.setInspectionUnitCode(inspectionApplicationModel.getInspectionUnitCode()); jgFeignClient.saveBatchResume(jgResumeInfoDtoList);
resultModel.setInspectionUnitName(inspectionApplicationModel.getInspectionUnitName()); } catch (Exception e) {
resultModel.setApplicationNo(inspectionApplicationModel.getApplicationNo()); e.printStackTrace();
resultModel.setApplicationUnitCode(inspectionApplicationModel.getApplicationUnitCode());
resultModel.setApplicationUnitName(inspectionApplicationModel.getApplicationUnitName());
resultModel.setResultStatus(ResultStatusEnum.NO_RESULT.getCode());
resultModel.setApplicationDate(inspectionApplicationModel.getApplicationDate());
resultModel.setInspectionType(inspectionApplicationModel.getInspectionType());
resultModel.setInspectionTypeName(this.getDictNameByCode(inspectionApplicationModel.getInspectionType()));
// 解析设备
resultModel.setBizType(inspectionApplicationModel.getBizType());
resultModel.setResultNo(codes.get(i));
//设备唯一标识
resultModel.setEquipUnicode(applicationEquipModels.get(i).getEquipUnicode());
resultModel.setSupervisoryCode(applicationEquipModels.get(i).getSupervisoryCode());
resultModel.setEquDefine(applicationEquipModels.get(i).getEquDefine());
resultModel.setEquCategory(applicationEquipModels.get(i).getEquCategory());
resultModel.setEquList(applicationEquipModels.get(i).getEquList());
resultModel.setIsExistNc(false);
this.setResultTypeByBizType(resultModel, inspectionApplicationModel.getBizType());
resultModels.add(resultModel);
} }
inspectionResultService.saveOrUpdateBatch(resultModels);
this.pushInspectionApplication(inspectionApplicationModel);
} }
private void setResultTypeByBizType(JyjcInspectionResult resultModel, String bizType) { private void setResultTypeByBizType(JyjcInspectionResult resultModel, String bizType) {
...@@ -665,59 +712,70 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -665,59 +712,70 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean doReject(Map<String, Object> params) { public Boolean doReject(Map<String, Object> params) {
String instanceId = params.get("instanceId").toString();
String nextTaskId = params.get("nextTaskId").toString();
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForExecuteFlow(nextTaskId, instanceId);
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
JyjcInspectionApplicationModel model = this.queryBySeq(sequenceNbr);
ArrayList<String> roleListAll = new ArrayList<>();
ArrayList<String> roleList = new ArrayList<>();
String taskId = model.getNextTaskId();
//组装信息
TaskResultDTO task = new TaskResultDTO();
task.setResultCode("approvalStatus");
task.setTaskId(taskId);
task.setComment(params.getOrDefault("comments", "").toString());
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", "1");
task.setVariable(map);
//执行流程
task.setNextExecuteUserCompanyCode(model.getInspectionUnitCode());
ProcessTaskDTO processTaskDTO = cmWorkflowService.reject(taskId, task);
String nextTaskName = "";
this.buildRoleList(Collections.singletonList(processTaskDTO), roleList, roleListAll);
List<WorkflowResultDto> workflowResultDtos = taskModelService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO));
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + ""); model.setStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode()));
LambdaQueryWrapper<JyjcInspectionApplication> lambda = new QueryWrapper<JyjcInspectionApplication>().lambda(); model.setStatusName(FlowStatusEnum.REJECTED.getName());
lambda.eq(JyjcInspectionApplication::getSequenceNbr, sequenceNbr); String processDescription = (String) params.get("comments");
JyjcInspectionApplication entity = this.getBaseMapper().selectOne(lambda); if (StringUtils.isNotBlank(processDescription)) {
ArrayList<String> roleListAll = new ArrayList<>(); model.setProcessDescription(processDescription);
ArrayList<String> roleListNext = new ArrayList<>(); }
ArrayList<String> roleList = new ArrayList<>(); String nextUserIds = workflowResultDtos.get(0).getNextExecutorUserIds();
String taskId = entity.getNextTaskId(); String executorRoleIds = workflowResultDtos.get(0).getExecutorRoleIds();
//组装信息 nextTaskName = workflowResultDtos.get(0).getNextTaskName();
TaskResultDTO task = new TaskResultDTO(); nextTaskId = workflowResultDtos.get(0).getNextTaskId();
task.setResultCode("approvalStatus"); model.setNextExecuteIds(String.join(",", roleList));
task.setTaskId(taskId); if (!org.springframework.util.ObjectUtils.isEmpty(model.getWorkflowRole())) {
task.setComment(params.getOrDefault("comments", "").toString()); model.setWorkflowRole(model.getWorkflowRole() + "," + String.join(",", roleList));
HashMap<String, Object> map = new HashMap<>(); } else {
map.put("approvalStatus", "1"); model.setWorkflowRole(String.join(",", roleList));
task.setVariable(map); }
//执行流程 model.setNextTaskId(nextTaskId);
task.setNextExecuteUserCompanyCode(entity.getInspectionUnitCode()); model.setPromoter(RequestContext.getExeUserId());
ProcessTaskDTO processTaskDTO = cmWorkflowService.reject(taskId, task); model.setNextTaskName(nextTaskName);
String taskName1 = ""; model.setNextExecuteIds(executorRoleIds);
String nextTaskId = ""; model.setNextExecuteUserIds(nextUserIds);
this.buildRoleList(Collections.singletonList(processTaskDTO), roleList, roleListAll); createNextTask(model, nextTaskName, nextUserIds);
List<WorkflowResultDto> workflowResultDtos = taskModelService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)); this.updateWithModel(model);
// 更新流程中的流程数据
entity.setStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode())); commonService.saveExecuteFlowData2Redis(model.getProcessInstanceId(), this.buildInstanceRuntimeData(model));
JyjcInspectionApplicationModel model = new JyjcInspectionApplicationModel(); } catch (InterruptedException e) {
BeanUtils.copyProperties(entity, model); e.printStackTrace();
model.setStatusName(FlowStatusEnum.REJECTED.getName()); } finally {
String processDescription = (String) params.get("comments"); if (lock.isHeldByCurrentThread()) {
if (StringUtils.isNotBlank(processDescription)) { lock.unlock();
entity.setProcessDescription(processDescription); }
}
String nextUserIds = workflowResultDtos.get(0).getNextExecutorUserIds();
String executorRoleIds = workflowResultDtos.get(0).getExecutorRoleIds();
if (processTaskDTO != null && processTaskDTO.getNextTask() != null && processTaskDTO.getNextTask().size() > 0) {
taskName1 = processTaskDTO.getNextTask().get(0).getName();
nextTaskId = processTaskDTO.getNextTask().get(0).getId();
}
model.setNextExecuteIds(String.join(",", roleList));
if (!org.springframework.util.ObjectUtils.isEmpty(model.getWorkflowRole())) {
model.setWorkflowRole(model.getWorkflowRole() + "," + String.join(",", roleList));
} else {
model.setWorkflowRole(String.join(",", roleList));
} }
model.setNextTaskId(nextTaskId);
model.setPromoter(RequestContext.getExeUserId());
model.setNextTaskName(taskName1);
model.setNextExecuteIds(executorRoleIds);
model.setNextExecuteUserIds(nextUserIds);
executeOneStep(model, taskName1, nextUserIds);
BeanUtils.copyProperties(model, entity);
this.updateById(entity);
return true; return true;
} }
...@@ -725,100 +783,79 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -725,100 +783,79 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
/** /**
* 撤回流程办理单 * 撤回流程办理单
*/ */
public Boolean doRollback(String sequenceNbr) { public Boolean doRollback(String sequenceNbr, String instanceId, String nextTaskId) {
JyjcInspectionApplicationModel inspectionApplicationModel = this.queryBySeq(Long.valueOf(sequenceNbr)); String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
if (inspectionApplicationModel == null) { RLock lock = redissonClient.getLock(lockKey);
log.warn("JyjcInspectionApplicationModel Not Found!sequenceNbr => " + sequenceNbr); try {
return false; boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
} // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
String taskCode = FlowStatusEnum.TO_BE_FINISHED.getName(); if (!isLocked) {
String[] taskName = new String[]{"流程结束"}; throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
List<String> roleListNext = new ArrayList<>(); }
List<String> roleListAll = new ArrayList<>(); // 流程执行时,状态及权限校验
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(inspectionApplicationModel.getProcessInstanceId()); commonService.checkForRevocationFlow(nextTaskId, instanceId);
String nextTaskId = processTaskDTO.getNextTask().get(0).getId(); JyjcInspectionApplicationModel inspectionApplicationModel = this.queryBySeq(Long.valueOf(sequenceNbr));
this.buildRoleList(Collections.singletonList(processTaskDTO), roleListNext, roleListAll); if (inspectionApplicationModel == null) {
List<WorkflowResultDto> workflowResultDtos = taskModelService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)); log.warn("JyjcInspectionApplicationModel Not Found!sequenceNbr => " + sequenceNbr);
if (!org.springframework.util.ObjectUtils.isEmpty(inspectionApplicationModel.getWorkflowRole())) { return false;
inspectionApplicationModel.setWorkflowRole(inspectionApplicationModel.getWorkflowRole() + "," + roleListAll); }
} else { List<String> roleListNext = new ArrayList<>();
inspectionApplicationModel.setWorkflowRole(inspectionApplicationModel.getWorkflowRole()); List<String> roleListAll = new ArrayList<>();
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(inspectionApplicationModel.getProcessInstanceId());
this.buildRoleList(Collections.singletonList(processTaskDTO), roleListNext, roleListAll);
List<WorkflowResultDto> workflowResultDtos = taskModelService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO));
if (!org.springframework.util.ObjectUtils.isEmpty(inspectionApplicationModel.getWorkflowRole())) {
inspectionApplicationModel.setWorkflowRole(inspectionApplicationModel.getWorkflowRole() + "," + roleListAll);
} else {
inspectionApplicationModel.setWorkflowRole(inspectionApplicationModel.getWorkflowRole());
}
inspectionApplicationModel.setNextTaskId(processTaskDTO.getNextTask().get(0).getId());
inspectionApplicationModel.setStatus(String.valueOf(FlowStatusEnum.ROLLBACK.getCode()));
inspectionApplicationModel.setStatusName(FlowStatusEnum.ROLLBACK.getName());
inspectionApplicationModel.setPromoter("");
inspectionApplicationModel.setNextExecuteUserIds(workflowResultDtos.get(0).getNextExecutorUserIds());
inspectionApplicationModel.setNextExecuteIds(String.join(",", roleListNext));
JyjcInspectionApplication jyjcInspectionApplication = new JyjcInspectionApplication();
BeanUtils.copyProperties(inspectionApplicationModel, jyjcInspectionApplication);
this.getBaseMapper().updateById(jyjcInspectionApplication);
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(inspectionApplicationModel));
jsonObject.put("nextTaskId", inspectionApplicationModel.getNextTaskId());
jsonObject.put("nextExecuteUser", inspectionApplicationModel.getNextExecuteIds());
jsonObject.put("taskType", BizTypeEnum.getNumByCode(inspectionApplicationModel.getBizType()));
jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode());
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName());
taskModelService.rollbackTask(inspectionApplicationModel.getProcessInstanceId(), jsonObject);
// 缓存下一个任务id,再任务进行时,用来校验数据,不再进行数据库查询
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(jyjcInspectionApplication));
return true;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
} }
// 待调整 return Boolean.FALSE;
taskCode = processTaskDTO.getNextTask().get(0).getKey();
inspectionApplicationModel.setStatus(String.valueOf(FlowStatusEnum.ROLLBACK.getCode()));
inspectionApplicationModel.setStatusName(FlowStatusEnum.ROLLBACK.getName());
inspectionApplicationModel.setPromoter("");
inspectionApplicationModel.setNextTaskId(nextTaskId);
inspectionApplicationModel.setNextExecuteUserIds(workflowResultDtos.get(0).getNextExecutorUserIds());
inspectionApplicationModel.setNextExecuteIds(String.join(",", roleListNext));
JyjcInspectionApplication jyjcInspectionApplication = new JyjcInspectionApplication();
BeanUtils.copyProperties(inspectionApplicationModel, jyjcInspectionApplication);
this.getBaseMapper().updateById(jyjcInspectionApplication);
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(inspectionApplicationModel));
jsonObject.put("nextTaskId", inspectionApplicationModel.getNextTaskId());
jsonObject.put("nextExecuteUser", inspectionApplicationModel.getNextExecuteIds());
jsonObject.put("taskType", BizTypeEnum.getNumByCode(inspectionApplicationModel.getBizType()));
jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode());
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName());
taskModelService.rollbackTask(inspectionApplicationModel.getProcessInstanceId(), jsonObject);
return true;
} }
public void updateModelByInstanceId(Long sequenceNbr, String instanceId, Map<String, Object> params, Boolean rollBack) { private InstanceRuntimeData buildInstanceRuntimeData(JyjcInspectionApplication jyjcInspectionApplication) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class); return InstanceRuntimeData.builder()
LambdaQueryWrapper<JyjcInspectionApplication> lambda = new QueryWrapper<JyjcInspectionApplication>().lambda(); .nextExecuteUserIds(jyjcInspectionApplication.getNextExecuteUserIds())
lambda.eq(JyjcInspectionApplication::getSequenceNbr, sequenceNbr); .promoter(jyjcInspectionApplication.getPromoter())
JyjcInspectionApplication entity = this.getBaseMapper().selectOne(lambda); .nextTaskId(jyjcInspectionApplication.getNextTaskId())
if (entity == null) { .build();
return; }
}
String status = (String) params.get("status");
List<String> persons = JSONArray.parseArray(JSON.toJSONString(params.get("inspectionChargePerson")), String.class);
String inspectionChargePerson = persons == null ? "" : String.join(",", persons);
if (StringUtils.isNotBlank(inspectionChargePerson)) {
entity.setInspectionChargePerson(inspectionChargePerson);
}
String processDescription = (String) params.get("comments");
if (StringUtils.isNotBlank(processDescription)) {
entity.setProcessDescription(processDescription);
}
String inspectionChargePhone = (String) params.get("inspectionChargePhone");
if (StringUtils.isNotBlank(inspectionChargePhone)) {
entity.setInspectionChargePhone(inspectionChargePhone);
}
Map<String, Object> nextNodeInfo = workflowHelper.getNextWorkflowNode(instanceId);
String role = (String) nextNodeInfo.get("role");
entity.setNextExecuteIds(role);
entity.setPromoter(reginParams.getUserModel().getUserId());
if (!org.springframework.util.ObjectUtils.isEmpty(entity.getWorkflowRole())) {
entity.setWorkflowRole(entity.getWorkflowRole() + "," + role);
} else {
entity.setWorkflowRole(role);
}
entity.setStatus(status);
//此处自己撤销也赋予了办理日期 存在问题 与驳回 通过区分处理
if (rollBack) {
this.getBaseMapper().updatePromoter(entity.getSequenceNbr());
}
//逻辑变更为 通过后才对办理时间赋值
if (status.equals(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()))) {
entity.setAcceptDate(new Date());
entity.setInnerPersonCode(params.getOrDefault("innerPersonCode", "").toString());
}
this.updateById(entity);
private InstanceRuntimeData buildInstanceRuntimeData(JyjcInspectionApplicationModel jyjcInspectionApplication) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jyjcInspectionApplication.getNextExecuteUserIds())
.promoter(jyjcInspectionApplication.getPromoter())
.nextTaskId(jyjcInspectionApplication.getNextTaskId())
.build();
} }
private void buildRoleList(List<ProcessTaskDTO> processTasks, List<String> roleListNext, List<String> roleListAll) { private void buildRoleList(List<ProcessTaskDTO> processTasks, List<String> roleListNext, List<String> roleListAll) {
processTasks.forEach(p -> { processTasks.forEach(p -> {
p.getNextCandidateGroups().values().forEach(e -> { p.getNextCandidateGroups().values().forEach(e -> {
...@@ -852,7 +889,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -852,7 +889,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
dto.setTaskCode(model.getApplicationNo()); dto.setTaskCode(model.getApplicationNo());
dto.setTaskType(BizTypeEnum.getNumByCode(model.getBizType())); dto.setTaskType(BizTypeEnum.getNumByCode(model.getBizType()));
dto.setTaskTypeLabel(BizTypeEnum.getNameByCode(model.getBizType())); dto.setTaskTypeLabel(BizTypeEnum.getNameByCode(model.getBizType()));
dto.setRelationId(model.getInstanceId()); dto.setRelationId(model.getProcessInstanceId());
dto.setExecuteUserIds(model.getNextExecuteUserIds()); dto.setExecuteUserIds(model.getNextExecuteUserIds());
dto.setTaskStatusLabel("未处理"); dto.setTaskStatusLabel("未处理");
dto.setFlowStatus(Integer.valueOf(model.getStatus())); dto.setFlowStatus(Integer.valueOf(model.getStatus()));
...@@ -867,7 +904,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -867,7 +904,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
} }
private void executeOneStep(JyjcInspectionApplicationModel model, String taskName, String nextUserIds) { private void createNextTask(JyjcInspectionApplicationModel model, String taskName, String nextUserIds) {
// 先更新之前的待办 // 先更新之前的待办
TaskV2Model taskV2Model = updateTaskModel(model); TaskV2Model taskV2Model = updateTaskModel(model);
taskV2Model.setTaskDesc(""); taskV2Model.setTaskDesc("");
...@@ -914,4 +951,20 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -914,4 +951,20 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
params.put("model", model); params.put("model", model);
return taskModelService.updateTaskModel(params); return taskModelService.updateTaskModel(params);
} }
/**
* 缓存当前正在流程中的实例的流程数据
*/
public void initFlowData2Redis() {
LambdaQueryWrapper<JyjcInspectionApplication> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ne(JyjcInspectionApplication::getStatus, FlowStatusEnum.TO_BE_FINISHED.getCode());
queryWrapper.ne(JyjcInspectionApplication::getStatus, FlowStatusEnum.TO_BE_DISCARD.getCode());
queryWrapper.isNotNull(JyjcInspectionApplication::getProcessInstanceId);
queryWrapper.select(JyjcInspectionApplication::getProcessInstanceId, JyjcInspectionApplication::getNextTaskId, JyjcInspectionApplication::getPromoter, JyjcInspectionApplication::getNextExecuteUserIds);
List<JyjcInspectionApplication> jyjcInspectionApplicationsInFlowing = this.list(queryWrapper);
jyjcInspectionApplicationsInFlowing.forEach(inspectionApplication -> {
commonService.saveExecuteFlowData2Redis(inspectionApplication.getProcessInstanceId(), this.buildInstanceRuntimeData(inspectionApplication));
});
}
} }
\ No newline at end of file
...@@ -101,7 +101,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR ...@@ -101,7 +101,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper; TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper;
@Autowired @Autowired
CommonserviceImpl commonService; CommonServiceImpl commonService;
@Autowired @Autowired
TzsUserInfoMapper tzsUserInfoMapper; TzsUserInfoMapper tzsUserInfoMapper;
......
...@@ -16,14 +16,12 @@ import com.yeejoin.amos.boot.biz.common.controller.BaseController; ...@@ -16,14 +16,12 @@ import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.biz.common.dao.mapper.DataDictionaryMapper; import com.yeejoin.amos.boot.biz.common.dao.mapper.DataDictionaryMapper;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity; import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary; import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils; import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.common.api.dto.AttachmentDto; import com.yeejoin.amos.boot.module.common.api.dto.AttachmentDto;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcOpeningApplication; import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcOpeningApplication;
import com.yeejoin.amos.boot.module.jyjc.api.enums.BizTypeEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.BizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.enums.BusinessTypeEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.enums.OpenBizTypeEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.OpenBizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcOpeningApplicationMapper; import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcOpeningApplicationMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.*; import com.yeejoin.amos.boot.module.jyjc.api.model.*;
import com.yeejoin.amos.boot.module.jyjc.api.service.IJyjcOpeningApplicationService; import com.yeejoin.amos.boot.module.jyjc.api.service.IJyjcOpeningApplicationService;
...@@ -53,6 +51,8 @@ import com.yeejoin.amos.feign.workflow.model.TaskResultDTO; ...@@ -53,6 +51,8 @@ import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -63,8 +63,8 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil; ...@@ -63,8 +63,8 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest; import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -80,8 +80,6 @@ import java.util.stream.Collectors; ...@@ -80,8 +80,6 @@ import java.util.stream.Collectors;
public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningApplicationModel, JyjcOpeningApplication, JyjcOpeningApplicationMapper> implements IJyjcOpeningApplicationService { public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningApplicationModel, JyjcOpeningApplication, JyjcOpeningApplicationMapper> implements IJyjcOpeningApplicationService {
@Autowired @Autowired
CommonserviceImpl commonserviceImpl;
@Autowired
private TzsServiceFeignClient tzsServiceFeignClient; private TzsServiceFeignClient tzsServiceFeignClient;
@Autowired @Autowired
JyjcOpeningApplicationMapper jyjcOpeningApplicationMapper; JyjcOpeningApplicationMapper jyjcOpeningApplicationMapper;
...@@ -118,13 +116,13 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -118,13 +116,13 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
private TzsUserInfoMapper userInfoMapper; private TzsUserInfoMapper userInfoMapper;
@Autowired @Autowired
CommonserviceImpl commonservice; CommonServiceImpl commonService;
@Autowired @Autowired
CmWorkflowServiceImpl cmWorkflowService; CmWorkflowServiceImpl cmWorkflowService;
@Autowired @Autowired
TaskModelServiceImpl commonServiceImpl; TaskModelServiceImpl taskModelService;
@Autowired @Autowired
DataDictionaryMapper dataDictionaryMapper; DataDictionaryMapper dataDictionaryMapper;
...@@ -132,6 +130,9 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -132,6 +130,9 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
@Autowired @Autowired
RuleActionHandler ruleActionHandler; RuleActionHandler ruleActionHandler;
@Autowired
RedissonClient redissonClient;
private static Map<String, DictionarieValueModel> permissionLevelMap; private static Map<String, DictionarieValueModel> permissionLevelMap;
private static List<DictionarieValueModel> permissionItemList; private static List<DictionarieValueModel> permissionItemList;
...@@ -148,99 +149,101 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -148,99 +149,101 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
*/ */
private final static String ZZXM_JYJC_DICT_KEY = "ZZXM_JYJC_ALL"; private final static String ZZXM_JYJC_DICT_KEY = "ZZXM_JYJC_ALL";
@Transactional(rollbackFor = {Exception.class, BaseException.class}) @Transactional(rollbackFor = {Exception.class, BaseException.class})
public JyjcOpeningApplicationModel saveOrUpdateModel(JyjcOpeningApplicationModel model, Boolean enableStartFlow) { public JyjcOpeningApplicationModel saveOrUpdate(JyjcOpeningApplicationModel model) {
boolean isUpdate = false;
String instanceId = null;
JyjcOpeningApplication entity = null;
if (model.getSequenceNbr() != null) { if (model.getSequenceNbr() != null) {
entity = jyjcOpeningApplicationMapper.selectById(model.getSequenceNbr()); // 编辑逻辑
if (entity != null) { return this.updateWithModel(model);
instanceId = entity.getWorkflowProstanceId(); } else {
isUpdate = true; // 工作台暂存(新增)逻辑
} // 1.创建开通申请
} List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JY.getCode(), 1).getResult();
List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JY.getCode(), 1).getResult(); model.setApplicationSeq(codes.get(0));
model.setApplicationSeq(codes.get(0)); CompanyBo companyBo = commonService.getReginParamsOfCurrentUser().getCompany();
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
model.setPromoter(reginParams.getUserModel().getUserId());
if (!isUpdate) {
CompanyBo companyBo = commonserviceImpl.getReginParamsOfCurrentUser().getCompany();
model.setUnitCode(companyBo.getCompanyCode()); model.setUnitCode(companyBo.getCompanyCode());
model.setUnitCodeName(companyBo.getCompanyName()); model.setUnitCodeName(companyBo.getCompanyName());
model.setCreateUserId(reginParams.getUserModel().getUserId()); model.setCreateUserId(RequestContext.getExeUserId());
model.setStatus(FlowStatusEnum.TO_BE_SUBMITTED.getCode() + "");
model.setStatusName(FlowStatusEnum.TO_BE_SUBMITTED.getName());
this.createWithModel(model); this.createWithModel(model);
// 2.创建待办
createDraftTask(model);
} }
if (enableStartFlow) { model.setStatusName(FlowStatusEnum.getNameByType(Long.parseLong((model.getStatus()))));
model.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode())); return this.updateWithModel(model);
model.setApplyTime(new Date()); }
if (StringUtils.isBlank(instanceId)) {
// 未开启过工作流则进行开启 startProcess
ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO();
ActWorkflowStartDTO dto = new ActWorkflowStartDTO();
ArrayList<ActWorkflowStartDTO> list = new ArrayList<>();
dto.setProcessDefinitionKey(processDefinitionKey);
dto.setBusinessKey("1");
dto.setCompleteFirstTask(Boolean.TRUE);
// 接受机构
list.add(dto);
actWorkflowBatchDTO.setProcess(list);
List<ProcessTaskDTO> processTaskDTOS = cmWorkflowService.startBatch(actWorkflowBatchDTO);
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS);
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) {
WorkflowResultDto workflowResultDto = resultDto.get(0);
model.setWorkflowProstanceId(workflowResultDto.getInstanceId());
model.setNextExecuteIds(workflowResultDto.getNextExecutorRoleIds());
model.setNextTaskId(workflowResultDto.getNextTaskId());
model.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
// 创建代办
buildTask(model, workflowResultDto);
}
} else {
// 存在流程,执行
HashMap<String, Object> map = new HashMap<>();
map.put("sequenceNbr", model.getSequenceNbr());
map.put("op", "0");
map.put("comments", "提交");
JyjcOpeningApplication jyjcOpeningApplication = executeFlow(map);
model.setNextTaskId(jyjcOpeningApplication.getNextTaskId());
}
@Transactional(rollbackFor = {Exception.class, BaseException.class})
public JyjcOpeningApplicationModel submitApplication(JyjcOpeningApplicationModel model) {
model.setApplyTime(new Date());
String instanceId = model.getWorkflowProstanceId();
if (StringUtils.isBlank(instanceId)) {
// 未开启过工作流则进行开启 startProcess
ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO();
ActWorkflowStartDTO dto = new ActWorkflowStartDTO();
ArrayList<ActWorkflowStartDTO> list = new ArrayList<>();
dto.setProcessDefinitionKey(processDefinitionKey);
dto.setBusinessKey("1");
dto.setCompleteFirstTask(Boolean.TRUE);
// 接受机构
list.add(dto);
actWorkflowBatchDTO.setProcess(list);
List<ProcessTaskDTO> processTaskDTOS = cmWorkflowService.startBatch(actWorkflowBatchDTO);
List<WorkflowResultDto> resultDto = taskModelService.buildWorkFlowInfo(processTaskDTOS);
WorkflowResultDto workflowResultDto = resultDto.get(0);
model.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
model.setStatusName(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getName()));
model.setPromoter(RequestContext.getExeUserId());
model.setWorkflowProstanceId(workflowResultDto.getInstanceId());
model.setNextExecuteIds(workflowResultDto.getNextExecutorRoleIds());
model.setNextTaskId(workflowResultDto.getNextTaskId());
model.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
// 首次提交时删除暂存的待办
taskModelService.deleteTaskModel(model.getSequenceNbr() + "");
// 创建代办
buildTask(model, workflowResultDto);
// 缓存流程数据
commonService.saveExecuteFlowData2Redis(workflowResultDto.getInstanceId(), this.buildInstanceRuntimeData(model));
return this.updateWithModel(model);
} else { } else {
// 只有第一次改为待提交 // 首次提交时删除暂存的待办
if (entity == null) { taskModelService.deleteTaskModel(model.getSequenceNbr() + "");
model.setStatus(FlowStatusEnum.TO_BE_SUBMITTED.getCode() + ""); // 存在流程,执行
// 暂存生成代办逻辑 executeOneStep(model);
ArrayList<TaskModelDto> list = new ArrayList<>(); return this.updateWithModel(model);
TaskModelDto dto = new TaskModelDto();
TaskMessageDto taskMessageDto = new TaskMessageDto();
BeanUtil.copyProperties(model, taskMessageDto);
// 数据参数
dto.setModel(taskMessageDto);
// 摘要
dto.setTaskContent(String.format("检验检测业务开通办理,【申请单号:%s】", model.getApplicationSeq()));
// 申请单号
dto.setTaskCode(model.getApplicationSeq());
// 业务类型
dto.setTaskType(BusinessTypeEnum.JY_OPENING_APPLICATION.getCode());
// 业务主键
dto.setRelationId(String.valueOf(model.getSequenceNbr()));
dto.setNextExecuteUser("");
list.add(dto);
commonServiceImpl.buildTaskModel(list);
}
} }
model.setStatusName(FlowStatusEnum.getNameByType(Long.parseLong((model.getStatus())))); }
return this.updateWithModel(model);
private void createDraftTask(JyjcOpeningApplicationModel model) {
ArrayList<TaskModelDto> list = new ArrayList<>();
TaskModelDto dto = new TaskModelDto();
TaskMessageDto taskMessageDto = new TaskMessageDto();
BeanUtil.copyProperties(model, taskMessageDto);
// 数据参数
dto.setModel(taskMessageDto);
// 摘要
dto.setTaskContent(String.format("检验检测业务开通办理,【申请单号:%s】", model.getApplicationSeq()));
// 申请单号
dto.setTaskCode(model.getApplicationSeq());
// 业务类型
dto.setTaskType(BusinessTypeEnum.JY_OPENING_APPLICATION.getCode());
// 业务主键
dto.setRelationId(String.valueOf(model.getSequenceNbr()));
dto.setNextExecuteUser("");
list.add(dto);
taskModelService.buildTaskModel(list);
} }
@Transactional(rollbackFor = {Exception.class, BaseException.class}) @Transactional(rollbackFor = {Exception.class, BaseException.class})
public JyjcOpeningApplicationModel resubmit(JyjcOpeningApplicationModel model) { public JyjcOpeningApplicationModel resubmit(JyjcOpeningApplicationModel model) {
model.setStatus(FlowStatusEnum.TO_BE_PROCESSED.getCode() + ""); model.setStatus(FlowStatusEnum.TO_BE_PROCESSED.getCode() + "");
model = this.updateWithModel(model); model = this.updateWithModel(model);
executeFlow(MapBuilder.<String, Object>create().put("op", "0").put("instanceId", model.getWorkflowProstanceId()).put("comments", "").build()); executeFlow(MapBuilder.<String, Object>create()
.put("op", "0")
.put("instanceId", model.getWorkflowProstanceId())
.put("comments", "")
.put("nextTaskId", model.getNextTaskId())
.build());
return model; return model;
} }
...@@ -303,7 +306,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -303,7 +306,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
} }
public Page<JyjcOpeningApplicationModel> queryForJyjcOpeningApplicationPage(Page<JyjcOpeningApplication> page, JyjcOpeningApplicationRequstDto dto) { public Page<JyjcOpeningApplicationModel> queryForJyjcOpeningApplicationPage(Page<JyjcOpeningApplication> page, JyjcOpeningApplicationRequstDto dto) {
ReginParams reginParams = commonserviceImpl.getReginParamsOfCurrentUser(); ReginParams reginParams = commonService.getReginParamsOfCurrentUser();
String currentUserId = reginParams.getUserModel().getUserId(); String currentUserId = reginParams.getUserModel().getUserId();
String level = reginParams.getCompany().getLevel(); String level = reginParams.getCompany().getLevel();
if (BaseController.COMPANY_TYPE_COMPANY.equals(level)) { if (BaseController.COMPANY_TYPE_COMPANY.equals(level)) {
...@@ -344,7 +347,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -344,7 +347,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
* @author yangyang * @author yangyang
*/ */
public JyjcOpeningApplicationModel queryDetail(Long sequenceNbr) { public JyjcOpeningApplicationModel queryDetail(Long sequenceNbr) {
ReginParams reginParams = commonserviceImpl.getReginParamsOfCurrentUser(); ReginParams reginParams = commonService.getReginParamsOfCurrentUser();
if (ValidationUtil.isEmpty(reginParams.getCompany())) { if (ValidationUtil.isEmpty(reginParams.getCompany())) {
throw new RuntimeException("未指定人员归属单位信息"); throw new RuntimeException("未指定人员归属单位信息");
} }
...@@ -407,9 +410,9 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -407,9 +410,9 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
private void setBaseUnitLicences(String unitCode, JyjcOpeningApplicationModel jyjcOpeningApplicationModel, boolean isNeedFilter) { private void setBaseUnitLicences(String unitCode, JyjcOpeningApplicationModel jyjcOpeningApplicationModel, boolean isNeedFilter) {
List<BaseUnitLicence> baseUnitLicences = baseUnitLicenceMapper.selectList(new LambdaQueryWrapper<BaseUnitLicence>().eq(BaseUnitLicence::getUnitCode, unitCode).in(BaseUnitLicence::getCertTypeCode, Arrays.asList(jyCertTypeCode, jcCertTypeCode))); List<BaseUnitLicence> baseUnitLicences = baseUnitLicenceMapper.selectList(new LambdaQueryWrapper<BaseUnitLicence>().eq(BaseUnitLicence::getUnitCode, unitCode).in(BaseUnitLicence::getCertTypeCode, Arrays.asList(jyCertTypeCode, jcCertTypeCode)));
List<TzBaseUnitLicenceDto> baseUnitLicencesDtos = baseUnitLicences.stream().map(l->{ List<TzBaseUnitLicenceDto> baseUnitLicencesDtos = baseUnitLicences.stream().map(l -> {
TzBaseUnitLicenceDto licenceDto = new TzBaseUnitLicenceDto(); TzBaseUnitLicenceDto licenceDto = new TzBaseUnitLicenceDto();
BeanUtil.copyProperties(l,licenceDto); BeanUtil.copyProperties(l, licenceDto);
licenceDto.setCertTypeCode(this.castCode2Str(l.getCertTypeCode())); licenceDto.setCertTypeCode(this.castCode2Str(l.getCertTypeCode()));
return licenceDto; return licenceDto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
...@@ -507,104 +510,212 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -507,104 +510,212 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
/** /**
* 接收/驳回通知检验单 * 接收/驳回通知检验单
*/ */
@Transactional(rollbackFor = Exception.class)
public JyjcOpeningApplication executeFlow(Map<String, Object> params) { public JyjcOpeningApplication executeFlow(Map<String, Object> params) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class); String instanceId = params.get("instanceId").toString();
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + ""); String nextTaskId = params.get("nextTaskId").toString();
String op = params.get("op").toString(); String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
JyjcOpeningApplication data = jyjcOpeningApplicationMapper.selectById(sequenceNbr); RLock lock = redissonClient.getLock(lockKey);
//组装信息 try {
TaskResultDTO dto = new TaskResultDTO(); boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
dto.setResultCode("approvalStatus"); // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
dto.setTaskId(data.getNextTaskId()); if (!isLocked) {
dto.setComment(params.get("comments").toString()); throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
HashMap<String, Object> map = new HashMap<>(); }
map.put("approvalStatus", op); // 流程执行时,状态及权限校验
if (String.valueOf(FlowStatusEnum.ROLLBACK.getCode()).equals(data.getStatus()) || String.valueOf(FlowStatusEnum.REJECTED.getCode()).equals(data.getStatus())) { commonService.checkForExecuteFlow(nextTaskId, instanceId);
map.put("approvalStatus", "提交"); Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
} String op = params.get("op").toString();
dto.setVariable(map); JyjcOpeningApplication jyjcOpeningApplication = jyjcOpeningApplicationMapper.selectById(sequenceNbr);
ProcessTaskDTO complete = new ProcessTaskDTO(); //组装信息
if ("0".equals(op)) { TaskResultDTO dto = new TaskResultDTO();
complete = cmWorkflowService.complete(data.getNextTaskId(), dto); dto.setResultCode("approvalStatus");
} else { dto.setTaskId(jyjcOpeningApplication.getNextTaskId());
complete = cmWorkflowService.reject(data.getNextTaskId(), dto); dto.setComment(params.get("comments").toString());
HashMap<String, Object> map = new HashMap<>();
} map.put("approvalStatus", op);
if (String.valueOf(FlowStatusEnum.ROLLBACK.getCode()).equals(jyjcOpeningApplication.getStatus()) || String.valueOf(FlowStatusEnum.REJECTED.getCode()).equals(jyjcOpeningApplication.getStatus())) {
map.put("approvalStatus", "提交");
}
dto.setVariable(map);
ProcessTaskDTO complete = new ProcessTaskDTO();
if ("0".equals(op)) {
complete = cmWorkflowService.complete(jyjcOpeningApplication.getNextTaskId(), dto);
} else {
complete = cmWorkflowService.reject(jyjcOpeningApplication.getNextTaskId(), dto);
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>(); }
processTaskDTOS.add(complete); ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS); processTaskDTOS.add(complete);
if (!org.springframework.util.ObjectUtils.isEmpty(resultDto) && !org.springframework.util.ObjectUtils.isEmpty(resultDto.get(0))) { List<WorkflowResultDto> resultDto = taskModelService.buildWorkFlowInfo(processTaskDTOS);
WorkflowResultDto workflowResultDto = resultDto.get(0); WorkflowResultDto workflowResultDto = resultDto.get(0);
if (!ObjectUtils.isEmpty(workflowResultDto.getNextTaskId())) { if (!ObjectUtils.isEmpty(workflowResultDto.getNextTaskId())) {
if ("1".equals(op)) { if ("1".equals(op)) {
// 驳回 // 驳回
data.setStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode())); jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode()));
data.setStatusName(String.valueOf(FlowStatusEnum.REJECTED.getName())); jyjcOpeningApplication.setStatusName(String.valueOf(FlowStatusEnum.REJECTED.getName()));
data.setPromoter(""); jyjcOpeningApplication.setPromoter("");
} else { } else {
data.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode())); // 提交
data.setStatusName(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getName())); jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
data.setPromoter(reginParams.getUserModel().getUserId()); jyjcOpeningApplication.setStatusName(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getName()));
jyjcOpeningApplication.setPromoter(RequestContext.getExeUserId());
} }
jyjcOpeningApplication.setNextTaskId(workflowResultDto.getNextTaskId());
jyjcOpeningApplication.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
// 更新代办 // 更新代办
updateTask(data, workflowResultDto, op); updateTask(jyjcOpeningApplication, workflowResultDto, op);
data.setNextTaskId(workflowResultDto.getNextTaskId());
} else { } else {
// 流程结束 // 流程结束
data.setStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode())); jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()));
//更新办理日期 //更新办理日期
data.setAcceptDate(new Date()); jyjcOpeningApplication.setAcceptDate(new Date());
// 更新代办 // 更新代办
HashMap<String, Object> taskParams = new HashMap<>(); HashMap<String, Object> taskParams = new HashMap<>();
taskParams.put("relationId", data.getWorkflowProstanceId()); taskParams.put("relationId", jyjcOpeningApplication.getWorkflowProstanceId());
taskParams.put("flowStatus", FlowStatusEnum.TO_BE_FINISHED.getCode()); taskParams.put("flowStatus", FlowStatusEnum.TO_BE_FINISHED.getCode());
taskParams.put("flowStatusLabel", FlowStatusEnum.TO_BE_FINISHED.getName()); taskParams.put("flowStatusLabel", FlowStatusEnum.TO_BE_FINISHED.getName());
taskParams.put("taskStatus", FlowStatusEnum.TO_BE_FINISHED.getCode()); taskParams.put("taskStatus", FlowStatusEnum.TO_BE_FINISHED.getCode());
taskParams.put("taskStatusLabel", FlowStatusEnum.TO_BE_FINISHED.getName()); taskParams.put("taskStatusLabel", FlowStatusEnum.TO_BE_FINISHED.getName());
taskParams.put("model", data); taskParams.put("model", jyjcOpeningApplication);
commonServiceImpl.updateTaskModel(taskParams); taskModelService.updateTaskModel(taskParams);
data.setStatusName(FlowStatusEnum.TO_BE_FINISHED.getName()); jyjcOpeningApplication.setPromoter("");
jyjcOpeningApplication.setNextTaskId("");
jyjcOpeningApplication.setNextExecuteUserIds("");
jyjcOpeningApplication.setStatusName(FlowStatusEnum.TO_BE_FINISHED.getName());
}
jyjcOpeningApplicationMapper.updateById(jyjcOpeningApplication);
// 已完成 作废逻辑
if (String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()).equals(jyjcOpeningApplication.getStatus())) {
doDiscard(jyjcOpeningApplication.getUnitCode(), jyjcOpeningApplication.getSequenceNbr(), jyjcOpeningApplication.getOpenBizType());
}
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(jyjcOpeningApplication.getWorkflowProstanceId(), this.buildInstanceRuntimeData(jyjcOpeningApplication));
return jyjcOpeningApplication;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
} }
} }
jyjcOpeningApplicationMapper.updateById(data); return null;
// 已完成 作废逻辑 }
if (String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()).equals(data.getStatus())) {
doDiscard(data.getUnitCode(), data.getSequenceNbr(), data.getOpenBizType());
private void executeOneStep(JyjcOpeningApplicationModel openingApplication) {
String instanceId = openingApplication.getWorkflowProstanceId();
String nextTaskId = openingApplication.getNextTaskId();
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForExecuteFlow(nextTaskId, instanceId);
// 组装信息执行工作流
TaskResultDTO dto = new TaskResultDTO();
dto.setResultCode("approvalStatus");
dto.setTaskId(nextTaskId);
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", "提交");
dto.setVariable(map);
ProcessTaskDTO complete = cmWorkflowService.complete(nextTaskId, dto);
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
processTaskDTOS.add(complete);
List<WorkflowResultDto> resultDto = taskModelService.buildWorkFlowInfo(processTaskDTOS);
WorkflowResultDto workflowResultDto = resultDto.get(0);
// 更新业务信息
openingApplication.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
openingApplication.setStatusName(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getName()));
openingApplication.setPromoter(RequestContext.getExeUserId());
openingApplication.setNextTaskId(workflowResultDto.getNextTaskId());
openingApplication.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
// 更新代办
JyjcOpeningApplication jyjcOpeningApplicationEntry = new JyjcOpeningApplication();
BeanUtil.copyProperties(openingApplication, jyjcOpeningApplicationEntry);
updateTask(jyjcOpeningApplicationEntry, workflowResultDto, "0");
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(jyjcOpeningApplicationEntry));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
} }
return data;
} }
/** /**
* 撤回流程办理单 * 撤回流程办理单
*/ */
public JyjcOpeningApplication stopFlow(String sequenceNbr) { public JyjcOpeningApplication stopFlow(String sequenceNbr, String instanceId, String nextTaskId) {
JyjcOpeningApplication jyjcOpeningApplication = jyjcOpeningApplicationMapper.selectById(sequenceNbr); String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
//撤回流程 RLock lock = redissonClient.getLock(lockKey);
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(jyjcOpeningApplication.getWorkflowProstanceId()); try {
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>(); boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
processTaskDTOS.add(processTaskDTO); // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.ROLLBACK.getCode())); if (!isLocked) {
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(jyjcOpeningApplication)); throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS); }
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) { // 流程执行时,状态及权限校验
WorkflowResultDto workflowResultDto = resultDto.get(0); commonService.checkForRevocationFlow(nextTaskId, instanceId);
jsonObject.put("nextExecuteUser", workflowResultDto.getNextExecutorRoleIds()); JyjcOpeningApplication jyjcOpeningApplication = jyjcOpeningApplicationMapper.selectById(sequenceNbr);
jyjcOpeningApplication.setNextTaskId(workflowResultDto.getNextTaskId()); //撤回流程
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(jyjcOpeningApplication.getWorkflowProstanceId());
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
processTaskDTOS.add(processTaskDTO);
jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.ROLLBACK.getCode()));
jyjcOpeningApplication.setStatusName(FlowStatusEnum.ROLLBACK.getName()); jyjcOpeningApplication.setStatusName(FlowStatusEnum.ROLLBACK.getName());
jyjcOpeningApplication.setPromoter("");
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(jyjcOpeningApplication));
List<WorkflowResultDto> resultDto = taskModelService.buildWorkFlowInfo(processTaskDTOS);
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) {
WorkflowResultDto workflowResultDto = resultDto.get(0);
jsonObject.put("nextExecuteUser", workflowResultDto.getNextExecutorRoleIds());
jyjcOpeningApplication.setNextTaskId(workflowResultDto.getNextTaskId());
jyjcOpeningApplication.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
}
jsonObject.put("nextTaskId", jyjcOpeningApplication.getNextTaskId());
jsonObject.put("nextExecuteUserIds", jyjcOpeningApplication.getNextExecuteUserIds());
jsonObject.put("taskType", BusinessTypeEnum.JY_OPENING_APPLICATION.getCode());
jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode());
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName());
// 撤回删除代办
taskModelService.rollbackTask(jyjcOpeningApplication.getWorkflowProstanceId(), jsonObject);
// 更新数据
jyjcOpeningApplicationMapper.updateById(jyjcOpeningApplication);
// 缓存下一个任务id,再任务进行时,用来校验数据,不再进行数据库查询
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(jyjcOpeningApplication));
return jyjcOpeningApplication;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
} }
jsonObject.put("nextTaskId", jyjcOpeningApplication.getNextTaskId()); return null;
jsonObject.put("taskType", BusinessTypeEnum.JY_OPENING_APPLICATION.getCode()); }
jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode());
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName()); private InstanceRuntimeData buildInstanceRuntimeData(JyjcOpeningApplicationModel jyjcOpeningApplication) {
// 撤回删除代办 return InstanceRuntimeData.builder()
commonServiceImpl.rollbackTask(jyjcOpeningApplication.getWorkflowProstanceId(), jsonObject); .nextExecuteUserIds(jyjcOpeningApplication.getNextExecuteUserIds())
// 更新数据 .promoter(jyjcOpeningApplication.getPromoter())
jyjcOpeningApplicationMapper.updateById(jyjcOpeningApplication); .nextTaskId(jyjcOpeningApplication.getNextTaskId())
return jyjcOpeningApplication; .build();
}
private InstanceRuntimeData buildInstanceRuntimeData(JyjcOpeningApplication jyjcOpeningApplication) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jyjcOpeningApplication.getNextExecuteUserIds())
.promoter(jyjcOpeningApplication.getPromoter())
.nextTaskId(jyjcOpeningApplication.getNextTaskId())
.build();
} }
...@@ -648,7 +759,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -648,7 +759,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
private void buildTask(JyjcOpeningApplicationModel model, WorkflowResultDto workflowResultDto) { private void buildTask(JyjcOpeningApplicationModel model, WorkflowResultDto workflowResultDto) {
ReginParams reginParams = commonserviceImpl.getReginParamsOfCurrentUser(); ReginParams reginParams = commonService.getReginParamsOfCurrentUser();
// 代办消息 // 代办消息
ArrayList<TaskModelDto> list = new ArrayList<>(); ArrayList<TaskModelDto> list = new ArrayList<>();
TaskModelDto dto = new TaskModelDto(); TaskModelDto dto = new TaskModelDto();
...@@ -676,7 +787,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -676,7 +787,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
dto.setNextExecuteUser(workflowResultDto.getNextExecutorRoleIds()); dto.setNextExecuteUser(workflowResultDto.getNextExecutorRoleIds());
dto.setPageType("look"); dto.setPageType("look");
list.add(dto); list.add(dto);
commonServiceImpl.buildTaskModel(list); taskModelService.buildTaskModel(list);
} }
private void updateTask(JyjcOpeningApplication model, WorkflowResultDto workflowResultDto, String op) { private void updateTask(JyjcOpeningApplication model, WorkflowResultDto workflowResultDto, String op) {
...@@ -687,7 +798,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -687,7 +798,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
params.put("flowStatusLabel", model.getStatus()); params.put("flowStatusLabel", model.getStatus());
params.put("taskStatus", model.getStatus()); params.put("taskStatus", model.getStatus());
params.put("taskStatusLabel", model.getStatus()); params.put("taskStatusLabel", model.getStatus());
TaskV2Model taskV2Model = commonServiceImpl.updateTaskModel(params); TaskV2Model taskV2Model = taskModelService.updateTaskModel(params);
// 创建新的代办 // 创建新的代办
if (!ObjectUtils.isEmpty(taskV2Model)) { if (!ObjectUtils.isEmpty(taskV2Model)) {
TaskModelDto taskModelDto = new TaskModelDto(); TaskModelDto taskModelDto = new TaskModelDto();
...@@ -711,17 +822,31 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp ...@@ -711,17 +822,31 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
} }
taskModelDto.setNextExecuteUser(workflowResultDto.getNextExecutorRoleIds()); taskModelDto.setNextExecuteUser(workflowResultDto.getNextExecutorRoleIds());
commonServiceImpl.buildTaskModel(Collections.singletonList(taskModelDto)); taskModelService.buildTaskModel(Collections.singletonList(taskModelDto));
} else { } else {
JyjcOpeningApplicationModel applicationModel = new JyjcOpeningApplicationModel(); JyjcOpeningApplicationModel applicationModel = new JyjcOpeningApplicationModel();
BeanUtil.copyProperties(model, applicationModel); BeanUtil.copyProperties(model, applicationModel);
buildTask(applicationModel, workflowResultDto); buildTask(applicationModel, workflowResultDto);
} }
} }
@Override @Override
public List<TzBaseEnterpriseInfoDto> getUnitListByRecord(String record) { public List<TzBaseEnterpriseInfoDto> getUnitListByRecord(String record) {
return ruleActionHandler.getInspectionUnitList(new ArrayList<>(), true, record, OpenBizTypeEnum.JC.getCode()); return ruleActionHandler.getInspectionUnitList(new ArrayList<>(), true, record, OpenBizTypeEnum.JC.getCode());
} }
/**
* 缓存当前正在流程中的实例的流程数据
*/
public void initFlowData2Redis() {
LambdaQueryWrapper<JyjcOpeningApplication> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ne(JyjcOpeningApplication::getStatus, FlowStatusEnum.TO_BE_FINISHED.getCode());
queryWrapper.ne(JyjcOpeningApplication::getStatus, FlowStatusEnum.TO_BE_DISCARD.getCode());
queryWrapper.isNotNull(JyjcOpeningApplication::getWorkflowProstanceId);
queryWrapper.select(JyjcOpeningApplication::getWorkflowProstanceId, JyjcOpeningApplication::getNextTaskId, JyjcOpeningApplication::getPromoter, JyjcOpeningApplication::getNextExecuteUserIds);
List<JyjcOpeningApplication> openingApplicationListInFlowing = this.list(queryWrapper);
openingApplicationListInFlowing.forEach(inspectionApplication -> {
commonService.saveExecuteFlowData2Redis(inspectionApplication.getWorkflowProstanceId(), this.buildInstanceRuntimeData(inspectionApplication));
});
}
} }
\ No newline at end of file
...@@ -35,7 +35,7 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -35,7 +35,7 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
redis.cache.failure.time=10800 redis.cache.failure.time=10800
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://172.16.10.243:2883 emqx.broker=tcp://172.16.10.243:2883
emqx.client-user-name=admin emqx.client-user-name=admin
......
...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -28,7 +28,7 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
## emqx properties: ## emqx properties:
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://172.16.10.243:2883 emqx.broker=tcp://172.16.10.243:2883
emqx.client-user-name=super emqx.client-user-name=super
......
...@@ -90,7 +90,7 @@ windows.img.path = D:\\ ...@@ -90,7 +90,7 @@ windows.img.path = D:\\
linux.img.path = / linux.img.path = /
## emqx ## emqx
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://172.16.10.243:1883 emqx.broker=tcp://172.16.10.243:1883
emqx.client-user-name=super emqx.client-user-name=super
......
...@@ -177,6 +177,7 @@ ...@@ -177,6 +177,7 @@
info.sequence_nbr, info.sequence_nbr,
info.use_code, info.use_code,
info.use_unit, info.use_unit,
concat(info.use_code,'_',info.use_unit) as useCodeAndName,
info.use_contact, info.use_contact,
info.contact_phone info.contact_phone
FROM FROM
......
...@@ -30,7 +30,7 @@ spring.redis.lettuce.pool.max-idle=10 ...@@ -30,7 +30,7 @@ spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.min-idle=0
## emqx properties: ## emqx properties:
emqx.clean-session=false emqx.clean-session=true
emqx.client-id=${spring.application.name}-${random.int[1024,65536]} emqx.client-id=${spring.application.name}-${random.int[1024,65536]}
emqx.broker=tcp://36.46.151.113:1883 emqx.broker=tcp://36.46.151.113:1883
emqx.client-user-name=super emqx.client-user-name=super
......
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