diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/TmTaskTypeEnum.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/TmTaskTypeEnum.java index 81b2355e..442697aa 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/TmTaskTypeEnum.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/TmTaskTypeEnum.java @@ -20,18 +20,19 @@ public enum TmTaskTypeEnum { TM_TASK_PART_LEASE(12, "配件领料任务"), TM_TASK_PART_TYPE(13, "费用减免任务"), TM_TASK_REPAIR_NUM(14, "数量维修人员信息附件"), - - TM_TASK_DIRECT(16, "直转任务"), //盘点报废 TM_TASK_PART_SCRAP(15, "盘点报废"), - // 机具分公司领料任务 - TM_TASK_JJ_LEASE(20, "机具分公司领料任务"), + + TM_TASK_DIRECT(16, "直转任务"), + //安全工器具领料任务 TM_TASK_SAFE_LEASE(17, "安全工器具领料任务"), // 宏源领料领料任务 TM_TASK_HY_LEASE(18, "宏源领料任务"), // 领用任务 TM_TASK_LEASE_APPLY(19, "领用任务"), + // 机具分公司领料任务 + TM_TASK_JJ_LEASE(20, "机具分公司领料任务"), // 现场维修 TM_TASK_FIELD(21, "现场维修任务"), // 材料站领料 @@ -39,7 +40,10 @@ public enum TmTaskTypeEnum { // 材料站退料 TM_TASK_MATERIAL_BACK(23, "材料站退料任务"), // 材料站预约退料 - TM_TASK_MATERIAL_BACK_APPOINT(24, "材料站预约退料任务"); + TM_TASK_MATERIAL_BACK_APPOINT(24, "材料站预约退料任务"), + + // 材料站站内直转任务 + TM_TASK_ZN_DIRECT(25, "材料站站内直转任务"); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/ClzDirectController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/ClzDirectController.java new file mode 100644 index 00000000..5aec600d --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/ClzDirectController.java @@ -0,0 +1,160 @@ +package com.bonus.material.clz.controller; + +import com.bonus.common.core.utils.poi.ExcelUtil; +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.clz.domain.back.MaterialBackApplyInfo; +import com.bonus.material.clz.domain.direct.ClzDirectApplyDetails; +import com.bonus.material.clz.domain.direct.ClzDirectApplyInfo; +import com.bonus.material.clz.domain.direct.ClzDirectApplyInfoVo; +import com.bonus.material.clz.service.ClzDirectService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author ma_sh + * @create 2025/6/25 13:26 + */ +@Api(tags = "材料站站内直转接口") +@RestController +@RequestMapping("/material_direct") +public class ClzDirectController extends BaseController { + + @Resource + private ClzDirectService clzDirectService; + + /** + * 根据协议Id查询在用数据 + * @param bean + * @return + */ + @ApiOperation(value = "根据协议Id查询在用数据") + @PostMapping("/getUseData") + public AjaxResult getUseData(@RequestBody MaterialBackApplyInfo bean) { + try { + List useData = clzDirectService.getUseData(bean); + return AjaxResult.success(useData); + } catch (Exception e) { + return AjaxResult.success(new ArrayList<>()); + } + } + + /** + * 在用三级设备类型 + * @param bean + * @return + */ + @ApiOperation(value = "在用三级设备类型") + @PostMapping("/getUseThreeTree") + public AjaxResult getUseThreeTree(@RequestBody MaterialBackApplyInfo bean) { + return clzDirectService.getUseThreeTree(bean); + } + + /** + * 直转记录查询列表 + * @param directApplyInfo + * @return + */ + @ApiOperation(value = "直转记录查询列表") + @GetMapping("/list") + public AjaxResult list(ClzDirectApplyInfo directApplyInfo) { + startPage(); + try { + List directApplyInfos = clzDirectService.getList(directApplyInfo); + return AjaxResult.success(getDataTable(directApplyInfos)); + } catch (Exception e) { + return AjaxResult.success(getDataTable(new ArrayList<>())); + } + } + + /** + * 导出直转记录查询列表 + * @param response + * @param directApplyInfo + */ + @PostMapping("/export") + public void export(HttpServletResponse response, ClzDirectApplyInfo directApplyInfo) { + List list = clzDirectService.getList(directApplyInfo); + ExcelUtil util = new ExcelUtil<>(ClzDirectApplyInfo.class); + util.exportExcel(response, list, "直转记录数据"); + } + + /** + * 新增直转申请 + * @param clzDirectApplyInfoVo + * @return + */ + @ApiOperation(value = "新增直转申请") + @PostMapping("/add") + public AjaxResult add(@RequestBody ClzDirectApplyInfoVo clzDirectApplyInfoVo) { + try { + return clzDirectService.add(clzDirectApplyInfoVo); + } catch (Exception e) { + System.err.println("保存失败:" + e.getMessage()); + return AjaxResult.error("保存失败"); + } + } + + /** + * 修改直转申请 + * @param clzDirectApplyInfoVo + * @return + */ + @ApiOperation(value = "修改直转申请") + @PostMapping("/edit") + public AjaxResult edit(@RequestBody ClzDirectApplyInfoVo clzDirectApplyInfoVo) { + try { + return clzDirectService.edit(clzDirectApplyInfoVo); + } catch (Exception e) { + return AjaxResult.error("修改失败"); + } + } + + /** + * 删除直转申请 + * @param directApplyInfo + * @return + */ + @ApiOperation(value = "删除直转申请") + @PostMapping("/delete") + public AjaxResult remove(@RequestBody ClzDirectApplyInfo directApplyInfo) { + return clzDirectService.remove(directApplyInfo); + } + + /** + * 查看详情 + * @param directApplyInfo + * @return + */ + @ApiOperation(value = "查看详情") + @GetMapping("/getInfo") + public AjaxResult getInfo(ClzDirectApplyInfo directApplyInfo) { + try { + return clzDirectService.getInfoById(directApplyInfo); + } catch (Exception e) { + return AjaxResult.success(new ClzDirectApplyInfoVo()); + } + } + + /** + * 站内直转审批 + * @param directApplyInfo + * @return + */ + @ApiOperation(value = "直转审批") + @PostMapping("/directUpdate") + public AjaxResult directUpdate(@RequestBody ClzDirectApplyInfo directApplyInfo) { + try { + return clzDirectService.updateDirectSysWorkflowRecordHistory(directApplyInfo); + } catch (Exception e) { + logger.error("审核失败{}", e.getMessage(), e); + return error(e.getMessage()); + } + } +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/ClzDirectApplyDetails.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/ClzDirectApplyDetails.java new file mode 100644 index 00000000..6395c9b5 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/ClzDirectApplyDetails.java @@ -0,0 +1,97 @@ +package com.bonus.material.clz.domain.direct; + +import com.bonus.common.core.annotation.Excel; +import com.bonus.common.core.web.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 材料站直转单详情 + * @author ma_sh + */ +@EqualsAndHashCode(callSuper = false) +@Data +public class ClzDirectApplyDetails extends BaseEntity { + /** + * id + */ + private Integer id; + + /** + * 直转id + */ + private Integer directId; + + /** + * 机具类型 + */ + private Integer typeId; + + /** + * 机具id + */ + private Integer maId; + + /** + * 直转数量 + */ + private BigDecimal directNum; + + /** + * 预领数量 + */ + private BigDecimal preNum; + + private String typeName; + + private String typeModelName; + + private String kindName; + + private String modelName; + + private String maCode; + + private String unitName; + + private BigDecimal useNum; + + private String companyId; + + private String leasePerson; + + private String startTime; + + private String manageType; + + /** + * 退料协议id + */ + private String backAgreementId; + + /** + * 领料协议id + */ + private String leaseAgreementId; + + private String unitValue; + + private Long parentId; + + private BigDecimal outNum; + + @ApiModelProperty(value = "是否完成 (0:未完成退料,可以撤回 1:已完成退料,不能撤回)") + private Integer isFinished; + + @ApiModelProperty(value = "出库方式 0数量,1编码,2二维码,3标准箱,4直转") + private Integer outType; + + @ApiModelProperty(value = "申请人") + private String createBy; + + @ApiModelProperty(value = "备注") + private String remark; +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/ClzDirectApplyInfo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/ClzDirectApplyInfo.java new file mode 100644 index 00000000..551ef048 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/ClzDirectApplyInfo.java @@ -0,0 +1,178 @@ +package com.bonus.material.clz.domain.direct; + +import com.bonus.common.core.annotation.Excel; +import com.bonus.common.core.web.domain.BaseEntity; +import com.bonus.material.ma.domain.DirectApplyUrl; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.util.List; + +/** + * 材料站站内直转info + * @author ma_sh + */ +@Data +public class ClzDirectApplyInfo extends BaseEntity { + + @ApiModelProperty(value = "主键id") + private Integer id; + + @ApiModelProperty(value = "0=暂存,1=提交") + private Integer isSubmit; + + @ApiModelProperty(value = "直转单号") + @Excel(name = "直转单号") + private String code; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @ApiModelProperty(value = "申请人") + @Excel(name = "申请人") + private String createBy; + + @ApiModelProperty(value = "退料单位协议集合") + private String backAgreementIds; + + @ApiModelProperty(value = "退料工程id") + private String backProId; + + @ApiModelProperty(value = "转出工程") + @Excel(name = "转出工程") + private String backProName; + + @ApiModelProperty(value = "退料班组id") + private String backTeamId; + + @ApiModelProperty(value = "转出班组") + @Excel(name = "转出班组") + private String backTeamName; + + @ApiModelProperty(value = "退料人") + private String backMan; + + @ApiModelProperty(value = "退料人电话") + private String backPhone; + + @ApiModelProperty(value = "退料备注") + private String backRemark; + + @ApiModelProperty(value = "领料工程id") + private String leaseProId; + + @ApiModelProperty(value = "转入工程") + @Excel(name = "转入工程") + private String leaseProName; + + @ApiModelProperty(value = "领料单位id") + private String leaseTeamId; + + @ApiModelProperty(value = "转入班组") + @Excel(name = "转入班组") + private String leaseTeamName; + + @ApiModelProperty(value = "领料单位协议集合") + private String leaseAgreementIds; + + @ApiModelProperty(value = "领料人") + private String leaseMan; + + @ApiModelProperty(value = "领料联系电话") + private String leasePhone; + + @ApiModelProperty(value = "领料备注") + private String leaseRemark; + + @ApiModelProperty(value = "直转附件") + private String dirUrl; + + @ApiModelProperty(value = "直转附件数组") + private List dirUrls; + + @ApiModelProperty(value = "物资类型") + @Excel(name = "物资类型") + private String typeName; + + @Excel(name = "状态", readConverterExp = "0=待审核,1=审核中,2=已完成,3=已驳回,4= 待提交") + private Integer status; + + @ApiModelProperty(value = "审核人") + private String auditor; + + @ApiModelProperty(value = "审核时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date auditTime; + + @ApiModelProperty(value = "审核备注") + private String auditRemark; + + private Integer taskStatus; + + private String flowStatus; + + private String flowId; + + @ApiModelProperty(value = "本流程节点id") + private Integer nodeId; + + @ApiModelProperty(value = "下个流程节点id") + private Integer nextNodeId; + + @ApiModelProperty(value = "流程配置值") + private String configValue; + + @ApiModelProperty(value = "所属记录") + private Integer recordId; + + @ApiModelProperty(value = "流程节点签名方式 0:或签 1:会签") + private Integer nodeSignType; + + @ApiModelProperty(value = "开始时间") + private String startTime; + + @ApiModelProperty(value = "结束时间") + private String endTime; + + @ApiModelProperty(value = "关键字") + private String keyWord; + + @ApiModelProperty(value = "班组长姓名") + private String relName; + + @ApiModelProperty(value = "班组长身份证号") + private String teamLeaderIdCard; + + @ApiModelProperty(value = "i8工程id") + private String projectId; + + @ApiModelProperty(value = "班组长手机号") + private String relPhone; + + @ApiModelProperty(value = "下一节点审核人id,可能存在多个,用逗号拼接") + private String directUserIds; + + @ApiModelProperty(value = "审批结果, 1通过 2拒绝") + private Integer isAccept; + + @ApiModelProperty(value = "i8工程id集合") + private List projectIdList; + + @ApiModelProperty(value = "实施单位id") + private String impUnit; + + @ApiModelProperty(value = "转出班组长账号") + private String backIdCard; + + @ApiModelProperty(value = "转入班组长账号") + private String leaseIdCard; + + @ApiModelProperty(value = "任务状态列表") + private List statusList; + +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/ClzDirectApplyInfoVo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/ClzDirectApplyInfoVo.java new file mode 100644 index 00000000..28de69bb --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/ClzDirectApplyInfoVo.java @@ -0,0 +1,25 @@ +package com.bonus.material.clz.domain.direct; + +import com.bonus.common.core.web.domain.BaseEntity; +import com.bonus.material.ma.domain.DirectApplyDetails; +import com.bonus.material.ma.domain.DirectApplyInfo; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** + * 材料站站内直转vo + * @author ma_sh + */ +@EqualsAndHashCode(callSuper = false) +@Data +public class ClzDirectApplyInfoVo extends BaseEntity implements Serializable { + + private static final long serialVersionUID = -5152464640629428150L; + + private ClzDirectApplyInfo directApplyInfo; + + private List directApplyInfoDetails; +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/WorkflowEvent.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/WorkflowEvent.java new file mode 100644 index 00000000..23742947 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/direct/WorkflowEvent.java @@ -0,0 +1,34 @@ +package com.bonus.material.clz.domain.direct; + +import lombok.Getter; + +/** + * 材料站直转审核vo + * @author ma_sh + */ +@Getter +public class WorkflowEvent { + + private final int taskId; + private final int taskType; + private final String taskCode; + private final String projectName; + private final int backAgreementId; + private final String leaseMan; + + /** + * 退料班组id + */ + private String backTeamId; + + public WorkflowEvent(int taskId, String taskCode, int taskType, String projectName, int backAgreementId, String leaseMan, String backTeamId) { + this.taskId = taskId; + this.taskCode = taskCode; + this.taskType = taskType; + this.projectName = projectName; + this.backAgreementId = backAgreementId; + this.leaseMan = leaseMan; + this.backTeamId = backTeamId; + } + +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/lease/MaterialLeaseApplyDetails.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/lease/MaterialLeaseApplyDetails.java index cced6f17..21e210fa 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/lease/MaterialLeaseApplyDetails.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/lease/MaterialLeaseApplyDetails.java @@ -169,6 +169,9 @@ public class MaterialLeaseApplyDetails extends BaseEntity { @ApiModelProperty(value = "租赁工程") private String leaseProject; + @ApiModelProperty(value = "i8工程id") + private String externalId; + /** * 领料出库机具编码集合 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/ClzDirectMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/ClzDirectMapper.java new file mode 100644 index 00000000..4d65bc42 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/ClzDirectMapper.java @@ -0,0 +1,92 @@ +package com.bonus.material.clz.mapper; + +import com.bonus.material.clz.domain.back.MaterialBackApplyInfo; +import com.bonus.material.clz.domain.direct.ClzDirectApplyDetails; +import com.bonus.material.clz.domain.direct.ClzDirectApplyInfo; +import com.bonus.material.ma.domain.DirectApplyInfo; +import com.bonus.material.settlement.domain.SltAgreementInfo; + +import java.util.List; + +/** + * @Author ma_sh + * @create 2025/6/25 13:29 + */ +public interface ClzDirectMapper { + + /** + * 获取直转单号 + * @return + */ + List getListAll(); + + /** + * 新增直转申请 + * @param clzDirectApplyInfo + * @return + */ + int saveDirectApplyInfo(ClzDirectApplyInfo clzDirectApplyInfo); + + /** + * 新增直转申请详情 + * @param list + * @return + */ + int saveDirectApplyDetails(List list); + + /** + * 修改直转申请 + * @param clzDirectApplyInfo + * @return + */ + int updateDirectApplyInfo(ClzDirectApplyInfo clzDirectApplyInfo); + + /** + * 删除详情表内容 + * @param id + * @return + */ + int deleteDirectApplyDetails(Integer id); + + /** + * 删除主表 + * @param directApplyInfo + * @return + */ + int deleteDirectApplyInfo(ClzDirectApplyInfo directApplyInfo); + + /** + * 查询列表 + * @param directApplyInfo + * @return + */ + List getList(ClzDirectApplyInfo directApplyInfo); + + /** + * 先查询info表信息 + * @param directApplyInfo + * @return + */ + ClzDirectApplyInfo getInfoById(ClzDirectApplyInfo directApplyInfo); + + /** + * 查询详情表信息 + * @param id + * @return + */ + List getDetailsById(Integer id); + + /** + * 查询使用数据 + * @param bean + * @return + */ + List getUseData(MaterialBackApplyInfo bean); + + /** + * 查询详情表信息 + * @param directApplyInfo + * @return + */ + ClzDirectApplyInfo getInfoDetails(ClzDirectApplyInfo directApplyInfo); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialBackInfoMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialBackInfoMapper.java index 9c408523..e61775b2 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialBackInfoMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialBackInfoMapper.java @@ -6,6 +6,7 @@ import com.bonus.material.back.domain.vo.MaCodeVo; import com.bonus.material.clz.domain.back.MaterialBackApplyDetails; import com.bonus.material.clz.domain.back.MaterialBackApplyInfo; import com.bonus.material.clz.domain.back.MaterialBackApplyTotalInfo; +import com.bonus.material.clz.domain.lease.MaterialLeaseApplyInfo; import com.bonus.material.clz.domain.vo.MaterialMaCodeVo; import com.bonus.material.clz.domain.vo.back.MaterialBackMaCodeVo; import com.bonus.material.settlement.domain.SltAgreementInfo; @@ -246,5 +247,17 @@ public interface MaterialBackInfoMapper { MaterialBackApplyInfo getAgreementInfo(MaterialBackApplyInfo backApplyInfo); + /** + * 查询退料协议 + * @param agreement + * @return + */ List getAgreementList(MaterialBackApplyInfo agreement); + + /** + * 查询领料协议 + * @param leaseApplyInfo + * @return + */ + String getLeaseAgreement(MaterialLeaseApplyInfo leaseApplyInfo); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialLeaseInfoMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialLeaseInfoMapper.java index 15548428..dba18a49 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialLeaseInfoMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/mapper/MaterialLeaseInfoMapper.java @@ -5,6 +5,8 @@ import com.bonus.common.biz.domain.lease.LeaseOutDetails; import com.bonus.material.back.domain.vo.MaCodeVo; import com.bonus.material.basic.domain.BmAgreementInfo; import com.bonus.material.basic.domain.BmQrcodeInfo; +import com.bonus.material.clz.domain.TeamVo; +import com.bonus.material.clz.domain.direct.ClzDirectApplyDetails; import com.bonus.material.clz.domain.vo.MaterialMaCodeVo; import com.bonus.material.ma.domain.Type; import com.bonus.material.clz.domain.lease.LeaseApplyDetailsInfo; @@ -13,6 +15,7 @@ import com.bonus.material.clz.domain.vo.lease.LeaseTotalInfo; import com.bonus.material.clz.domain.lease.MaterialLeaseApplyDetails; import com.bonus.material.clz.domain.lease.MaterialLeaseApplyInfo; import com.bonus.common.biz.domain.lease.MaterialLeaseMaCodeDto; +import com.bonus.material.warningAnalysis.domain.UseMaintenanceWarningBean; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; @@ -404,6 +407,20 @@ public interface MaterialLeaseInfoMapper { */ MaterialLeaseApplyDetails getOutDetail(MaterialLeaseApplyDetails detail); + /** + * 添加站点领料详情数据 + * @param leaseApplyDetails + * @return + */ + int insertApplyDetails(MaterialLeaseApplyDetails leaseApplyDetails); + + /** + * 添加站点领料详情数据 + * @param clzDirectApplyDetails + * @return + */ + int insertOutDetails(ClzDirectApplyDetails clzDirectApplyDetails); + /** * 根据任务单号,查询领料工程等信息 * @param info @@ -417,4 +434,31 @@ public interface MaterialLeaseInfoMapper { * @return */ List getLeaseDataByCode(LeaseTotalInfo info); + + /** + * 查询退场未退的工器具信息 + * @return + */ + List selectBackApplyInfoList(); + + /** + * 根据工器具id查询退场未退的工器具信息 + * @param materialLeaseApplyDetails + * @return + */ + UseMaintenanceWarningBean getUserPhoneById(UseMaintenanceWarningBean materialLeaseApplyDetails); + + /** + * 根据i8工程id查询材料员信息 + * @param materialLeaseApplyDetails + * @return + */ + List getUserList(MaterialLeaseApplyDetails materialLeaseApplyDetails); + + /** + * 先根据班组名称和i8工程id查询班组是否退场 + * @param materialLeaseApplyDetails + * @return + */ + List getJcTeamInfo(MaterialLeaseApplyDetails materialLeaseApplyDetails); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/ClzDirectService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/ClzDirectService.java new file mode 100644 index 00000000..7d6b1b87 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/ClzDirectService.java @@ -0,0 +1,75 @@ +package com.bonus.material.clz.service; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.clz.domain.back.MaterialBackApplyInfo; +import com.bonus.material.clz.domain.direct.ClzDirectApplyDetails; +import com.bonus.material.clz.domain.direct.ClzDirectApplyInfo; +import com.bonus.material.clz.domain.direct.ClzDirectApplyInfoVo; +import com.bonus.material.ma.domain.DirectApplyExportInfo; +import com.bonus.material.ma.domain.DirectApplyInfo; +import com.bonus.material.settlement.domain.SltAgreementInfo; + +import java.util.List; + +/** + * @Author ma_sh + * @create 2025/6/25 13:27 + */ +public interface ClzDirectService { + + /** + * 新增直转申请 + * @param clzDirectApplyInfoVo + * @return + */ + AjaxResult add(ClzDirectApplyInfoVo clzDirectApplyInfoVo); + + /** + * 修改直转申请 + * @param clzDirectApplyInfoVo + * @return + */ + AjaxResult edit(ClzDirectApplyInfoVo clzDirectApplyInfoVo); + + /** + * 删除直转申请 + * @param directApplyInfo + * @return + */ + AjaxResult remove(ClzDirectApplyInfo directApplyInfo); + + /** + * 直转记录查询列表 + * @param directApplyInfo + * @return + */ + List getList(ClzDirectApplyInfo directApplyInfo); + + /** + * 查看详情 + * @param directApplyInfo + * @return + */ + AjaxResult getInfoById(ClzDirectApplyInfo directApplyInfo); + + /** + * 根据协议Id查询在用数据 + * @param bean + * @return + */ + List getUseData(MaterialBackApplyInfo bean); + + /** + * 站内直转审批 + * @param directApplyInfo + * @return + */ + AjaxResult updateDirectSysWorkflowRecordHistory(ClzDirectApplyInfo directApplyInfo); + + /** + * 在用三级设备类型 + * @param bean + * @return + */ + AjaxResult getUseThreeTree(MaterialBackApplyInfo bean); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/ClzDirectServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/ClzDirectServiceImpl.java new file mode 100644 index 00000000..c657df74 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/ClzDirectServiceImpl.java @@ -0,0 +1,1282 @@ +package com.bonus.material.clz.service.impl; + +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.bonus.common.biz.constant.MaterialConstants; +import com.bonus.common.biz.domain.TypeTreeBuild; +import com.bonus.common.biz.domain.TypeTreeNode; +import com.bonus.common.biz.domain.lease.LeaseApplyInfo; +import com.bonus.common.biz.domain.lease.LeaseOutDetails; +import com.bonus.common.biz.domain.lease.WorkApplyInfo; +import com.bonus.common.biz.domain.lease.WorkPeopleInfo; +import com.bonus.common.biz.enums.BackTaskStatusEnum; +import com.bonus.common.biz.enums.HttpCodeEnum; +import com.bonus.common.biz.enums.LeaseTaskStatusEnum; +import com.bonus.common.biz.enums.TmTaskTypeEnum; +import com.bonus.common.core.exception.ServiceException; +import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.back.domain.BackApplyInfo; +import com.bonus.material.basic.domain.BmAgreementInfo; +import com.bonus.material.basic.mapper.BmAgreementInfoMapper; +import com.bonus.material.clz.domain.BmTeam; +import com.bonus.material.clz.domain.back.MaterialBackApplyDetails; +import com.bonus.material.clz.domain.back.MaterialBackApplyInfo; +import com.bonus.material.clz.domain.direct.ClzDirectApplyDetails; +import com.bonus.material.clz.domain.direct.ClzDirectApplyInfo; +import com.bonus.material.clz.domain.direct.ClzDirectApplyInfoVo; +import com.bonus.material.clz.domain.direct.WorkflowEvent; +import com.bonus.material.clz.domain.lease.MaterialLeaseApplyDetails; +import com.bonus.material.clz.domain.lease.MaterialLeaseApplyInfo; +import com.bonus.material.clz.domain.vo.MaterialSltAgreementInfo; +import com.bonus.material.clz.mapper.*; +import com.bonus.material.clz.service.ClzDirectService; +import com.bonus.material.common.mapper.SelectMapper; +import com.bonus.material.lease.mapper.LeaseTaskMapper; +import com.bonus.material.ma.domain.DirectApplyDetails; +import com.bonus.material.ma.domain.DirectApplyInfo; +import com.bonus.material.ma.domain.DirectApplyUrl; +import com.bonus.material.ma.domain.Type; +import com.bonus.material.ma.mapper.TypeMapper; +import com.bonus.material.settlement.domain.SltAgreementInfo; +import com.bonus.material.task.domain.TmTask; +import com.bonus.material.task.domain.TmTaskAgreement; +import com.bonus.material.task.mapper.TmTaskAgreementMapper; +import com.bonus.material.task.mapper.TmTaskMapper; +import com.bonus.material.work.domain.SysWorkflowNode; +import com.bonus.material.work.domain.SysWorkflowRecord; +import com.bonus.material.work.domain.SysWorkflowRecordHistory; +import com.bonus.material.work.domain.SysWorkflowType; +import com.bonus.material.work.mapper.*; +import com.bonus.system.api.domain.SysUser; +import com.sun.org.apache.bcel.internal.generic.NEW; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.util.UriComponentsBuilder; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +import static com.bonus.common.biz.enums.TmTaskTypeEnum.TM_TASK_ZN_DIRECT; + +/** + * @Author ma_sh + * @create 2025/6/25 13:27 + */ +@Service +@Slf4j +public class ClzDirectServiceImpl implements ClzDirectService { + + @Resource + private ClzDirectMapper clzDirectMapper; + + @Resource + private SysWorkflowTypeMapper sysWorkflowTypeMapper; + + @Resource + private BmTeamMapper bmTeamMapper; + + @Resource + private BmAgreementInfoMapper bmAgreementInfoMapper; + + @Resource + private SysWorkflowRecordMapper sysWorkflowRecordMapper; + + @Resource + private SysWorkflowNodeMapper sysWorkflowNodeMapper; + + @Resource + private DirectAuditMapper directAuditMapper; + + @Resource + private SysWorkflowRecordHistoryMapper sysWorkflowRecordHistoryMapper; + + @Resource + private LeaseTaskMapper lMapper; + + @Resource + private MaterialBackInfoMapper materialBackInfoMapper; + + @Resource + private SelectMapper mapper; + + @Resource + private MaterialMachineMapper materialMachineMapper; + + @Resource + private TmTaskMapper tmTaskMapper; + + @Resource + private TmTaskAgreementMapper taskAgreementMapper; + + @Resource + private MaterialLeaseInfoMapper materialLeaseInfoMapper; + + @Resource + private TypeMapper typeMapper; + + /** + * 新增直转申请 + * + * @param clzDirectApplyInfoVo + * @return + */ + @Override + public AjaxResult add(ClzDirectApplyInfoVo clzDirectApplyInfoVo) { + String code = null; + String leaseAgreementId = null; + String backAgreementId = null; + String leaseMan = null; + Integer id = null; + if (clzDirectApplyInfoVo != null) { + if (clzDirectApplyInfoVo.getDirectApplyInfo() != null) { + ClzDirectApplyInfo clzDirectApplyInfo = clzDirectApplyInfoVo.getDirectApplyInfo(); + if (StringUtils.isBlank(clzDirectApplyInfo.getLeaseAgreementIds())) { + // 先根据班组名称查询此班组是否存在 + BmTeam tbTeam = new BmTeam(); + tbTeam.setTeamName(clzDirectApplyInfo.getLeaseTeamName()); + tbTeam.setRelName(StringUtils.isNotBlank(clzDirectApplyInfo.getRelName()) ? clzDirectApplyInfo.getRelName() : null); + tbTeam.setIdCard(StringUtils.isNotBlank(clzDirectApplyInfo.getTeamLeaderIdCard()) ? clzDirectApplyInfo.getTeamLeaderIdCard() : null); + tbTeam.setProjectId(clzDirectApplyInfo.getProjectId()); + tbTeam.setRelPhone(StringUtils.isNotBlank(clzDirectApplyInfo.getRelPhone()) ? clzDirectApplyInfo.getRelPhone() : null); + // 班组类型固定传值 + tbTeam.setTypeId(1731L); + BmTeam bmTeam = bmTeamMapper.selectByName(tbTeam); + BmAgreementInfo bmAgreementInfo = new BmAgreementInfo(); + bmAgreementInfo.setProjectId(Long.parseLong(clzDirectApplyInfo.getLeaseProId())); + bmAgreementInfo.setCreateTime(DateUtils.getNowDate()); + bmAgreementInfo.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + bmAgreementInfo.setSignTime(DateUtils.getNowDate()); + bmAgreementInfo.setAgreementCode(getAgreementCode()); + if (bmTeam == null) { + // 新增班组 + tbTeam.setCreateUser(SecurityUtils.getLoginUser().getUserid().toString()); + int result = bmTeamMapper.insert(tbTeam); + if (result <= 0) { + return AjaxResult.error(HttpCodeEnum.UPDATE_TO_DATABASE.getCode(), HttpCodeEnum.UPDATE_TO_DATABASE.getMsg()); + } + bmAgreementInfo.setUnitId(tbTeam.getId()); + } else { + bmAgreementInfo.setUnitId(bmTeam.getId()); + bmTeamMapper.update(tbTeam); + } + // 先根据班组和工程id查询,若存在则直接返回,不存在则新增 + BmAgreementInfo info = bmAgreementInfoMapper.queryByTeamIdAndProjectIdCl(bmAgreementInfo); + if (info != null) { + leaseAgreementId = info.getAgreementId().toString(); + } else { + int count = bmAgreementInfoMapper.insertBmAgreementInfoClz(bmAgreementInfo); + if (count > 0) { + leaseAgreementId = bmAgreementInfo.getAgreementId().toString(); + } else { + return AjaxResult.error("新增bm_agreement_info表失败"); + } + } + } else { + leaseAgreementId = clzDirectApplyInfo.getLeaseAgreementIds(); + } + backAgreementId = clzDirectApplyInfo.getBackAgreementIds(); + // backAgreementId和leaseAgreementId可能存在多个,用逗号分割,判断这2个当中有没有相同数据 + Set leaseIdSet = new HashSet<>(Arrays.asList(leaseAgreementId.split(","))); + Set backIdSet = new HashSet<>(Arrays.asList(backAgreementId.split(","))); + boolean hasCommonId = false; + for (String leaseId : leaseIdSet) { + if (backIdSet.contains(leaseId)) { + hasCommonId = true; + break; + } + } + if (hasCommonId) { + return AjaxResult.error("申请失败,不能转入同工程同班组"); + } + code = genderLeaseCode(); + clzDirectApplyInfo.setCode(code); + clzDirectApplyInfo.setCreateTime(new Date()); + clzDirectApplyInfo.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); + // 分别获取leaseAgreementId和backAgreementId的第一个协议id + String leaseAgreementIdFirst = leaseAgreementId.split(",")[0]; + String backAgreementIdFirst = backAgreementId.split(",")[0]; + leaseMan = clzDirectApplyInfo.getLeaseMan(); + clzDirectApplyInfo.setLeaseAgreementIds(leaseAgreementIdFirst); + clzDirectApplyInfo.setBackAgreementIds(backAgreementIdFirst); + List urls = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(clzDirectApplyInfo.getDirUrls())) { + List dirUrls = clzDirectApplyInfo.getDirUrls(); + for (DirectApplyUrl dirUrl : dirUrls) { + urls.add(dirUrl.getUrl()); + } + //将urls所有内容用逗号拼接 + clzDirectApplyInfo.setDirUrl(String.join(",", urls)); + } + if (clzDirectApplyInfo.getIsSubmit() != null && clzDirectApplyInfo.getIsSubmit() == 0) { + // 待提交 + clzDirectApplyInfo.setStatus(4); + } + if (clzDirectApplyInfo.getIsSubmit() != null && clzDirectApplyInfo.getIsSubmit() == 1) { + // 待审核 + clzDirectApplyInfo.setStatus(0); + } + int i = clzDirectMapper.saveDirectApplyInfo(clzDirectApplyInfo); + if (i < 0) { + return AjaxResult.error("保存失败"); + } + id = clzDirectApplyInfo.getId(); + } + + if (CollectionUtils.isNotEmpty(clzDirectApplyInfoVo.getDirectApplyInfoDetails())) { + List directApplyDetails = clzDirectApplyInfoVo.getDirectApplyInfoDetails(); + // 将id塞到directApplyDetails的directId字段 + Integer finalId = id; + directApplyDetails.forEach(directApplyDetail -> directApplyDetail.setDirectId(finalId)); + int i = clzDirectMapper.saveDirectApplyDetails(directApplyDetails); + if (i < 0) { + return AjaxResult.error("保存失败"); + } + } + if (clzDirectApplyInfoVo.getDirectApplyInfo().getIsSubmit() != null && clzDirectApplyInfoVo.getDirectApplyInfo().getIsSubmit() == 1) { + if (id != null && StringUtils.isNotBlank(leaseAgreementId) && StringUtils.isNotBlank(backAgreementId)) { + addSysWorkflowRecord(new WorkflowEvent(id, code, TM_TASK_ZN_DIRECT.getTaskTypeId(), clzDirectApplyInfoVo.getDirectApplyInfo().getBackProName(), Integer.parseInt(backAgreementId), leaseMan, clzDirectApplyInfoVo.getDirectApplyInfo().getBackTeamId())); + } + } + } + return AjaxResult.success("保存成功"); + } + + /** + * 获取直转单号 + * + * @return + */ + private String genderLeaseCode() { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); + Date date = new Date(); + String format = simpleDateFormat.format(date); + List list = clzDirectMapper.getListAll(); + return "ZNZZ" + format + "-" + list.size() + 1; + } + + /** + * 获取协议编号 + * + * @return + */ + private String getAgreementCode() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date nowDate = DateUtils.getNowDate(); + String format = dateFormat.format(nowDate); + String result = format.replace("-", ""); + int num = bmAgreementInfoMapper.selectNumByMonthClz(nowDate); + return MaterialConstants.AGREEMENT_PREFIX + result + String.format("-%03d", num + 1); + } + + /** + * 修改直转申请 + * + * @param clzDirectApplyInfoVo + * @return + */ + @Override + public AjaxResult edit(ClzDirectApplyInfoVo clzDirectApplyInfoVo) { + String leaseAgreementId = null; + String backAgreementId = null; + if (clzDirectApplyInfoVo != null) { + if (clzDirectApplyInfoVo.getDirectApplyInfo() != null) { + ClzDirectApplyInfo clzDirectApplyInfo = clzDirectApplyInfoVo.getDirectApplyInfo(); + if (StringUtils.isBlank(clzDirectApplyInfo.getLeaseAgreementIds())) { + // 先根据班组名称查询此班组是否存在 + BmTeam tbTeam = new BmTeam(); + tbTeam.setTeamName(clzDirectApplyInfo.getLeaseTeamName()); + tbTeam.setRelName(StringUtils.isNotBlank(clzDirectApplyInfo.getRelName()) ? clzDirectApplyInfo.getRelName() : null); + tbTeam.setIdCard(StringUtils.isNotBlank(clzDirectApplyInfo.getTeamLeaderIdCard()) ? clzDirectApplyInfo.getTeamLeaderIdCard() : null); + tbTeam.setProjectId(clzDirectApplyInfo.getProjectId()); + tbTeam.setRelPhone(StringUtils.isNotBlank(clzDirectApplyInfo.getRelPhone()) ? clzDirectApplyInfo.getRelPhone() : null); + // 班组类型固定传值 + tbTeam.setTypeId(1731L); + BmTeam bmTeam = bmTeamMapper.selectByName(tbTeam); + BmAgreementInfo bmAgreementInfo = new BmAgreementInfo(); + bmAgreementInfo.setProjectId(Long.parseLong(clzDirectApplyInfo.getLeaseProId())); + bmAgreementInfo.setCreateTime(DateUtils.getNowDate()); + bmAgreementInfo.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + bmAgreementInfo.setSignTime(DateUtils.getNowDate()); + bmAgreementInfo.setAgreementCode(getAgreementCode()); + if (bmTeam == null) { + // 新增班组 + tbTeam.setCreateUser(SecurityUtils.getLoginUser().getUserid().toString()); + int result = bmTeamMapper.insert(tbTeam); + if (result <= 0) { + return AjaxResult.error(HttpCodeEnum.UPDATE_TO_DATABASE.getCode(), HttpCodeEnum.UPDATE_TO_DATABASE.getMsg()); + } + bmAgreementInfo.setUnitId(tbTeam.getId()); + } else { + bmAgreementInfo.setUnitId(bmTeam.getId()); + bmTeamMapper.update(tbTeam); + } + // 先根据班组和工程id查询,若存在则直接返回,不存在则新增 + BmAgreementInfo info = bmAgreementInfoMapper.queryByTeamIdAndProjectIdCl(bmAgreementInfo); + if (info != null) { + leaseAgreementId = info.getAgreementId().toString(); + } else { + int count = bmAgreementInfoMapper.insertBmAgreementInfoClz(bmAgreementInfo); + if (count > 0) { + leaseAgreementId = bmAgreementInfo.getAgreementId().toString(); + } else { + return AjaxResult.error("新增bm_agreement_info表失败"); + } + } + } else { + leaseAgreementId = clzDirectApplyInfo.getLeaseAgreementIds(); + } + backAgreementId = clzDirectApplyInfo.getBackAgreementIds(); + // backAgreementId和leaseAgreementId可能存在多个,用逗号分割,判断这2个当中有没有相同数据 + Set leaseIdSet = new HashSet<>(Arrays.asList(leaseAgreementId.split(","))); + Set backIdSet = new HashSet<>(Arrays.asList(backAgreementId.split(","))); + boolean hasCommonId = false; + for (String leaseId : leaseIdSet) { + if (backIdSet.contains(leaseId)) { + hasCommonId = true; + break; + } + } + if (hasCommonId) { + return AjaxResult.error("申请失败,不能转入同工程同班组"); + } + clzDirectApplyInfo.setCreateTime(new Date()); + clzDirectApplyInfo.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName()); + // 分别获取leaseAgreementId和backAgreementId的第一个协议id + String leaseAgreementIdFirst = leaseAgreementId.split(",")[0]; + String backAgreementIdFirst = backAgreementId.split(",")[0]; + clzDirectApplyInfo.setLeaseAgreementIds(leaseAgreementIdFirst); + clzDirectApplyInfo.setBackAgreementIds(backAgreementIdFirst); + List urls = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(clzDirectApplyInfo.getDirUrls())) { + List dirUrls = clzDirectApplyInfo.getDirUrls(); + for (DirectApplyUrl dirUrl : dirUrls) { + urls.add(dirUrl.getUrl()); + } + //将urls所有内容用逗号拼接 + clzDirectApplyInfo.setDirUrl(String.join(",", urls)); + } + // 修改info表 + if (clzDirectApplyInfo.getIsSubmit() != null && clzDirectApplyInfo.getIsSubmit() == 0) { + // 待提交 + clzDirectApplyInfo.setStatus(4); + } + if (clzDirectApplyInfo.getIsSubmit() != null && clzDirectApplyInfo.getIsSubmit() == 1) { + // 待审核 + clzDirectApplyInfo.setStatus(0); + } + int i = clzDirectMapper.updateDirectApplyInfo(clzDirectApplyInfo); + if (i < 0) { + return AjaxResult.error("修改主表失败,请联系管理员"); + } + // 删除详情表内容 + i = clzDirectMapper.deleteDirectApplyDetails(clzDirectApplyInfo.getId()); + if (i < 0) { + return AjaxResult.error("删除详情表失败,请联系管理员"); + } + } + + if (CollectionUtils.isNotEmpty(clzDirectApplyInfoVo.getDirectApplyInfoDetails())) { + List directApplyDetails = clzDirectApplyInfoVo.getDirectApplyInfoDetails(); + // 将id塞到directApplyDetails的directId字段 + Integer id = clzDirectApplyInfoVo.getDirectApplyInfo().getId(); + directApplyDetails.forEach(directApplyDetail -> directApplyDetail.setDirectId(id)); + int i = clzDirectMapper.saveDirectApplyDetails(directApplyDetails); + if (i < 0) { + return AjaxResult.error("修改失败,请联系管理员"); + } + } + + if (clzDirectApplyInfoVo.getDirectApplyInfo().getIsSubmit() != null && clzDirectApplyInfoVo.getDirectApplyInfo().getIsSubmit() == 1) { + if (clzDirectApplyInfoVo.getDirectApplyInfo().getId() != null && StringUtils.isNotBlank(leaseAgreementId) && StringUtils.isNotBlank(backAgreementId)) { + updateSysWorkflowRecord(new WorkflowEvent(clzDirectApplyInfoVo.getDirectApplyInfo().getId(), clzDirectApplyInfoVo.getDirectApplyInfo().getCode(), TM_TASK_ZN_DIRECT.getTaskTypeId(), clzDirectApplyInfoVo.getDirectApplyInfo().getBackProName(), Integer.parseInt(backAgreementId), null, clzDirectApplyInfoVo.getDirectApplyInfo().getBackTeamId())); + } + } + } + return AjaxResult.success("修改成功"); + } + + /** + * 修改直转申请 + * + * @param event + */ + private void updateSysWorkflowRecord(WorkflowEvent event) { + SysUser sysUser = SecurityUtils.getLoginUser().getSysUser(); + int count = 0; + //获取审批流id + SysWorkflowType sysWorkflowType = new SysWorkflowType(); + sysWorkflowType.setTaskType(event.getTaskType()); + sysWorkflowType.setIsEnable(1); + List sysWorkflowTypeList = sysWorkflowTypeMapper.selectSysWorkflowTypeList(sysWorkflowType); + if (sysWorkflowTypeList.isEmpty()) { + throw new ServiceException("新增任务审批记录失败,请创建审核流程"); + } + SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord(); + if (sysWorkflowTypeList.size() == 1) { + // 如果该任务类型配置了一个审批流,则直接使用 + sysWorkflowType = sysWorkflowTypeList.get(0); + // 先根据id查询该数据是否已经存在 + SysWorkflowRecord info = sysWorkflowRecordMapper.getWorkflowRecordHistory(sysWorkflowType.getId()); + if (info == null) { + sysWorkflowRecord = new SysWorkflowRecord(); + sysWorkflowRecord.setWorkflowId(sysWorkflowType.getId()); + sysWorkflowRecord.setTaskId(event.getTaskId()); + sysWorkflowRecord.setTaskType(event.getTaskType()); + sysWorkflowRecord.setTaskCode(event.getTaskCode()); + //创建审批任务 + count = sysWorkflowRecordMapper.addSysWorkflowRecord(sysWorkflowRecord); + if (0 == count) { + throw new RuntimeException("创建审批任务失败!"); + } + } else { + sysWorkflowRecord = info; + } + } + // 获取新创建的ID + int newId = sysWorkflowRecord.getId(); + //获取当前审核流下的节点 + SysWorkflowNode sysWorkflowNode = new SysWorkflowNode(); + sysWorkflowNode.setTypeId(sysWorkflowType.getId()); + List sysWorkflowNodeList = sysWorkflowNodeMapper.selectSysWorkflowNodeList(sysWorkflowNode); + + // 创建审核记录 + SysWorkflowRecordHistory sysWorkflowRecordHistory = new SysWorkflowRecordHistory(); + sysWorkflowRecordHistory.setRecordId(sysWorkflowRecord.getId()); + sysWorkflowRecordHistory.setNodeId(sysWorkflowNodeList.get(0).getId()); + sysWorkflowRecordHistory.setNextNodeId(sysWorkflowNodeList.get(1).getId()); + sysWorkflowRecordHistory.setIsAccept(1); + sysWorkflowRecordHistory.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); + sysWorkflowRecordHistory.setCreateTime(DateUtils.getNowDate()); + //根据单位id获取退料班组长身份证号 + List userList = directAuditMapper.getProjectId(event.getBackTeamId()); + if (CollectionUtils.isNotEmpty(userList)) { + String userIds = userList.stream().map(WorkPeopleInfo::getUserId).map(String::valueOf).collect(Collectors.joining(",")); + sysWorkflowRecordHistory.setDirectUserIds(userIds); + } else { + directAuditMapper.deleteWorkflowRecord(newId); + log.info("退料班组的班组长账号不存在"); + } + // 先根据id查询该数据是否已经存在 + SysWorkflowRecordHistory info = sysWorkflowRecordHistoryMapper.getHistoryInfo(newId); + if (info != null) { + // 将审核记录删除,重新添加 + sysWorkflowRecordHistoryMapper.deleteSysWorkflowRecordHistory(newId); + } + sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(sysWorkflowRecordHistory); + if (count > 0 && CollectionUtils.isNotEmpty(userList)) { + // 先根据newId查询sys_information表信息 + WorkApplyInfo workApplyInfo = sysWorkflowRecordHistoryMapper.getSysInformation(newId); + //先根据newId把sys_information和sys_information_people表数据清除 + sysWorkflowRecordHistoryMapper.deleteSysInformation(newId); + // 根据workApplyInfo数据删除sys_information_people表数据 + if (workApplyInfo != null) { + sysWorkflowRecordHistoryMapper.deleteInformationPeople(workApplyInfo.getId()); + } + createWorkOrderAndPeople(sysUser, event, Long.valueOf(sysWorkflowRecord.getTaskId()), newId, sysWorkflowRecordHistory.getNodeId(), userList); + } + } + + /** + * 删除直转申请 + * + * @param directApplyInfo + * @return + */ + @Override + public AjaxResult remove(ClzDirectApplyInfo directApplyInfo) { + // 删除主表 + int i = clzDirectMapper.deleteDirectApplyInfo(directApplyInfo); + // 删除详情表 + i += clzDirectMapper.deleteDirectApplyDetails(directApplyInfo.getId()); + return i > 0 ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败"); + } + + /** + * 查询列表 + * + * @param directApplyInfo + * @return + */ + @Override + public List getList(ClzDirectApplyInfo directApplyInfo) { + Set userRoles = SecurityUtils.getLoginUser().getRoles(); + String username = SecurityUtils.getLoginUser().getUsername(); + BmTeam teamData = null; + // 检查用户是否具有特殊角色 + boolean hasSpecialRole = hasSpecialRole(userRoles); + if (!hasSpecialRole) { + // 根据用户名判断用户是否为班组长 + teamData = materialMachineMapper.getTeamData(username); + if (teamData == null) { + // 根据用户名查询项目部信息 + List departId = mapper.getDepartId(username); + // 根据项目部id查询工程信息 + List projectIdList = mapper.getProjectId(departId); + if (!org.springframework.util.CollectionUtils.isEmpty(projectIdList)) { + directApplyInfo.setProjectIdList(projectIdList); + } + // 部门查询赋值 + extractedDept(directApplyInfo); + } + } + + List list = clzDirectMapper.getList(directApplyInfo); + if (!CollectionUtils.isEmpty(list) && teamData != null) { + list = list.stream() + .filter(item -> + (StringUtils.isNotBlank(item.getBackIdCard()) && Objects.equals(username, item.getBackIdCard())) + || (StringUtils.isNotBlank(item.getLeaseIdCard()) && Objects.equals(username, item.getLeaseIdCard())) + ) + .collect(Collectors.toList()); + } + return list; + } + + /** + * 部门查询赋值 + * @param directApplyInfo + */ + private void extractedDept(ClzDirectApplyInfo directApplyInfo) { + String deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId().toString(); + Set targetUnits = new HashSet<>(Arrays.asList( + "101", "102", "309", "327", "330", "333", "337", "338", + "339", "340", "341", "342", "344", "345", "346", "347", + "348", "349" + )); + if (targetUnits.contains(deptId)) { + directApplyInfo.setImpUnit(deptId); + } else { + //判断祖籍是否包含分公司 + String ancestors = mapper.getAncestors(deptId); + if (ancestors != null && !ancestors.isEmpty()) { + // 将ancestors转换为集合 + String[] parts = ancestors.split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + // Check if the trimmed part is in our target set + if (targetUnits.contains(trimmedPart)) { + directApplyInfo.setImpUnit(trimmedPart); + break; + } + } + } + } + } + + /** + * 检查用户是否具有特殊角色 + * @param userRoles + * @return + */ + private boolean hasSpecialRole(Set userRoles) { + if (userRoles == null) { + return false; + } + List allowedRoles = Collections.singletonList("clzcx"); + return allowedRoles.stream().anyMatch(userRoles::contains); + } + + /** + * 查看详情 + * + * @param directApplyInfo + * @return + */ + @Override + public AjaxResult getInfoById(ClzDirectApplyInfo directApplyInfo) { + ClzDirectApplyInfoVo clzDirectApplyInfoVo = new ClzDirectApplyInfoVo(); + // 先查询info表信息 + ClzDirectApplyInfo info = clzDirectMapper.getInfoById(directApplyInfo); + if (StringUtils.isNotBlank(info.getDirUrl())) { + //用逗号分割放入数组 + String[] split = info.getDirUrl().split(","); + List list1 = new ArrayList<>(); + for (String s : split) { + list1.add(new DirectApplyUrl(s)); + } + info.setDirUrls(list1); + } + clzDirectApplyInfoVo.setDirectApplyInfo(info); + // 查询详情表信息 + List details = clzDirectMapper.getDetailsById(directApplyInfo.getId()); + clzDirectApplyInfoVo.setDirectApplyInfoDetails(details); + return AjaxResult.success(clzDirectApplyInfoVo); + } + + /** + * 根据协议Id查询在用数据 + * + * @param bean + * @return + */ + @Override + public List getUseData(MaterialBackApplyInfo bean) { + if (CollectionUtils.isEmpty(bean.getAgreementIds())) { + return new ArrayList<>(); + } + return clzDirectMapper.getUseData(bean); + } + + /** + * 站内直转审批 + * + * @param directApplyInfo + * @return + */ + @Override + public AjaxResult updateDirectSysWorkflowRecordHistory(ClzDirectApplyInfo directApplyInfo) { + Integer isAccept = directApplyInfo.getIsAccept(); + // 考虑工单直转,参数只有一个id,故从后台查询详细数据 + directApplyInfo = clzDirectMapper.getInfoDetails(directApplyInfo); + directApplyInfo.setIsAccept(isAccept); + SysUser sysUser = SecurityUtils.getLoginUser().getSysUser(); + Long userId = sysUser.getUserId(); + Integer taskId = directApplyInfo.getId(); + String recordCode = directApplyInfo.getCode(); + Integer nextNodeId = directApplyInfo.getNextNodeId(); + Integer nodeId = directApplyInfo.getNodeId(); + directApplyInfo.setCreateBy(userId.toString()); + if (directApplyInfo.getIsAccept() == null) { + throw new ServiceException("请选择是否接受审批"); + } + + // 查询出【当前任务所属审批流】的所有节点 + List sysWorkflowNodeList = getWorkflowNodes(directApplyInfo); + if (directApplyInfo.getIsAccept() == 1) { + // 处理审批通过✅ + handleDirectApproval(sysWorkflowNodeList, directApplyInfo, sysUser, taskId, recordCode, nextNodeId, nodeId); + } else { + // 处理审核驳回❌ + handleDirectReject(sysWorkflowNodeList,directApplyInfo, taskId); + } + return AjaxResult.success("操作成功"); + } + + /** + * 在用三级设备类型 + * + * @param bean + * @return + */ + @Override + public AjaxResult getUseThreeTree(MaterialBackApplyInfo bean) { + List groupList = new ArrayList<>(); + List list = new ArrayList<>(); + List listL4 = new ArrayList<>(); + List listL3 = new ArrayList<>(); + List listL21 = new ArrayList<>(); + try { + // 先查第四层类型 + listL4 = materialBackInfoMapper.getUseTypeTreeL4(bean); + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(listL4)) { + List list4ParentIds = listL4.stream().map(TypeTreeNode::getParentId).collect(Collectors.toList()); + // 根据第四层parentId 查第三层类型 + listL3 = mapper.getUseTypeTreeL3(list4ParentIds); + List list3ParentIds = listL3.stream().map(TypeTreeNode::getParentId).collect(Collectors.toList()); + // 根据第三层parentId 查第1.2层类型 + listL21 = mapper.getUseTypeTreeL21(list3ParentIds); + list.addAll(listL3); + list.addAll(listL21); + } + if (CollectionUtils.isNotEmpty(list)) { + // 创建树形结构(数据集合作为参数) + TypeTreeBuild treeBuild = new TypeTreeBuild(list); + // 原查询结果转换树形结构 + groupList = treeBuild.buildTree(); + } + } catch (Exception e) { + AjaxResult.error("类型树-查询失败", e); + } + return AjaxResult.success(groupList); + } + + /** + * 处理审批通过 + * + * @param sysWorkflowNodeList + * @param directApplyInfo + * @param sysUser + * @param taskId + * @param recordCode + * @param nextNodeId + * @param nodeId + */ + private void handleDirectApproval(List sysWorkflowNodeList, ClzDirectApplyInfo directApplyInfo, SysUser sysUser, Integer taskId, String recordCode, Integer nextNodeId, Integer nodeId) { + boolean found = false; + List userList = new ArrayList<>(); + for (int i = 0; i < sysWorkflowNodeList.size(); i++) { + // 判断列表中哪个节点是当前审批的节点,如果不是审批的节点不处理 + if (directApplyInfo.getNextNodeId().equals(sysWorkflowNodeList.get(i).getId())) { + log.info("-------------进入到了当前审批的节点-------------"); + //插入history表中 + SysWorkflowRecordHistory history = new SysWorkflowRecordHistory(); + history.setNodeId(directApplyInfo.getNextNodeId()); + SysWorkflowRecordHistory sysWorkflowRecordHistory = new SysWorkflowRecordHistory(); + sysWorkflowRecordHistory.setRecordId(directApplyInfo.getRecordId()); + sysWorkflowRecordHistory.setNodeId(nextNodeId); + if (sysWorkflowNodeList.size() - 1 != i) { + history.setNextNodeId(sysWorkflowNodeList.get(i + 1).getId()); + sysWorkflowNodeList.get(i).setNextNodeId(sysWorkflowNodeList.get(i + 1).getId()); + sysWorkflowNodeList.get(i).setNextRoleIds(sysWorkflowNodeList.get(i + 1).getRoleIds()); + } else { + history.setNextNodeId(null); + nextNodeId = null; + sysWorkflowNodeList.get(i).setNextNodeId(null); + sysWorkflowNodeList.get(i).setNextRoleIds(null); + } + //根据领料单位id获取退料班组长身份证号 + if (history.getNextNodeId() != null && history.getNextNodeId() == 43) { + userList = directAuditMapper.getProjectId(directApplyInfo.getLeaseTeamId()); + } + if (history.getNextNodeId() != null && history.getNextNodeId() == 44) { + //根据project_id获取external_id + String externalId = directAuditMapper.getExternalId(Integer.parseInt(directApplyInfo.getLeaseProId())); + if (externalId != null && !externalId.isEmpty()) { + //获取项目经理id + String leaderId = directAuditMapper.getDeptId(externalId); + //获取项目经理账号 + String leaderAccount = directAuditMapper.getUserNameById(leaderId); + if (leaderAccount != null && !leaderAccount.isEmpty()) { + userList = directAuditMapper.getUserIdByUserName(leaderAccount); + } + } + } + String userIds = userList.stream().map(WorkPeopleInfo::getUserId).map(String::valueOf).collect(Collectors.joining(",")); + history.setDirectUserIds(userIds); + history.setRemark(directApplyInfo.getRemark()); + history.setRecordId(directApplyInfo.getRecordId()); + history.setIsAccept(directApplyInfo.getIsAccept()); + history.setCreateBy(sysUser.getUserId().toString()); + sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(history); + + //获取当前node的directUserIds + String userIdsNow = sysWorkflowRecordHistoryMapper.getNowUserIds(sysWorkflowRecordHistory); + // 判断当前用户是否是当前节点的配置用户 + if (StringUtils.isNotBlank(userIdsNow)) { + if (userIdsNow.contains(sysUser.getUserId().toString())) { + log.info("-------------✅通过校验,当前用户是该节点审批人员,进行更新任务信息-------------"); + // 根据任务ID 更新审批流状态 + updateWorkflowStatus(taskId, 1); + found = true; + break; + } else { + throw new ServiceException("您不是当前节点配置的审批人员,无法进行操作!!"); + } + } else { + throw new ServiceException("您不是当前节点配置的审批人员,无法进行操作!!"); + } + } + } + if (!found) { + return; + } + try { + log.info("-------------节点更新工单信息✔-------------"); + // 修改工单信息 + updateWorkOrder(directApplyInfo.getRecordId(), sysUser.getUserName()); + // 如果下个节点⬇存在的话,那么就创建下个节点⬇的工单信息 + if (nextNodeId != null && CollectionUtils.isNotEmpty(userList)) { + createWorkOrderAndPeopleDirect(sysUser, directApplyInfo.getBackProName(), taskId, recordCode, directApplyInfo.getRecordId(), nextNodeId, userList); + } else { + int result = 0; + String createBy = SecurityUtils.getLoginUser().getUsername(); + //以下走退料、领料方法 + int thisMonthMaxOrder = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_MATERIAL_BACK.getTaskTypeId()); + String code = genderTaskCode(thisMonthMaxOrder); + ClzDirectApplyInfo info = clzDirectMapper.getInfoById(directApplyInfo); + TmTask tmTask = new TmTask(null, TmTaskTypeEnum.TM_TASK_MATERIAL_BACK.getTaskTypeId(), + BackTaskStatusEnum.BACK_TASK_IN_FINISHED.getStatus(), + null, thisMonthMaxOrder + 1, code); + tmTask.setCreateTime(DateUtils.getNowDate()); + tmTask.setCreateBy(createBy); + MaterialBackApplyInfo backApplyInfo = new MaterialBackApplyInfo(); + backApplyInfo.setCode(code); + backApplyInfo.setCreateBy(createBy); + backApplyInfo.setCreateTime(DateUtils.getNowDate()); + backApplyInfo.setProId(Long.parseLong(directApplyInfo.getBackProId())); + backApplyInfo.setTeamId(Long.parseLong(directApplyInfo.getBackTeamId())); + // 保存退料信息到 tm_task 表中 + result += tmTaskMapper.insertTmTask(tmTask); + if (info != null) { + backApplyInfo.setBackPerson(StringUtils.isNotBlank(info.getBackMan()) ? info.getBackMan() : ""); + backApplyInfo.setPhone(StringUtils.isNotBlank(info.getBackPhone()) ? info.getBackPhone() : ""); + backApplyInfo.setDirectId(Long.valueOf(info.getId())); + } + List detailById = clzDirectMapper.getDetailsById(directApplyInfo.getId()); + List list = mapper.selectDetails(directApplyInfo); + + backApplyInfo.setCreateBy(SecurityUtils.getUsername()); + backApplyInfo.setCreateTime(DateUtils.getNowDate()); + List agreementList = materialBackInfoMapper.getAgreementList(backApplyInfo); + if (result > 0) { + // 新增退料表clz_back_apply_info信息 + TmTaskAgreement tmTaskAgreement = new TmTaskAgreement(tmTask.getTaskId(), Long.valueOf(agreementList.get(0))); + tmTaskAgreement.setCreateTime(DateUtils.getNowDate()); + tmTaskAgreement.setCreateBy(createBy); + // 增加任务和协议关联表数据 + taskAgreementMapper.insertTmTaskAgreement(tmTaskAgreement); + backApplyInfo.setTaskId(tmTask.getTaskId()); + backApplyInfo.setBackStyle("1"); + result += materialBackInfoMapper.insertBackApplyInfo(backApplyInfo); + // 保存退料详情数据 clz_back_apply_details + result = getBackDetailsResult(backApplyInfo, list, result); + // 保存退料详情数据 clz_back_check_details + extractedCheckDetails(backApplyInfo, detailById, result); + } + // 审核通过,处理转入单位领料逻辑 + int maxOrderByDate = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_MATERIAL_LEASE.getTaskTypeId()); + String taskCode = genderLeaseTaskCode(maxOrderByDate); + TmTask tmTask1 = new TmTask(null, TmTaskTypeEnum.TM_TASK_LEASE.getTaskTypeId(), + LeaseTaskStatusEnum.LEASE_TASK_FINISHED.getStatus(),null + ,maxOrderByDate + 1, taskCode); + tmTask1.setCreateTime(DateUtils.getNowDate()); + tmTask1.setCreateBy(SecurityUtils.getUsername()); + tmTaskMapper.insertTmTask(tmTask1); + MaterialLeaseApplyInfo leaseApplyInfo = new MaterialLeaseApplyInfo(); + leaseApplyInfo.setProId(Long.parseLong(directApplyInfo.getLeaseProId())); + leaseApplyInfo.setTeamId(directApplyInfo.getLeaseTeamId()); + String leaseAgreementId = materialBackInfoMapper.getLeaseAgreement(leaseApplyInfo); + TmTaskAgreement tmTaskAgreement = new TmTaskAgreement(tmTask1.getTaskId(), Long.valueOf(leaseAgreementId)); + tmTaskAgreement.setCreateTime(DateUtils.getNowDate()); + tmTaskAgreement.setCreateBy(SecurityUtils.getUsername()); + taskAgreementMapper.insertTmTaskAgreement(tmTaskAgreement); + MaterialLeaseApplyInfo applyInfo = new MaterialLeaseApplyInfo(); + applyInfo.setCode(taskCode); + applyInfo.setTaskId(tmTask1.getTaskId()); + if (info != null) { + applyInfo.setLeasePerson(StringUtils.isNotBlank(info.getLeaseMan()) ? info.getLeaseMan() : ""); + applyInfo.setPhone(StringUtils.isNotBlank(info.getLeasePhone()) ? info.getLeasePhone() : ""); + applyInfo.setDirectId(Long.valueOf(info.getId())); + } + applyInfo.setCreateBy(SecurityUtils.getUsername()); + applyInfo.setCreateTime(DateUtils.getNowDate()); + int count = materialLeaseInfoMapper.insertLeaseApplyInfo(applyInfo); + if (count > 0) { + // 新增clz_lease_apply_details表数据 + count = getLeaseApplyCount(list, applyInfo, count); + // 插入 clz_lease_out_details表数据 + if (count > 0) { + extracted(leaseAgreementId, detailById, applyInfo); + } + } + // 更新任务状态为已完成 + updateWorkflowStatus(directApplyInfo.getId(), 2); + } + log.info("-------------节点更新工单信息结束-------------"); + } catch (Exception e) { + System.err.println("更新工单信息失败:" + e.getMessage()); + log.error("更新工单信息失败: {}", e.getMessage(), e); + } + } + + /** + * 插入 clz_lease_out_details表数据 + * @param leaseAgreementId + * @param detailById + * @param applyInfo + */ + private void extracted(String leaseAgreementId, List detailById, MaterialLeaseApplyInfo applyInfo) { + for (ClzDirectApplyDetails clzDirectApplyDetails : detailById) { + clzDirectApplyDetails.setParentId(applyInfo.getId()); + clzDirectApplyDetails.setOutNum(clzDirectApplyDetails.getDirectNum()); + clzDirectApplyDetails.setCreateBy(SecurityUtils.getUsername()); + clzDirectApplyDetails.setIsFinished(1); + clzDirectApplyDetails.setOutType(4); + clzDirectApplyDetails.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName()); + clzDirectApplyDetails.setIsFinished(1); + materialLeaseInfoMapper.insertOutDetails(clzDirectApplyDetails); + LeaseOutDetails record = new LeaseOutDetails(); + record.setParentId(clzDirectApplyDetails.getParentId()); + record.setTypeId(Long.valueOf(clzDirectApplyDetails.getTypeId())); + MaterialSltAgreementInfo sltAgreementInfo = materialLeaseInfoMapper.getSltAgreementInfo(record); + if (sltAgreementInfo != null) { + BigDecimal num = sltAgreementInfo.getNum(); + BigDecimal outNum = clzDirectApplyDetails.getDirectNum(); + sltAgreementInfo.setNum(num.add(outNum)); + materialLeaseInfoMapper.updSltInfo(sltAgreementInfo); + record.setAgreementId(sltAgreementInfo.getAgreementId()); + } else { + Type maType = typeMapper.getMaType(Long.valueOf(clzDirectApplyDetails.getTypeId())); + maType.setFinalPrice(maType.getLeasePrice()); + record.setOutNum(clzDirectApplyDetails.getDirectNum()); + materialLeaseInfoMapper.insSltInfo(record, leaseAgreementId, maType); + } + } + } + + /** + * 插入clz_lease_apply_details表数据 + * @param list + * @param applyInfo + * @param count + * @return + */ + private int getLeaseApplyCount(List list, MaterialLeaseApplyInfo applyInfo, int count) { + for (ClzDirectApplyDetails clzDirectApplyDetails : list) { + MaterialLeaseApplyDetails leaseApplyDetails = new MaterialLeaseApplyDetails(); + leaseApplyDetails.setParentId(applyInfo.getId()); + leaseApplyDetails.setCreateTime(DateUtils.getNowDate()); + leaseApplyDetails.setTypeId(Long.valueOf(clzDirectApplyDetails.getTypeId())); + leaseApplyDetails.setPreNum(clzDirectApplyDetails.getDirectNum()); + leaseApplyDetails.setAlNum(clzDirectApplyDetails.getDirectNum()); + leaseApplyDetails.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName()); + count += materialLeaseInfoMapper.insertApplyDetails(leaseApplyDetails); + } + return count; + } + + /** + * 生成领料任务编号 + * @param thisMonthMaxOrder + * @return + */ + private static String genderLeaseTaskCode(Integer thisMonthMaxOrder) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date nowDate = DateUtils.getNowDate(); + String format = dateFormat.format(nowDate); + String result = format.replace("-", ""); + return MaterialConstants.MATERIAL_LEASE_TASK_TYPE_LABEL + result + String.format("-%03d", thisMonthMaxOrder + 1); + } + + /** + * 获取退料详情数据 + * @param backApplyInfo + * @param list + * @param result + * @return + */ + private int getBackDetailsResult(MaterialBackApplyInfo backApplyInfo, List list, int result) { + // 保存退料详情 + for (ClzDirectApplyDetails details : list) { + MaterialBackApplyDetails materialBackApplyDetails = new MaterialBackApplyDetails(); + materialBackApplyDetails.setParentId(backApplyInfo.getId()); + materialBackApplyDetails.setPreNum(details.getDirectNum()); + materialBackApplyDetails.setAuditNum(details.getDirectNum()); + materialBackApplyDetails.setTypeId(Long.valueOf(details.getTypeId())); + materialBackApplyDetails.setCode(backApplyInfo.getCode()); + materialBackApplyDetails.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName()); + materialBackApplyDetails.setCreateTime(DateUtils.getNowDate()); + materialBackApplyDetails.setStatus("2"); + result += materialBackInfoMapper.insertBackApplyDetails(materialBackApplyDetails); + } + return result; + } + + /** + * 获取退料详情数据 + * @param backApplyInfo + * @param detailById + * @param result + */ + private void extractedCheckDetails(MaterialBackApplyInfo backApplyInfo, List detailById, int result) { + List list = materialBackInfoMapper.getAgreementList(backApplyInfo); + for (ClzDirectApplyDetails clzDirectApplyDetails : detailById) { + MaterialBackApplyDetails materialBackApplyDetails = new MaterialBackApplyDetails(); + materialBackApplyDetails.setParentId(backApplyInfo.getId()); + materialBackApplyDetails.setPreNum(clzDirectApplyDetails.getDirectNum()); + materialBackApplyDetails.setTypeId(Long.valueOf(clzDirectApplyDetails.getTypeId())); + materialBackApplyDetails.setMaId(clzDirectApplyDetails.getMaId() != null ? Long.valueOf(clzDirectApplyDetails.getMaId()) : null); + materialBackApplyDetails.setIsFinished(1); + materialBackApplyDetails.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName()); + materialBackApplyDetails.setCreateTime(DateUtils.getNowDate()); + materialBackApplyDetails.setStatus("0"); + // 插入 CheckDetails + result += materialBackInfoMapper.insertCheckDetails(materialBackApplyDetails); + MaterialBackApplyInfo bean = new MaterialBackApplyInfo(); + bean.setAgreementIds(list); + bean.setTypeId(clzDirectApplyDetails.getTypeId().toString()); + bean.setMaId(clzDirectApplyDetails.getMaId() != null ? Long.valueOf(clzDirectApplyDetails.getMaId()) : null); + List infoList = materialBackInfoMapper.getStlInfo(bean); + if (infoList.size() > 0) { + BigDecimal backNum = clzDirectApplyDetails.getDirectNum(); + for (SltAgreementInfo info : infoList) { + BigDecimal num = info.getBackNum(); + if (backNum.compareTo(num) == 0) { + materialBackInfoMapper.updateStlInfo(info, backApplyInfo); + break; + } else if (backNum.compareTo(num) > 0) { + backNum = backNum.subtract(num); + materialBackInfoMapper.updateStlInfo(info, backApplyInfo); + } else { + BigDecimal many = num.subtract(backNum); + materialBackInfoMapper.updateStlInfoTwo(info, backApplyInfo, backNum); + materialBackInfoMapper.insStlInfoTwo(info, many); + break; + } + } + } + } + } + + + /** + * 生成退料单号 + * @param thisMonthMaxOrder + * @return + */ + private String genderTaskCode(int thisMonthMaxOrder) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date nowDate = DateUtils.getNowDate(); + String format = dateFormat.format(nowDate); + String result = format.replace("-", ""); + return MaterialConstants.BACK_MATERIAL_TASK_TYPE_LABEL + result + String.format("-%03d", thisMonthMaxOrder + 1); + } + + /** + * 创建工单和工单人员 + * @param sysUser + * @param backProName + * @param taskId + * @param taskCode + * @param newId + * @param nodeId + * @param userList + */ + private void createWorkOrderAndPeopleDirect(SysUser sysUser, String backProName, int taskId, String taskCode, int newId,int nodeId,List userList) { + String id = UUID.randomUUID().toString().replace("-", ""); + String webUrlBase = "/mea-h5/#/pages/businessAudit/directAudit/details"; + String queryParams = UriComponentsBuilder.newInstance() + .queryParam("appId", "9fa73f046ef520b09e94bbffc3b07702") + .queryParam("taskId", taskId) + .queryParam("id", newId) + .queryParam("nodeId", nodeId) + .build().encode().toUriString(); + + WorkApplyInfo workApplyInfo = new WorkApplyInfo(); + workApplyInfo.setId(id); + workApplyInfo.setTitle("智能机具-直转申请待审核"); + workApplyInfo.setCreateUserName(sysUser.getUserName()); + workApplyInfo.setContent(sysUser.getNickName() + ":" + taskCode + "-" + backProName); + workApplyInfo.setType(1); + workApplyInfo.setWebAppId("9fa73f046ef520b09e94bbffc3b07702"); + workApplyInfo.setSendUserName(sysUser.getUserName()); + workApplyInfo.setTypeId(2025050901); + workApplyInfo.setBusinessId(String.valueOf(newId)); + workApplyInfo.setNextStatus("待审核"); + workApplyInfo.setFlowState(null); + workApplyInfo.setWebUrl(webUrlBase + queryParams); + workApplyInfo.setRout(webUrlBase + queryParams); + + int countWork = directAuditMapper.insertWorkOrder(workApplyInfo); + if (countWork > 0) { + for (WorkPeopleInfo user : userList) { + WorkPeopleInfo workPeopleInfo = new WorkPeopleInfo(); + workPeopleInfo.setId(UUID.randomUUID().toString().replace("-", "")); + workPeopleInfo.setInformationId(id); + workPeopleInfo.setReceiverUsername(user.getUserName()); + workPeopleInfo.setReadState(0); + workPeopleInfo.setHandleState(0); + workPeopleInfo.setIsExamine(0); + directAuditMapper.insertWorkPeople(workPeopleInfo); + } + } + } + + /** + * 处理审核驳回❌ + * + * @param directApplyInfo + * @param taskId + */ + private void handleDirectReject(List sysWorkflowNodeList, ClzDirectApplyInfo directApplyInfo, Integer taskId) { + updateWorkflowStatus(taskId, 3); + SysUser sysUser = SecurityUtils.getLoginUser().getSysUser(); + // 修改工单信息 + updateWorkOrder(directApplyInfo.getRecordId(), sysUser.getUserName()); + for (int i = 0; i < sysWorkflowNodeList.size(); i++) { + // 判断列表中哪个节点是当前审批的节点,如果不是审批的节点不处理 + if (directApplyInfo.getNextNodeId().equals(sysWorkflowNodeList.get(i).getId())) { + log.info("-------------进入到了当前审批的节点-------------"); + //插入history表中 + SysWorkflowRecordHistory history = new SysWorkflowRecordHistory(); + history.setNodeId(directApplyInfo.getNextNodeId()); + if (sysWorkflowNodeList.size() - 1 != i) { + history.setNextNodeId(sysWorkflowNodeList.get(i + 1).getId()); + sysWorkflowNodeList.get(i).setNextNodeId(sysWorkflowNodeList.get(i + 1).getId()); + sysWorkflowNodeList.get(i).setNextRoleIds(sysWorkflowNodeList.get(i + 1).getRoleIds()); + } else { + history.setNextNodeId(null); + sysWorkflowNodeList.get(i).setNextNodeId(null); + sysWorkflowNodeList.get(i).setNextRoleIds(null); + } + history.setRemark(directApplyInfo.getRemark()); + history.setRecordId(directApplyInfo.getRecordId()); + history.setIsAccept(directApplyInfo.getIsAccept()); + history.setCreateBy(sysUser.getUserId().toString()); + sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(history); + } + } + } + + /** + * 修改任务状态 + * + * @param taskId + * @param status + */ + private void updateWorkflowStatus(Integer taskId, int status) { + SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord(); + sysWorkflowRecord.setTaskId(taskId); + sysWorkflowRecord.setWorkflowStatus(status); + sysWorkflowRecord.setTaskType(25); + sysWorkflowRecordMapper.updateSysWorkflowRecord(sysWorkflowRecord); + // 修改clz_direct_apply_info表转态为驳回 + ClzDirectApplyInfo clzDirectApplyInfo = new ClzDirectApplyInfo(); + clzDirectApplyInfo.setId(taskId); + clzDirectApplyInfo.setStatus(status); + clzDirectMapper.updateDirectApplyInfo(clzDirectApplyInfo); + } + + /** + * 更新工单信息 + * + * @param recordId 工单ID + * @param userName 用户名 + */ + private void updateWorkOrder(int recordId, String userName) { + WorkPeopleInfo peopleInfo = new WorkPeopleInfo(); + peopleInfo.setFlowId(recordId); + peopleInfo.setReceiverUsername(userName); + + List infos = lMapper.getWorkPeopleInfo(peopleInfo); + if (CollectionUtils.isNotEmpty(infos)) { + for (WorkPeopleInfo info : infos) { + peopleInfo.setInformationId(info.getInformationId()); + lMapper.updateWorkPeopleInfo(peopleInfo); + } + } + } + + /** + * 获取【当前任务所属审批流】的所有节点 + * + * @param directApplyInfo + * @return + */ + private List getWorkflowNodes(ClzDirectApplyInfo directApplyInfo) { + SysWorkflowNode sysWorkflowNode = new SysWorkflowNode(); + sysWorkflowNode.setTypeId(22); + List sysWorkflowNodeList = sysWorkflowNodeMapper.selectSysWorkflowNodeList(sysWorkflowNode); + if (sysWorkflowNodeList == null || sysWorkflowNodeList.isEmpty()) { + throw new ServiceException("流程节点配置为空"); + } + return sysWorkflowNodeList; + } + + /** + * 添加工作流记录 + * + * @param event + */ + private void addSysWorkflowRecord(WorkflowEvent event) { + SysUser sysUser = SecurityUtils.getLoginUser().getSysUser(); + int count = 0; + + //获取审批流id + SysWorkflowType sysWorkflowType = new SysWorkflowType(); + sysWorkflowType.setTaskType(event.getTaskType()); + sysWorkflowType.setIsEnable(1); + List sysWorkflowTypeList = sysWorkflowTypeMapper.selectSysWorkflowTypeList(sysWorkflowType); + if (sysWorkflowTypeList.isEmpty()) { + throw new ServiceException("新增任务审批记录失败,请创建审核流程"); + } + SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord(); + if (sysWorkflowTypeList.size() == 1) { + // 如果该任务类型配置了一个审批流,则直接使用 + sysWorkflowType = sysWorkflowTypeList.get(0); + sysWorkflowRecord = new SysWorkflowRecord(); + sysWorkflowRecord.setWorkflowId(sysWorkflowType.getId()); + sysWorkflowRecord.setTaskId(event.getTaskId()); + sysWorkflowRecord.setTaskType(event.getTaskType()); + sysWorkflowRecord.setTaskCode(event.getTaskCode()); + //创建审批任务 + count = sysWorkflowRecordMapper.addSysWorkflowRecord(sysWorkflowRecord); + if (0 == count) { + throw new RuntimeException("创建审批任务失败!"); + } + } + // 获取新创建的ID + int newId = sysWorkflowRecord.getId(); + //获取当前审核流下的节点 + SysWorkflowNode sysWorkflowNode = new SysWorkflowNode(); + sysWorkflowNode.setTypeId(sysWorkflowType.getId()); + List sysWorkflowNodeList = sysWorkflowNodeMapper.selectSysWorkflowNodeList(sysWorkflowNode); + + // 创建审核记录 + SysWorkflowRecordHistory sysWorkflowRecordHistory = new SysWorkflowRecordHistory(); + sysWorkflowRecordHistory.setRecordId(sysWorkflowRecord.getId()); + sysWorkflowRecordHistory.setNodeId(sysWorkflowNodeList.get(0).getId()); + sysWorkflowRecordHistory.setNextNodeId(sysWorkflowNodeList.get(1).getId()); + sysWorkflowRecordHistory.setIsAccept(1); + sysWorkflowRecordHistory.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); + sysWorkflowRecordHistory.setCreateTime(DateUtils.getNowDate()); + //根据单位id获取退料班组长身份证号 + List userList = directAuditMapper.getProjectId(event.getBackTeamId()); + if (CollectionUtils.isNotEmpty(userList)) { + String userIds = userList.stream().map(WorkPeopleInfo::getUserId).map(String::valueOf).collect(Collectors.joining(",")); + sysWorkflowRecordHistory.setDirectUserIds(userIds); + } + sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(sysWorkflowRecordHistory); + + if (count > 0 && CollectionUtils.isNotEmpty(userList)) { + createWorkOrderAndPeople(sysUser, event, Long.valueOf(sysWorkflowRecord.getTaskId()), newId, sysWorkflowRecordHistory.getNodeId(), userList); + } + } + + /** + * 创建工单和工单人员 + * + * @param sysUser + * @param event + * @param taskId + * @param newId + * @param nodeId + * @param userList + */ + private void createWorkOrderAndPeople(SysUser sysUser, WorkflowEvent event, Long taskId, int newId, int nodeId, List userList) { + String projectName = event.getProjectName(); + String id = UUID.randomUUID().toString().replace("-", ""); + String webUrlBase = "/mea-h5/#/pages/businessAudit/directAudit/details"; + String queryParams = UriComponentsBuilder.newInstance() + .queryParam("appId", "9fa73f046ef520b09e94bbffc3b07702") + .queryParam("taskId", taskId) + .queryParam("id", newId) + .queryParam("nodeId", nodeId) + .build().encode().toUriString(); + + WorkApplyInfo workApplyInfo = new WorkApplyInfo(); + workApplyInfo.setId(id); + workApplyInfo.setTitle("智能机具-直转申请待审核"); + workApplyInfo.setCreateUserName(sysUser.getUserName()); + workApplyInfo.setContent(sysUser.getNickName() + ":" + event.getTaskCode() + "-" + projectName); + workApplyInfo.setType(1); + workApplyInfo.setWebAppId("9fa73f046ef520b09e94bbffc3b07702"); + workApplyInfo.setSendUserName(sysUser.getUserName()); + workApplyInfo.setTypeId(2025050901); + workApplyInfo.setBusinessId(String.valueOf(newId)); + workApplyInfo.setNextStatus("待审核"); + workApplyInfo.setFlowState(null); + workApplyInfo.setWebUrl(webUrlBase + queryParams); + workApplyInfo.setRout(webUrlBase + queryParams); + + int countWork = directAuditMapper.insertWorkOrder(workApplyInfo); + if (countWork > 0) { + for (WorkPeopleInfo user : userList) { + WorkPeopleInfo workPeopleInfo = new WorkPeopleInfo(); + workPeopleInfo.setId(UUID.randomUUID().toString().replace("-", "")); + workPeopleInfo.setInformationId(id); + workPeopleInfo.setReceiverUsername(user.getUserName()); + workPeopleInfo.setReadState(0); + workPeopleInfo.setHandleState(0); + workPeopleInfo.setIsExamine(0); + directAuditMapper.insertWorkPeople(workPeopleInfo); + } + } + } + +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialBackApplyInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialBackApplyInfoServiceImpl.java index 4f4392a5..1dd312d5 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialBackApplyInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialBackApplyInfoServiceImpl.java @@ -110,10 +110,12 @@ public class MaterialBackApplyInfoServiceImpl implements MaterialBackApplyInfoSe return new ArrayList<>(); } if (!hasSpecialRole) { - Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); - if (!org.springframework.util.CollectionUtils.isEmpty(list) && deptId != null) { - // 删除元素 - list.removeIf(info -> !deptId.toString().equals(info.getImpUnit())); + if (teamData == null) { + Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + if (!org.springframework.util.CollectionUtils.isEmpty(list) && deptId != null) { + // 删除元素 + list.removeIf(info -> !deptId.toString().equals(info.getImpUnit())); + } } } if (!org.springframework.util.CollectionUtils.isEmpty(list)) { diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialLeaseInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialLeaseInfoServiceImpl.java index 767fc45b..f692cac5 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialLeaseInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialLeaseInfoServiceImpl.java @@ -133,11 +133,13 @@ public class MaterialLeaseInfoServiceImpl implements MaterialLeaseInfoService { .sorted(Comparator.comparing(MaterialLeaseApplyInfo::getCreateTime).reversed()) .collect(Collectors.toList()); if (!hasSpecialRole) { - // 数据权限划分,获取当前用户的deptId - Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); - if (!CollectionUtils.isEmpty(sortedList) && deptId != null) { - // 删除元素 - sortedList.removeIf(info -> !deptId.toString().equals(info.getImpUnit())); + if (teamData == null) { + // 数据权限划分,获取当前用户的deptId + Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + if (!CollectionUtils.isEmpty(sortedList) && deptId != null) { + // 删除元素 + sortedList.removeIf(info -> !deptId.toString().equals(info.getImpUnit())); + } } } if (!CollectionUtils.isEmpty(sortedList)) { diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialMachineServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialMachineServiceImpl.java index e1cda8d4..a0eadb1a 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialMachineServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/MaterialMachineServiceImpl.java @@ -164,9 +164,9 @@ public class MaterialMachineServiceImpl implements MaterialMachineService { bean.setProjectIdList(projectIdList); } } + // 部门查询赋值 + extractedDept(bean); } - // 部门查询赋值 - extractedDept(bean); } // 查询目前在用的设备信息 List usList = materialMachineMapper.getUsInfoList(bean); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java index 3698d3fa..bb7153c8 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java @@ -8,6 +8,8 @@ import com.bonus.material.basic.domain.BmProject; import com.bonus.material.basic.domain.BmUnit; import com.bonus.material.clz.domain.back.MaterialBackPreApply; import com.bonus.material.clz.domain.BmTeam; +import com.bonus.material.clz.domain.direct.ClzDirectApplyDetails; +import com.bonus.material.clz.domain.direct.ClzDirectApplyInfo; import com.bonus.material.clz.domain.lease.MaterialLeaseApplyInfo; import com.bonus.material.common.domain.dto.SelectDto; import com.bonus.material.common.domain.vo.AgreementVo; @@ -362,4 +364,13 @@ public interface SelectMapper { * @return */ String getAncestors(String deptId); + + List selectDetails(ClzDirectApplyInfo directApplyInfo); + + /** + * 获取班组下拉选 + * @param bean + * @return + */ + List getTeamNewList(ProAuthorizeInfo bean); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java index 6fd1945b..6a4195f9 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java @@ -253,6 +253,8 @@ public class SelectServiceImpl implements SelectService { log.error("单位类型树-查询失败", e); } return AjaxResult.success(groupList); + /*List newList = mapper.getTeamNewList(bean); + return AjaxResult.success(newList);*/ } /** diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/TeamBackTasks.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/TeamBackTasks.java new file mode 100644 index 00000000..bc5f9437 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/TeamBackTasks.java @@ -0,0 +1,127 @@ +package com.bonus.material.warning; + +import cn.hutool.json.JSONObject; +import com.ah.sbd.SmsTool; +import com.ah.sbd.utils.param.SmsParam; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.bonus.common.biz.constant.BmConfigItems; +import com.bonus.common.core.utils.StringUtils; +import com.bonus.material.clz.domain.TeamVo; +import com.bonus.material.clz.domain.lease.MaterialLeaseApplyDetails; +import com.bonus.material.clz.mapper.MaterialLeaseInfoMapper; +import com.bonus.material.warningAnalysis.domain.UseMaintenanceWarningBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * 班组退场查询是否存在未退还机具定时器 + * @author ma_sh + */ +@Component +@Slf4j +public class TeamBackTasks { + + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Resource + private MaterialLeaseInfoMapper materialLeaseInfoMapper; + + @Resource + private ScheduledTaskRegistrar scheduledTaskRegistrar; + + /** + * 定时任务执行频率,每2天上午9点执行一次 + */ + private String cronExpression = "0 0 9 */2 * ?"; + + /** + * 初始化定时任务 + */ + @PostConstruct + public void init() { + cronExpression = getCronFromDatabase(); + updateCronTask(); + } + + /** + * 更新定时任务 + */ + private void updateCronTask() { + Objects.requireNonNull(scheduledTaskRegistrar.getScheduler()).schedule(this::taskWithFixedRate, new CronTrigger(cronExpression)); + } + + /** + * 从数据库中获取 cron 表达式 + * @return + */ + private String getCronFromDatabase() { + // 这里假设从数据库中获取 cron 表达式 + //return "0 */1 * * * ?"; + return "0 0 9 */3 * ?"; + } + + /** + * 班组退场查询是否存在未退还机具推送材料员 + * 每三天的上午9点执行 + */ + public void taskWithFixedRate() { + log.info("开始执行班组退场查询任务"); + // 记录任务执行时间 + log.info("任务执行时间:" + LocalDateTime.now().format(FORMATTER)); + List list = materialLeaseInfoMapper.selectBackApplyInfoList(); + // 用于查询 班组退场未退还机具的记录 + try { + if (CollectionUtils.isNotEmpty(list)) { + // 省公司短信发送 + List mobileList = new ArrayList<>(); + + // 遍历列表,检查每个 BackApplyInfo 的 BackSignUrl 是否为空 + for (MaterialLeaseApplyDetails materialLeaseApplyDetails : list) { + // 先根据班组名称和i8工程id查询班组是否退场 + List infoList = materialLeaseInfoMapper.getJcTeamInfo(materialLeaseApplyDetails); + if (CollectionUtils.isNotEmpty(infoList)) { + continue; + } + String content = "您好" + materialLeaseApplyDetails.getUnitName() + "退场时有机具尚未退还,明细请登录机具管理系统查看"; + // 根据i8工程id查询材料员信息 + List userList = materialLeaseInfoMapper.getUserList(materialLeaseApplyDetails); + if (CollectionUtils.isEmpty(userList)) { + for (UseMaintenanceWarningBean useMaintenanceWarningBean : userList) { + UseMaintenanceWarningBean item1 = materialLeaseInfoMapper.getUserPhoneById(useMaintenanceWarningBean); + if (StringUtils.isNotBlank(item1.getClzPhone())) { + mobileList.add(new SmsParam(item1.getClzPhone(), content)); + } + } + } + log.info("发送短信给材料员: {}", mobileList); + if (CollectionUtils.isNotEmpty(mobileList)) { + JSONObject sendResult = SmsTool.sendSms(mobileList, BmConfigItems.ANHUI_COMPANY_SMS_KEY); + if (sendResult != null && !sendResult.isEmpty()) { + log.info("短信发送成功: {}", sendResult); + System.out.println("短信发送成功: " + sendResult); + } else { + log.error("短信发送失败,发送结果为空!"); + System.out.println("短信发送失败,发送结果为空!"); + } + } + } + } + } catch (Exception e) { + log.error("短信发送过程中发生异常: {}", e.getMessage()); + System.out.println("短信发送过程中发生异常: " + e.getMessage()); + } + log.info("任务结束时间:" + LocalDateTime.now().format(FORMATTER)); + System.out.println("任务结束时间:" + LocalDateTime.now().format(FORMATTER)); + } + +} \ No newline at end of file diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java index b80a968e..12078042 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java @@ -57,4 +57,18 @@ public interface DirectAuditMapper { void deleteWorkflowRecord(int newId); List getUserIdByExternalId(String leaderAccount); + + /** + * 获取i8工程id + * @param backTeamId + * @return + */ + List getProjectId(String backTeamId); + + /** + * 获取项目经理id + * @param externalId + * @return + */ + String getDeptId(String externalId); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordHistoryMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordHistoryMapper.java index 4d4b726e..c965360d 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordHistoryMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordHistoryMapper.java @@ -1,5 +1,6 @@ package com.bonus.material.work.mapper; +import com.bonus.common.biz.domain.lease.WorkApplyInfo; import com.bonus.material.work.domain.SysWorkflowRecord; import com.bonus.material.work.domain.SysWorkflowRecordHistory; @@ -31,4 +32,36 @@ public interface SysWorkflowRecordHistoryMapper { void deleteNowNode(SysWorkflowRecordHistory sysWorkflowRecordHistory); String getRecordCodeByTaskId(Integer taskId); + + /** + * 获取当前节点信息 + * @param newId + * @return + */ + SysWorkflowRecordHistory getHistoryInfo(int newId); + + /** + * 获取当前节点信息 + * @param newId + * @return + */ + WorkApplyInfo getSysInformation(int newId); + + /** + * 删除审核信息 + * @param newId + */ + void deleteSysInformation(int newId); + + /** + * 根据workApplyInfo数据删除sys_information_people表数据 + * @param id + */ + void deleteInformationPeople(String id); + + /** + * 根据workApplyInfo数据删除sys_workflow_record_history表数据 + * @param newId + */ + void deleteSysWorkflowRecordHistory(int newId); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java index 424e112f..c32d3396 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java @@ -40,4 +40,11 @@ public interface SysWorkflowRecordMapper { int selectSysWorkflowRecordByTaskId(LeaseApplyInfo leaseApplyInfo); int selectLeaseAgreementIdByRecordId(Integer taskId); + + /** + * 根据id查询审批流记录信息 + * @param id + * @return + */ + SysWorkflowRecord getWorkflowRecordHistory(Integer id); } diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/ClzDirectMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/ClzDirectMapper.xml new file mode 100644 index 00000000..37f582c3 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/ClzDirectMapper.xml @@ -0,0 +1,411 @@ + + + + + insert into clz_direct_apply_info + ( + + code, + + + back_agreement_id, + + + back_man, + + + back_phone, + + + back_remark, + + + lease_agreement_id, + + + lease_man, + + + lease_phone, + + + dir_url, + + + status, + + + auditor, + + + audit_time, + + + audit_remark, + + + create_by, + + create_time + ) values ( + + #{code}, + + + #{backAgreementIds}, + + + #{backMan}, + + + #{backPhone}, + + + #{backRemark}, + + + #{leaseAgreementIds}, + + + #{leaseMan}, + + + #{leasePhone}, + + + #{dirUrl}, + + + #{status}, + + + #{auditor}, + + + #{auditTime}, + + + #{auditRemark}, + + + #{createBy}, + + NOW() + ) + + + + insert into clz_direct_apply_details(direct_id, type_id, ma_id, direct_num, create_time) + values + + (#{item.directId}, #{item.typeId}, #{item.maId}, #{item.directNum}, NOW()) + + + + + update clz_direct_apply_info + set + + back_agreement_id = #{backAgreementIds}, + + + back_man = #{backMan}, + + + back_phone = #{backPhone}, + + + lease_agreement_id = #{leaseAgreementIds}, + + + lease_man = #{leaseMan}, + + + lease_phone = #{leasePhone}, + + + dir_url = #{dirUrl}, + + + status = #{status}, + + + auditor = #{auditor}, + + + audit_time = #{auditTime}, + + update_time= NOW() + where id = #{id} + + + + delete from clz_direct_apply_details where direct_id = #{id} + + + + delete from clz_direct_apply_info where id = #{id} + + + + + + + + + + + + + + + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialBackInfoMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialBackInfoMapper.xml index 8e336237..84f6e783 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialBackInfoMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialBackInfoMapper.xml @@ -890,4 +890,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and csa.project_id = #{proId} + + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialLeaseInfoMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialLeaseInfoMapper.xml index b34a8e8b..f82531ee 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialLeaseInfoMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/MaterialLeaseInfoMapper.xml @@ -305,6 +305,72 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{remark}, #{companyId}) + + insert into clz_lease_apply_details + (parent_id, type_id, pre_num, al_num, `status`, create_by, create_time, update_by, + update_time, remark, company_id) + values (#{parentId}, #{typeId}, #{preNum},#{alNum}, #{status}, #{createBy},NOW(), #{updateBy}, NOW(), + #{remark}, #{companyId}) + + + + insert into clz_lease_out_details + + + parent_id, + + + type_id, + + + ma_id, + + + out_num, + + + out_type, + + + create_by, + + + remark, + + + is_finished, + + create_time + + + + #{parentId}, + + + #{typeId}, + + + #{maId}, + + + #{outNum}, + + + #{outType}, + + + #{createBy}, + + + #{remark}, + + + #{isFinished}, + + NOW() + + + update clz_lease_apply_info @@ -1452,4 +1518,58 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" lai.`code` = #{code} GROUP BY mt.type_id,mt.manage_type + + + + + + + + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml index 58b85f9d..678a37e0 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml @@ -1120,4 +1120,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/DirectAuditMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/DirectAuditMapper.xml index d436f842..24ebb46d 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/DirectAuditMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/DirectAuditMapper.xml @@ -214,6 +214,28 @@ and dfs.id = #{externalId} + + + + update sys_workflow_record set workflow_status = #{flowStatus} where id = #{id} diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml index 5492f89c..0928d10e 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml @@ -132,4 +132,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" direct_apply_info dai WHERE id= #{taskId} + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordhistoryMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordhistoryMapper.xml index 945c67c3..bbaae7e1 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordhistoryMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordhistoryMapper.xml @@ -101,7 +101,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where task_id = #{taskId} + + + + delete from sys_workflow_record_history where record_id = #{recordId} and node_id = #{nodeId} + + + delete from uni_org.sys_information where business_id = #{newId} + + + + delete from uni_org.information_people where information_id = #{id} + + + + delete from sys_workflow_record_history where record_id = #{id} +