新购验收会签流程增加,验收单修改

This commit is contained in:
syruan 2025-01-17 18:12:46 +08:00
parent b14bed4d9a
commit 8b4e9a9184
5 changed files with 172 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package com.bonus.material.countersign.mapper;
import com.bonus.material.countersign.domain.SignConfigVo; import com.bonus.material.countersign.domain.SignConfigVo;
import com.bonus.material.countersign.domain.SignProcessVo; import com.bonus.material.countersign.domain.SignProcessVo;
import com.bonus.material.purchase.domain.PurchaseSignRecord;
import java.util.List; import java.util.List;
@ -14,6 +15,23 @@ import java.util.List;
public interface SignProcessMapper public interface SignProcessMapper
{ {
/**
* 查询采购任务的会签记录
* @param taskId 任务id
*/
List<PurchaseSignRecord> getPurchaseSignRecordByTask(Long taskId);
/**
* 查询采新购验收任务已进行会签的签名地址
* @param taskId 任务id
*/
List<PurchaseSignRecord> getPurchaseSignUrlListByTaskId(Long taskId);
/**
* 插入新购任务的会签记录
*/
int insertPurchaseSignRecord(PurchaseSignRecord purchaseSignRecord);
/** /**
* 查询会签流程配置管理列表 * 查询会签流程配置管理列表
* *

View File

@ -0,0 +1,47 @@
package com.bonus.material.purchase.domain;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author : 阮世耀
* @version : 1.0
* @PackagePath: com.bonus.material.purchase.domain
* @CreateTime: 2025-01-17 16:45
* @Description: 新购会签记录表
*/
@Data
@Accessors(chain = true)
public class PurchaseSignRecord {
private Long id;
private Long taskId;
private Long userId;
private Long orgId;
private String signUrl;
private String signType;
public PurchaseSignRecord(Long taskId, Long userId, Long orgId) {
this.taskId = taskId;
this.userId = userId;
this.orgId = orgId;
}
public PurchaseSignRecord() {
}
public PurchaseSignRecord(Long id, Long taskId, Long userId, Long orgId, String signUrl, String signType) {
this.id = id;
this.taskId = taskId;
this.userId = userId;
this.orgId = orgId;
this.signUrl = signUrl;
this.signType = signType;
}
}

View File

@ -2,6 +2,7 @@ package com.bonus.material.purchase.domain.vo;
import com.bonus.material.archives.domain.ElcSignatureInfo; import com.bonus.material.archives.domain.ElcSignatureInfo;
import com.bonus.material.purchase.domain.PurchaseCheckDetails; import com.bonus.material.purchase.domain.PurchaseCheckDetails;
import com.bonus.material.purchase.domain.PurchaseSignRecord;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -31,6 +32,12 @@ public class PurchaseCheckFormVo {
@ApiModelProperty(value = "供应科") @ApiModelProperty(value = "供应科")
private String supplyDept; private String supplyDept;
private List<PurchaseSignRecord> gySignUrl = new ArrayList<>();
private List<PurchaseSignRecord> scSignUrl = new ArrayList<>();
private List<PurchaseSignRecord> kgSignUrl = new ArrayList<>();
@ApiModelProperty("生产技术科") @ApiModelProperty("生产技术科")
private String productionTechDept; private String productionTechDept;

View File

@ -15,13 +15,17 @@ import com.bonus.common.biz.enums.TmTaskTypeEnum;
import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.exception.ServiceException;
import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.core.web.domain.BaseEntity;
import com.bonus.common.security.utils.SecurityUtils; import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.material.basic.domain.BmFileInfo; import com.bonus.material.basic.domain.BmFileInfo;
import com.bonus.material.basic.mapper.BmFileInfoMapper; import com.bonus.material.basic.mapper.BmFileInfoMapper;
import com.bonus.material.basic.service.IBmConfigService; import com.bonus.material.basic.service.IBmConfigService;
import com.bonus.material.countersign.domain.SignProcessVo;
import com.bonus.material.countersign.mapper.SignProcessMapper;
import com.bonus.material.ma.domain.Type; import com.bonus.material.ma.domain.Type;
import com.bonus.material.ma.mapper.TypeMapper; import com.bonus.material.ma.mapper.TypeMapper;
import com.bonus.material.purchase.domain.PurchaseCheckDetails; import com.bonus.material.purchase.domain.PurchaseCheckDetails;
import com.bonus.material.purchase.domain.PurchaseSignRecord;
import com.bonus.material.purchase.domain.dto.PurchaseCheckDto; import com.bonus.material.purchase.domain.dto.PurchaseCheckDto;
import com.bonus.material.purchase.domain.dto.PurchaseQueryDto; import com.bonus.material.purchase.domain.dto.PurchaseQueryDto;
import com.bonus.material.purchase.domain.vo.PurchaseVerifyVo; import com.bonus.material.purchase.domain.vo.PurchaseVerifyVo;
@ -30,6 +34,7 @@ import com.bonus.material.purchase.domain.vo.PurchaseCheckFormVo;
import com.bonus.material.purchase.mapper.PurchaseMacodeInfoMapper; import com.bonus.material.purchase.mapper.PurchaseMacodeInfoMapper;
import com.bonus.material.task.domain.TmTask; import com.bonus.material.task.domain.TmTask;
import com.bonus.material.task.mapper.TmTaskMapper; import com.bonus.material.task.mapper.TmTaskMapper;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -71,6 +76,10 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
@Resource @Resource
private TypeMapper typeMapper; private TypeMapper typeMapper;
@Resource
private SignProcessMapper signProcessMapper;
// 引入新购任务阶段常量 // 引入新购任务阶段常量
private static final int PURCHASE_TASK_STAGE_MANAGE = 1; private static final int PURCHASE_TASK_STAGE_MANAGE = 1;
private static final int PURCHASE_TASK_STAGE_CHECK = 2; private static final int PURCHASE_TASK_STAGE_CHECK = 2;
@ -444,6 +453,62 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
if (BooleanUtils.isTrue(purchaseVerifyVo.getVerifyPass())) { if (BooleanUtils.isTrue(purchaseVerifyVo.getVerifyPass())) {
// 验收通过处理流程 // 验收通过处理流程
for (PurchaseCheckDetails details : purchaseVerifyVo.getPurchaseCheckDetailsList()) { for (PurchaseCheckDetails details : purchaseVerifyVo.getPurchaseCheckDetailsList()) {
// 前端选择验收通过操作进入会签校验流程
if (null != details && null != details.getTaskId()) {
// 查询已进行会签的org_id集合
List<PurchaseSignRecord> purchaseSignRecordList = signProcessMapper.getPurchaseSignRecordByTask(details.getTaskId());
Long loginUserDeptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
if (null == loginUserDeptId || 0 == loginUserDeptId) {
return AjaxResult.error("会签失败!,请检查用户部门信息");
}
if (CollectionUtils.isEmpty(purchaseSignRecordList)) {
// 如果没有进行过会签则进行会签流程
int addPurchaseSignResult = signProcessMapper.insertPurchaseSignRecord(new PurchaseSignRecord(details.getTaskId(), SecurityUtils.getUserId(), loginUserDeptId));
if (0 < addPurchaseSignResult) {
return AjaxResult.success("会签成功");
} else {
return AjaxResult.error("会签失败!插入0条数据");
}
} else {
// 进行过会签进行下一步校验
// 查询需要进行会签的org_id集合
List<SignProcessVo> signProcessVoList = signProcessMapper.getList(new SignProcessVo());
if (CollectionUtils.isEmpty(signProcessVoList)) {
return AjaxResult.error("会签失败!,未查询到会签配置流程!");
} else {
// 查询出配置需要会签的org_id集合
Set<Long> configSignOrgSet = signProcessVoList.stream().map(SignProcessVo::getOrgId).collect(Collectors.toSet());
// 获取已进行会签的org_id集合
Set<Long> signedOrgSet = purchaseSignRecordList.stream().map(PurchaseSignRecord::getOrgId).collect(Collectors.toSet());
// 移除已会签的org_id
configSignOrgSet.removeAll(signedOrgSet);
if (!CollectionUtils.isEmpty(configSignOrgSet)) {
// 如果还有需要进行会签的数据那么进行本次会签
int addPurchaseSignResult = signProcessMapper.insertPurchaseSignRecord(new PurchaseSignRecord(details.getTaskId(), SecurityUtils.getUserId(), loginUserDeptId));
if (0 < addPurchaseSignResult) {
// 会签成功对配置的流程进行处理
configSignOrgSet.remove(loginUserDeptId);
if (configSignOrgSet.isEmpty()) {
System.out.println("ONE会签成功,放行进行验收流程!");
} else {
// 如果本次会签完成后还有需要进行会签的那么本次会签完成返回前端
return AjaxResult.success("本次会签成功,还有未进行的会签部门!");
}
} else {
return AjaxResult.error("会签失败!插入0条数据");
}
} else {
System.out.println("TWO会签成功,已全部进行会签,放行进行验收流程!");
}
}
}
} else {
return AjaxResult.error("detail数据异常,任务ID为空");
}
if (MaTypeManageTypeEnum.CODE_DEVICE.getTypeId().equals(details.getManageType())) { if (MaTypeManageTypeEnum.CODE_DEVICE.getTypeId().equals(details.getManageType())) {
details.setStatus(PurchaseTaskStatusEnum.TO_BIND.getStatus()); details.setStatus(PurchaseTaskStatusEnum.TO_BIND.getStatus());
} else if (MaTypeManageTypeEnum.NUMBER_DEVICE.getTypeId().equals(details.getManageType())) { } else if (MaTypeManageTypeEnum.NUMBER_DEVICE.getTypeId().equals(details.getManageType())) {
@ -504,9 +569,21 @@ public class PurchaseCheckInfoServiceImpl implements IPurchaseCheckInfoService {
purchaseCheckInfo.setTaskId(taskId); purchaseCheckInfo.setTaskId(taskId);
List<PurchaseCheckDetails> list = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListFromInfo(purchaseCheckInfo); List<PurchaseCheckDetails> list = purchaseCheckDetailsMapper.selectPurchaseCheckDetailsListFromInfo(purchaseCheckInfo);
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
List<PurchaseSignRecord> purchaseSignRecordUserSignList = new ArrayList<>();
for (PurchaseCheckDetails purchaseCheckDetails : list) { for (PurchaseCheckDetails purchaseCheckDetails : list) {
result.setSignUrl(purchaseCheckDetails.getSignUrl() != null ? purchaseCheckDetails.getSignUrl() : ""); // 查询已签名的记录
result.setSignType(purchaseCheckDetails.getSignType() != null ? purchaseCheckDetails.getSignType() : ""); if (purchaseSignRecordUserSignList.isEmpty()) {
purchaseSignRecordUserSignList = signProcessMapper.getPurchaseSignUrlListByTaskId(purchaseCheckDetails.getTaskId());
}
result.setSignUrl(null != purchaseCheckDetails.getSignUrl() ? purchaseCheckDetails.getSignUrl() : "");
result.setSignType(null != purchaseCheckDetails.getSignType() ? purchaseCheckDetails.getSignType() : "");
}
// 分流存入集合
for (PurchaseSignRecord userSignObj : purchaseSignRecordUserSignList) {
if (null == userSignObj.getOrgId()) { continue;}
if (311 == userSignObj.getOrgId()) {result.getGySignUrl().add(userSignObj);}
if (313 == userSignObj.getOrgId()) {result.getScSignUrl().add(userSignObj);}
if (312 == userSignObj.getOrgId()) {result.getKgSignUrl().add(userSignObj);}
} }
} }
// 执行SQL查询内层信息 // 执行SQL查询内层信息

View File

@ -99,4 +99,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id} and del_flag = 0 where id = #{id} and del_flag = 0
</update> </update>
<select id="getPurchaseSignRecordByTask" resultType="com.bonus.material.purchase.domain.PurchaseSignRecord">
select
id, task_id as taskId, auditor as userId, org_id as orgId
from
purchase_audit_record
where
task_id = #{taskId}
</select>
<insert id="insertPurchaseSignRecord">
insert into purchase_audit_record(task_id, auditor, org_id)
values(#{taskId}, #{userId}, #{orgId})
</insert>
<select id="getPurchaseSignUrlListByTaskId" resultType="com.bonus.material.purchase.domain.PurchaseSignRecord">
SELECT par.id, par.task_id as taskId, par.org_id as orgId, par.auditor as userId,
su.sign_url as signUrl,su.sign_type as signType
FROM purchase_audit_record par
LEFT JOIN sys_user su ON su.user_id = par.auditor
WHERE par.task_id = '844'
</select>
</mapper> </mapper>