丢失报备
This commit is contained in:
parent
1cdae3a38b
commit
9f59f802ca
|
|
@ -43,7 +43,10 @@ public enum TmTaskTypeEnum {
|
|||
TM_TASK_MATERIAL_BACK_APPOINT(24, "材料站预约退料任务"),
|
||||
|
||||
// 材料站站内直转任务
|
||||
TM_TASK_ZN_DIRECT(25, "材料站站内直转任务");
|
||||
TM_TASK_ZN_DIRECT(25, "材料站站内直转任务"),
|
||||
|
||||
// 丢失报备任务
|
||||
TM_TASK_LOSS_REPORT(26, "丢失报备任务");
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -421,10 +421,10 @@ public class ClzDirectServiceImpl implements ClzDirectService {
|
|||
// 如果该任务类型配置了一个审批流,则直接使用
|
||||
sysWorkflowType = sysWorkflowTypeList.get(0);
|
||||
// 先根据id查询该数据是否已经存在
|
||||
recordInfo = sysWorkflowRecordMapper.getWorkflowRecordHistory(event.getTaskId());
|
||||
recordInfo = sysWorkflowRecordMapper.getWorkflowRecordHistory(event);
|
||||
// 根据id删除该数据
|
||||
if (recordInfo != null) {
|
||||
sysWorkflowRecordMapper.deleteSysWorkflowRecord(event.getTaskId());
|
||||
sysWorkflowRecordMapper.deleteSysWorkflowRecord(event);
|
||||
}
|
||||
sysWorkflowRecord = new SysWorkflowRecord();
|
||||
sysWorkflowRecord.setWorkflowId(sysWorkflowType.getId());
|
||||
|
|
|
|||
|
|
@ -2055,7 +2055,7 @@ public class LeaseApplyInfoServiceImpl implements ILeaseApplyInfoService {
|
|||
if (leaseApplyInfo.getMaId() != null) {
|
||||
// 过滤出list中和leaseApplyInfo.getMaId()相等的元素
|
||||
list = list.stream()
|
||||
.filter(item -> item.getMaId().equals(leaseApplyInfo.getMaId()))
|
||||
.filter(item -> item.getMaId() != null && item.getMaId().equals(leaseApplyInfo.getMaId()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1325,10 +1325,10 @@ public class LeaseTaskServiceImpl implements ILeaseTaskService {
|
|||
if (leaseApplyDetails.getTaskId()!= null) {
|
||||
LeaseOutDetails leaseOutDetails = new LeaseOutDetails();
|
||||
leaseOutDetails.setTaskId(leaseApplyDetails.getTaskId()+"");
|
||||
res = editTaskStatus(leaseOutDetails);
|
||||
/*res = editTaskStatus(leaseOutDetails);
|
||||
if (res == GlobalConstants.INT_0) {
|
||||
throw new RuntimeException("出库退回失败,修改任务状态失败");
|
||||
}
|
||||
}*/
|
||||
}
|
||||
// 删除领料出库明细表(lease_out_details)
|
||||
int res2 = mapper.deleteLeaseOutDetails(leaseApplyDetails);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,210 @@
|
|||
package com.bonus.material.lossAssessment.controller;
|
||||
|
||||
import com.bonus.common.core.utils.DateUtils;
|
||||
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.lossAssessment.domain.LossAssignInfo;
|
||||
import com.bonus.material.lossAssessment.domain.LossAssignVo;
|
||||
import com.bonus.material.lossAssessment.service.LossAssignService;
|
||||
import com.bonus.material.ma.domain.Type;
|
||||
import com.bonus.material.settlement.domain.SltAgreementInfo;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
/**
|
||||
* @author ma_sh
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/LossAssign")
|
||||
@Api(tags = "设备报备丢失管理")
|
||||
@Slf4j
|
||||
public class LossAssignController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private LossAssignService service;
|
||||
|
||||
/**
|
||||
* 丢失报备查询列表
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "丢失报备查询列表")
|
||||
@GetMapping("/list")
|
||||
public AjaxResult list(LossAssignInfo lossAssignInfo) {
|
||||
startPage();
|
||||
try {
|
||||
List<LossAssignInfo> directApplyInfos = service.getList(lossAssignInfo);
|
||||
return AjaxResult.success(getDataTable(directApplyInfos));
|
||||
} catch (Exception e) {
|
||||
return AjaxResult.success(getDataTable(new ArrayList<>()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出丢失报备查询列表
|
||||
* @param response
|
||||
* @param lossAssignInfo
|
||||
*/
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, LossAssignInfo lossAssignInfo) {
|
||||
String fileName = "报备丢失记录";
|
||||
if (lossAssignInfo.getStartTime() != null && lossAssignInfo.getEndTime() != null) {
|
||||
fileName = "报备丢失"+ "(报备时间" + lossAssignInfo.getStartTime() + "至" + lossAssignInfo.getEndTime()+ ")";
|
||||
}
|
||||
List<LossAssignInfo> list = service.getList(lossAssignInfo);
|
||||
// 根据list集合数,去填充序号
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
list.get(i).setSerialNumber(i + 1);
|
||||
}
|
||||
ExcelUtil<LossAssignInfo> util = new ExcelUtil<>(LossAssignInfo.class);
|
||||
// 获取当前年月日时分秒导出时间,用括号拼接在后面
|
||||
String title = "报备丢失记录" + "(" + "导出时间:" + DateUtils.getTime() + ")";
|
||||
util.exportExcel(response, list, fileName, title);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据协议Id查询在用数据
|
||||
* @param sltAgreementInfo
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "根据协议Id查询在用数据")
|
||||
@GetMapping("/getUseData")
|
||||
public AjaxResult getUseData(SltAgreementInfo sltAgreementInfo) {
|
||||
try {
|
||||
List<SltAgreementInfo> useData = service.getUseData(sltAgreementInfo);
|
||||
// 1. 批量查询待审核数量:收集所有必要参数,一次查库
|
||||
Set<SltAgreementInfo> pairSet = new HashSet<>();
|
||||
for (SltAgreementInfo data : useData) {
|
||||
Long typeId = data.getTypeId();
|
||||
Long maId = data.getMaId();
|
||||
SltAgreementInfo info = new SltAgreementInfo();
|
||||
info.setTypeId(typeId);
|
||||
info.setMaId(maId);
|
||||
pairSet.add(info);
|
||||
}
|
||||
List<SltAgreementInfo> pairs = new ArrayList<>(pairSet);
|
||||
// 2.批量查询待转数量
|
||||
List<SltAgreementInfo> batchInfoList = service.getBatchInfo(sltAgreementInfo.getAgreementId(),pairs);
|
||||
// 构建infoMap:key = "typeId:maId",value = 对应的SltAgreementInfo(含waitTransNum)
|
||||
Map<String, SltAgreementInfo> infoMap = new HashMap<>();
|
||||
for (SltAgreementInfo info : batchInfoList) {
|
||||
Long typeId = info.getTypeId();
|
||||
Long maId = info.getMaId();
|
||||
// 生成唯一key(处理maId为null的情况)
|
||||
String key = typeId + ":" + (maId == null ? "null" : maId);
|
||||
infoMap.put(key, info);
|
||||
}
|
||||
// 3. 遍历useData处理逻辑(用批量结果替代循环查库)
|
||||
for (SltAgreementInfo data : useData) {
|
||||
// 4. 从批量查询结果中获取数据(O(1)查询)
|
||||
String infoKey = data.getTypeId() + ":" + (data.getMaId() == null ? "null" : data.getMaId());
|
||||
SltAgreementInfo info = infoMap.get(infoKey);
|
||||
if (info != null) {
|
||||
data.setWaitTransNum(info.getWaitTransNum());
|
||||
data.setTransNum(data.getUseNum().subtract(info.getWaitTransNum()));
|
||||
} else {
|
||||
data.setWaitTransNum(BigDecimal.ZERO);
|
||||
data.setTransNum(data.getUseNum());
|
||||
}
|
||||
}
|
||||
return AjaxResult.success(useData);
|
||||
} catch (Exception e) {
|
||||
log.error("查询失败", e);
|
||||
return AjaxResult.success(new ArrayList<>());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询物资类型3级--前端联动式下拉框(在用设备)
|
||||
* 没有4级规格型号
|
||||
*/
|
||||
@ApiOperation(value = "获取物资类型连动式下拉框")
|
||||
@GetMapping("/equipmentThreeTypes")
|
||||
public AjaxResult equipmentThreeTypes(@RequestParam(required = false) Long typeId, @RequestParam(required = false) Long agreementId) {
|
||||
List<Type> listByMaType = service.getEquipmentThreeTypes(typeId, agreementId);
|
||||
return success(listByMaType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增申请
|
||||
* @param lossAssignVo
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "新增申请")
|
||||
@PostMapping("/add")
|
||||
public AjaxResult add(@RequestBody LossAssignVo lossAssignVo) {
|
||||
try {
|
||||
return service.add(lossAssignVo);
|
||||
} catch (Exception e) {
|
||||
System.err.println("保存失败:" + e.getMessage());
|
||||
return AjaxResult.error("保存失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改申请
|
||||
* @param lossAssignVo
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "修改申请")
|
||||
@PostMapping("/edit")
|
||||
public AjaxResult edit(@RequestBody LossAssignVo lossAssignVo) {
|
||||
try {
|
||||
return service.edit(lossAssignVo);
|
||||
} catch (Exception e) {
|
||||
return AjaxResult.error("修改失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除申请
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "删除申请")
|
||||
@PostMapping("/delete")
|
||||
public AjaxResult remove(@RequestBody LossAssignInfo lossAssignInfo) {
|
||||
return service.remove(lossAssignInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看详情
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "查看详情")
|
||||
@GetMapping("/getInfo")
|
||||
public AjaxResult getInfo(LossAssignInfo lossAssignInfo) {
|
||||
try {
|
||||
return service.getInfoById(lossAssignInfo);
|
||||
} catch (Exception e) {
|
||||
return AjaxResult.success(new LossAssignVo());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 报备丢失审批
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "报备丢失审批")
|
||||
@PostMapping("/directUpdate")
|
||||
public AjaxResult directUpdate(@RequestBody LossAssignInfo lossAssignInfo) {
|
||||
try {
|
||||
return service.updateDirectSysWorkflowRecordHistory(lossAssignInfo);
|
||||
} catch (Exception e) {
|
||||
logger.error("审核失败{}", e.getMessage(), e);
|
||||
return error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
package com.bonus.material.lossAssessment.domain;
|
||||
|
||||
import com.bonus.common.core.web.domain.BaseEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 设备报备丢失details
|
||||
* @author ma_sh
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class LossAssignDetails extends BaseEntity {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 报表丢失主表id
|
||||
*/
|
||||
private Integer lossId;
|
||||
|
||||
/**
|
||||
* 设备类型id
|
||||
*/
|
||||
private Long typeId;
|
||||
|
||||
/**
|
||||
* 设备id
|
||||
*/
|
||||
private Long maId;
|
||||
|
||||
/**
|
||||
* 设备编码
|
||||
*/
|
||||
private String maCode;
|
||||
|
||||
/**
|
||||
* 丢失数量
|
||||
*/
|
||||
private BigDecimal lossNum;
|
||||
|
||||
@ApiModelProperty(value = "领料时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date startTime;
|
||||
|
||||
@ApiModelProperty(value = "领料人")
|
||||
private String leasePerson;
|
||||
|
||||
/**
|
||||
* 设备名称
|
||||
*/
|
||||
private String typeName;
|
||||
|
||||
/**
|
||||
* 规格型号
|
||||
*/
|
||||
private String typeModelName;
|
||||
|
||||
/**
|
||||
* 计量单位
|
||||
*/
|
||||
private String unitName;
|
||||
|
||||
@ApiModelProperty(value = "在用数量")
|
||||
private BigDecimal useNum;
|
||||
|
||||
@ApiModelProperty(value = "待转数量")
|
||||
private BigDecimal waitTransNum;
|
||||
|
||||
@ApiModelProperty(value = "可转数量")
|
||||
private BigDecimal transNum;
|
||||
|
||||
@ApiModelProperty(value = "报表丢失协议")
|
||||
private Integer agreementId;
|
||||
}
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
package com.bonus.material.lossAssessment.domain;
|
||||
|
||||
import com.bonus.common.core.annotation.Excel;
|
||||
import com.bonus.material.ma.domain.DirectApplyUrl;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 设备报备丢失info
|
||||
* @author ma_sh
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class LossAssignInfo {
|
||||
|
||||
@ApiModelProperty(value = "序号")
|
||||
@Excel(name = "序号", isSequence = true, sort = 0, width = 5)
|
||||
private Integer serialNumber;
|
||||
|
||||
@ApiModelProperty(value = "下个流程节点id")
|
||||
private Integer id;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
|
||||
@Excel(name = "申请人")
|
||||
private String createBy;
|
||||
|
||||
@ApiModelProperty(value = "报表丢失单号(DS20240226-1)")
|
||||
@Excel(name = "报表丢失单号")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty(value = "报表丢失协议")
|
||||
private Integer agreementId;
|
||||
|
||||
@ApiModelProperty(value = "报表丢失单位id")
|
||||
private String lossUnitId;
|
||||
|
||||
@Excel(name = "报备丢失单位名称")
|
||||
private String lossUnitName;
|
||||
|
||||
@ApiModelProperty(value = "报表丢失工程id")
|
||||
private String lossProId;
|
||||
|
||||
@Excel(name = "报备丢失工程名称", width = 40)
|
||||
private String lossProName;
|
||||
|
||||
@ApiModelProperty(value = "报备丢失人")
|
||||
private String lossMan;
|
||||
|
||||
@ApiModelProperty(value = "手机号")
|
||||
private String lossPhone;
|
||||
|
||||
@Excel(name = "物资类型", width = 40)
|
||||
private String typeName;
|
||||
|
||||
@ApiModelProperty(value = "直转附件数组")
|
||||
private List<DirectApplyUrl> dirUrls;
|
||||
|
||||
@ApiModelProperty(value = "报备丢失备注")
|
||||
private String lossRemark;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateBy;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "丢失附件")
|
||||
private String lossUrl;
|
||||
|
||||
@Excel(name = "状态", readConverterExp = "0=待审核,1=审核中,2=已完成,3=已驳回")
|
||||
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 isApp;
|
||||
|
||||
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 List<Integer> statusList;
|
||||
|
||||
@ApiModelProperty(value = "部门id")
|
||||
private Integer deptId;
|
||||
|
||||
@ApiModelProperty(value = "报备丢失i8工程id")
|
||||
private String lossExternalId;
|
||||
|
||||
@ApiModelProperty(value = "报备丢失分公司")
|
||||
private String lossImpUnitName;
|
||||
|
||||
@ApiModelProperty(value = "报备丢失项目部")
|
||||
private String lossDepartName;
|
||||
|
||||
@ApiModelProperty(value = "审批结果,1通过 2拒绝")
|
||||
private Integer isAccept;
|
||||
|
||||
@ApiModelProperty(value = "审批人id")
|
||||
private String directUserIds;
|
||||
|
||||
@ApiModelProperty(value = "用户id")
|
||||
private Long userId;
|
||||
|
||||
@ApiModelProperty(value = "i8工程id集合")
|
||||
private List<String> projectIdList;
|
||||
|
||||
@ApiModelProperty(value = "实施单位id")
|
||||
private String impUnit;
|
||||
|
||||
@ApiModelProperty(value = "班组长身份证id")
|
||||
private String bzIdCard;
|
||||
|
||||
@ApiModelProperty(value = "关键字")
|
||||
private String keyWord;
|
||||
|
||||
@ApiModelProperty(value = "审批结果")
|
||||
private String remark;
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.bonus.material.lossAssessment.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author ma_sh
|
||||
* @create 2025/11/26 15:10
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Data
|
||||
public class LossAssignVo {
|
||||
|
||||
private LossAssignInfo lossAssignInfo;
|
||||
|
||||
private List<LossAssignDetails> lossAssignDetails;
|
||||
}
|
||||
|
|
@ -0,0 +1,195 @@
|
|||
package com.bonus.material.lossAssessment.mapper;
|
||||
|
||||
import com.bonus.common.biz.domain.lease.WorkApplyInfo;
|
||||
import com.bonus.common.biz.domain.lease.WorkPeopleInfo;
|
||||
import com.bonus.material.lossAssessment.domain.LossAssignDetails;
|
||||
import com.bonus.material.lossAssessment.domain.LossAssignInfo;
|
||||
import com.bonus.material.ma.domain.Type;
|
||||
import com.bonus.material.settlement.domain.SltAgreementInfo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 丢失报备
|
||||
* @author ma_sh
|
||||
*/
|
||||
@Mapper
|
||||
public interface LossAssignMapper {
|
||||
|
||||
/**
|
||||
* 根据协议Id查询在用安全工器具编码
|
||||
* @param sltAgreementInfo
|
||||
* @return
|
||||
*/
|
||||
List<SltAgreementInfo> getUseData(SltAgreementInfo sltAgreementInfo);
|
||||
|
||||
/**
|
||||
* 批量查询
|
||||
* @param agreementId
|
||||
* @param pairs
|
||||
* @return
|
||||
*/
|
||||
List<SltAgreementInfo> getBatchInfo(@Param("agreementId") Long agreementId, @Param("pairs") List<SltAgreementInfo> pairs);
|
||||
|
||||
/**
|
||||
* 生成丢失单号
|
||||
* @return
|
||||
*/
|
||||
Integer getListAll();
|
||||
|
||||
/**
|
||||
* 保存主表
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
int saveDirectApplyInfo(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 保存详情表
|
||||
* @param lossAssignDetails
|
||||
* @return
|
||||
*/
|
||||
int saveDirectApplyDetails(List<LossAssignDetails> lossAssignDetails);
|
||||
|
||||
/**
|
||||
* 根据project_id获取external_id
|
||||
* @param projectId
|
||||
* @return
|
||||
*/
|
||||
LossAssignInfo getExternalId(int projectId);
|
||||
|
||||
/**
|
||||
* 获取项目经理id
|
||||
* @param externalId
|
||||
* @return
|
||||
*/
|
||||
String getDeptId(String externalId);
|
||||
|
||||
/**
|
||||
* 获取项目经理账号
|
||||
* @param leaderId
|
||||
* @return
|
||||
*/
|
||||
String getUserNameById(String leaderId);
|
||||
|
||||
/**
|
||||
* 获取项目经理账号
|
||||
* @param userName
|
||||
* @return
|
||||
*/
|
||||
List<WorkPeopleInfo> getUserIdByUserName(String userName);
|
||||
|
||||
/**
|
||||
* 插入工单
|
||||
* @param workApplyInfo
|
||||
* @return
|
||||
*/
|
||||
int insertWorkOrder(WorkApplyInfo workApplyInfo);
|
||||
|
||||
/**
|
||||
* 插入工单
|
||||
* @param workPeopleInfo
|
||||
* @return
|
||||
*/
|
||||
int insertWorkPeople(WorkPeopleInfo workPeopleInfo);
|
||||
|
||||
/**
|
||||
* 更新主表
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
int updateDirectApplyInfo(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 删除详情表
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
int deleteDirectApplyDetails(Integer id);
|
||||
|
||||
/**
|
||||
* 删除工单
|
||||
* @param newId
|
||||
*/
|
||||
void deleteWorkflowRecord(int newId);
|
||||
|
||||
/**
|
||||
* 删除主表
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
int deleteDirectApplyInfo(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 根据id查询
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
LossAssignInfo getInfoById(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 查询详情表信息
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
List<LossAssignDetails> getDetailsById(Integer id);
|
||||
|
||||
/**
|
||||
* 根据项目id查询部门信息
|
||||
* @param info
|
||||
* @return
|
||||
*/
|
||||
LossAssignInfo getDeptInfo(LossAssignInfo info);
|
||||
|
||||
/**
|
||||
* 根据id查询详情表信息
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
LossAssignInfo getInfoDetails(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 查询审批人
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
List<WorkPeopleInfo> getUseList(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
* @param maId
|
||||
* @param maStatus
|
||||
* @return
|
||||
*/
|
||||
int updateStatus(@Param("maId") Long maId, @Param("maStatus") int maStatus);
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
List<LossAssignInfo> getList(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 查询类型
|
||||
* @param agreementId
|
||||
* @return
|
||||
*/
|
||||
List<Type> selectMaTypeThreeLists(Long agreementId);
|
||||
|
||||
/**
|
||||
* 查询数量
|
||||
* @param detail
|
||||
* @return
|
||||
*/
|
||||
LossAssignDetails getNumList(LossAssignDetails detail);
|
||||
|
||||
/**
|
||||
* 真正删除详情表内容
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
int deleteApplyDetails(Integer id);
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
package com.bonus.material.lossAssessment.service;
|
||||
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
import com.bonus.material.lossAssessment.domain.LossAssignInfo;
|
||||
import com.bonus.material.lossAssessment.domain.LossAssignVo;
|
||||
import com.bonus.material.ma.domain.Type;
|
||||
import com.bonus.material.settlement.domain.SltAgreementInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 丢失报备service
|
||||
* @author ma_sh
|
||||
*/
|
||||
public interface LossAssignService {
|
||||
|
||||
/**
|
||||
* 根据协议Id查询在用数据
|
||||
* @param sltAgreementInfo
|
||||
* @return
|
||||
*/
|
||||
List<SltAgreementInfo> getUseData(SltAgreementInfo sltAgreementInfo);
|
||||
|
||||
/**
|
||||
* 批量查询待转数量
|
||||
* @param agreementId
|
||||
* @param pairs
|
||||
* @return
|
||||
*/
|
||||
List<SltAgreementInfo> getBatchInfo(Long agreementId, List<SltAgreementInfo> pairs);
|
||||
|
||||
/**
|
||||
* 新增申请
|
||||
* @param lossAssignVo
|
||||
* @return
|
||||
*/
|
||||
AjaxResult add(LossAssignVo lossAssignVo);
|
||||
|
||||
/**
|
||||
* 修改申请
|
||||
* @param lossAssignVo
|
||||
* @return
|
||||
*/
|
||||
AjaxResult edit(LossAssignVo lossAssignVo);
|
||||
|
||||
/**
|
||||
* 删除申请
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
AjaxResult remove(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 查看详情
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
AjaxResult getInfoById(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 报备丢失审批
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
AjaxResult updateDirectSysWorkflowRecordHistory(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 丢失报备查询列表
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
List<LossAssignInfo> getList(LossAssignInfo lossAssignInfo);
|
||||
|
||||
/**
|
||||
* 获取物资类型连动式下拉框
|
||||
* @param typeId
|
||||
* @param agreementId
|
||||
* @return
|
||||
*/
|
||||
List<Type> getEquipmentThreeTypes(Long typeId, Long agreementId);
|
||||
}
|
||||
|
|
@ -0,0 +1,924 @@
|
|||
package com.bonus.material.lossAssessment.service.impl;
|
||||
|
||||
import com.bonus.common.biz.domain.lease.WorkApplyInfo;
|
||||
import com.bonus.common.biz.domain.lease.WorkPeopleInfo;
|
||||
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.clz.domain.BmTeam;
|
||||
import com.bonus.material.clz.domain.direct.ClzDirectApplyDetails;
|
||||
import com.bonus.material.clz.domain.direct.WorkflowEvent;
|
||||
import com.bonus.material.clz.mapper.MaterialMachineMapper;
|
||||
import com.bonus.material.common.mapper.SelectMapper;
|
||||
import com.bonus.material.lease.mapper.LeaseTaskMapper;
|
||||
import com.bonus.material.lossAssessment.domain.LossAssignDetails;
|
||||
import com.bonus.material.lossAssessment.domain.LossAssignInfo;
|
||||
import com.bonus.material.lossAssessment.domain.LossAssignVo;
|
||||
import com.bonus.material.lossAssessment.mapper.LossAssignMapper;
|
||||
import com.bonus.material.lossAssessment.service.LossAssignService;
|
||||
import com.bonus.material.ma.domain.DirectApplyUrl;
|
||||
import com.bonus.material.ma.domain.Type;
|
||||
import com.bonus.material.settlement.domain.SltAgreementInfo;
|
||||
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.SysWorkflowNodeMapper;
|
||||
import com.bonus.material.work.mapper.SysWorkflowRecordHistoryMapper;
|
||||
import com.bonus.material.work.mapper.SysWorkflowRecordMapper;
|
||||
import com.bonus.material.work.mapper.SysWorkflowTypeMapper;
|
||||
import com.bonus.system.api.domain.SysUser;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
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.*;
|
||||
|
||||
/**
|
||||
* 丢失报备服务实现类
|
||||
*/
|
||||
@Service("LossAssignService")
|
||||
@Validated
|
||||
@Slf4j
|
||||
public class LossAssignServiceImpl implements LossAssignService {
|
||||
|
||||
@Resource
|
||||
private LossAssignMapper mapper;
|
||||
|
||||
@Resource
|
||||
private SysWorkflowTypeMapper sysWorkflowTypeMapper;
|
||||
|
||||
@Resource
|
||||
private SysWorkflowRecordMapper sysWorkflowRecordMapper;
|
||||
|
||||
@Resource
|
||||
private SysWorkflowRecordHistoryMapper sysWorkflowRecordHistoryMapper;
|
||||
|
||||
@Resource
|
||||
private SysWorkflowNodeMapper sysWorkflowNodeMapper;
|
||||
|
||||
@Resource
|
||||
private LeaseTaskMapper lMapper;
|
||||
|
||||
@Resource
|
||||
private MaterialMachineMapper materialMachineMapper;
|
||||
|
||||
@Resource
|
||||
private SelectMapper selectMapper;
|
||||
|
||||
/**
|
||||
* 根据协议Id查询在用安全工器具编码
|
||||
* @param sltAgreementInfo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<SltAgreementInfo> getUseData(SltAgreementInfo sltAgreementInfo) {
|
||||
return mapper.getUseData(sltAgreementInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量查询待转数量
|
||||
* @param agreementId
|
||||
* @param pairs
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<SltAgreementInfo> getBatchInfo(Long agreementId, List<SltAgreementInfo> pairs) {
|
||||
return mapper.getBatchInfo(agreementId, pairs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增申请
|
||||
* @param lossAssignVo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public AjaxResult add(LossAssignVo lossAssignVo) {
|
||||
try {
|
||||
int id;
|
||||
String code;
|
||||
if (lossAssignVo != null) {
|
||||
if (lossAssignVo.getLossAssignInfo() != null) {
|
||||
LossAssignInfo lossAssignInfo = lossAssignVo.getLossAssignInfo();
|
||||
// 获取丢失单号
|
||||
code = genderLossCode();
|
||||
lossAssignInfo.setCode(code);
|
||||
lossAssignInfo.setCreateTime(new Date());
|
||||
List<String> urls = new ArrayList<>();
|
||||
if (lossAssignVo.getLossAssignInfo().getDirUrls() != null) {
|
||||
List<DirectApplyUrl> dirUrls = lossAssignVo.getLossAssignInfo().getDirUrls();
|
||||
for (DirectApplyUrl dirUrl : dirUrls){
|
||||
urls.add(dirUrl.getUrl());
|
||||
}
|
||||
//将urls所有内容用逗号拼接
|
||||
lossAssignInfo.setLossUrl(String.join(",", urls));
|
||||
}
|
||||
lossAssignInfo.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString());
|
||||
// 待审核
|
||||
lossAssignInfo.setStatus(0);
|
||||
//保存主表
|
||||
int i = mapper.saveDirectApplyInfo(lossAssignInfo);
|
||||
if (i < 0) {
|
||||
throw new RuntimeException("保存主表失败");
|
||||
}
|
||||
id = lossAssignInfo.getId();
|
||||
} else {
|
||||
return AjaxResult.error("参数不能为空");
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(lossAssignVo.getLossAssignDetails())) {
|
||||
lossAssignVo.getLossAssignDetails().forEach(lossAssignDetails -> {
|
||||
lossAssignDetails.setLossId(id);
|
||||
lossAssignDetails.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString());
|
||||
});
|
||||
int i = mapper.saveDirectApplyDetails(lossAssignVo.getLossAssignDetails());
|
||||
if (i < 0) {
|
||||
throw new RuntimeException("保存明细表失败");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return AjaxResult.error("保存失败");
|
||||
}
|
||||
// 新增审批流
|
||||
addSysWorkflowRecord(new WorkflowEvent(id, code, TM_TASK_LOSS_REPORT.getTaskTypeId(), lossAssignVo.getLossAssignInfo().getLossProName(), 0, null, lossAssignVo.getLossAssignInfo().getLossUnitId(), lossAssignVo.getLossAssignInfo().getLossProId()));
|
||||
} catch (RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return AjaxResult.success("保存成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改申请
|
||||
* @param lossAssignVo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public AjaxResult edit(LossAssignVo lossAssignVo) {
|
||||
if (lossAssignVo == null || lossAssignVo.getLossAssignInfo() == null || CollectionUtils.isEmpty(lossAssignVo.getLossAssignDetails())) {
|
||||
return AjaxResult.error("参数不能为空");
|
||||
}
|
||||
// 判断是否有新增可申请数量为0的设备
|
||||
List<LossAssignDetails> assignDetails = lossAssignVo.getLossAssignDetails();
|
||||
// 根据id查询当前单子数据,剔除当前单子数据
|
||||
List<LossAssignDetails> details = mapper.getDetailsById(lossAssignVo.getLossAssignInfo().getId());
|
||||
// 将details中的maId提取出来
|
||||
Set<Long> maIds = details.stream().map(LossAssignDetails::getMaId).collect(Collectors.toSet());
|
||||
// 将assignDetails中transNum为0,且maId不存在为maIds的maCode全部提取出来
|
||||
List<String> maCodes = assignDetails.stream().filter(assignDetail -> assignDetail.getTransNum().compareTo(BigDecimal.ZERO) == 0 && !maIds.contains(assignDetail.getMaId())).map(LossAssignDetails::getMaCode).collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(maCodes)) {
|
||||
return AjaxResult.error("设备编码:" + String.join(",", maCodes) + "可申请数量为0,请重新选择");
|
||||
}
|
||||
try {
|
||||
LossAssignInfo lossAssignInfo = lossAssignVo.getLossAssignInfo();
|
||||
lossAssignInfo.setCreateTime(DateUtils.getNowDate());
|
||||
lossAssignInfo.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
|
||||
|
||||
List<String> urls = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(lossAssignInfo.getDirUrls())) {
|
||||
List<DirectApplyUrl> dirUrls = lossAssignInfo.getDirUrls();
|
||||
for (DirectApplyUrl dirUrl : dirUrls) {
|
||||
urls.add(dirUrl.getUrl());
|
||||
}
|
||||
//将urls所有内容用逗号拼接
|
||||
lossAssignInfo.setLossUrl(String.join(",", urls));
|
||||
}
|
||||
// 修改info表
|
||||
// 待审核
|
||||
lossAssignInfo.setStatus(0);
|
||||
int i = mapper.updateDirectApplyInfo(lossAssignInfo);
|
||||
if (i < 0) {
|
||||
throw new RuntimeException("修改主表失败");
|
||||
}
|
||||
// 真正删除详情表内容
|
||||
i = mapper.deleteApplyDetails(lossAssignInfo.getId());
|
||||
if (i < 0) {
|
||||
throw new RuntimeException("删除详情表失败");
|
||||
}
|
||||
|
||||
List<LossAssignDetails> lossAssignDetails = lossAssignVo.getLossAssignDetails();
|
||||
Integer id = lossAssignVo.getLossAssignInfo().getId();
|
||||
lossAssignDetails.forEach(lossAssignDetail -> {
|
||||
lossAssignDetail.setLossId(id);
|
||||
lossAssignDetail.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString());
|
||||
});
|
||||
i = mapper.saveDirectApplyDetails(lossAssignDetails);
|
||||
if (i < 0) {
|
||||
throw new RuntimeException("保存明细表失败");
|
||||
}
|
||||
|
||||
// 修改审批流
|
||||
updateSysWorkflowRecord(new WorkflowEvent(lossAssignVo.getLossAssignInfo().getId(), lossAssignVo.getLossAssignInfo().getCode(), TM_TASK_LOSS_REPORT.getTaskTypeId(), lossAssignVo.getLossAssignInfo().getLossProName(), lossAssignVo.getLossAssignInfo().getAgreementId(), null, lossAssignVo.getLossAssignInfo().getLossUnitId(), lossAssignVo.getLossAssignInfo().getLossProId()));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
throw new RuntimeException("修改失败,请联系管理员");
|
||||
}
|
||||
return AjaxResult.success("修改成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除申请
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public AjaxResult remove(LossAssignInfo lossAssignInfo) {
|
||||
try {
|
||||
// 删除主表
|
||||
int i = mapper.deleteDirectApplyInfo(lossAssignInfo);
|
||||
if (i < 0) {
|
||||
throw new RuntimeException("删除主表失败");
|
||||
}
|
||||
// 删除详情表
|
||||
i += mapper.deleteDirectApplyDetails(lossAssignInfo.getId());
|
||||
if (i < 0) {
|
||||
throw new RuntimeException("删除详情表失败");
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
log.error("删除失败:{}", e.getMessage());
|
||||
}
|
||||
return AjaxResult.success("删除成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看详情
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult getInfoById(LossAssignInfo lossAssignInfo) {
|
||||
LossAssignVo lossAssignVo = new LossAssignVo();
|
||||
// 先查询info表信息
|
||||
LossAssignInfo info = mapper.getInfoById(lossAssignInfo);
|
||||
// 根据领退料i8工程id查询分公司及项目部信息
|
||||
LossAssignInfo leaseApplyInfo = mapper.getDeptInfo(info);
|
||||
if (leaseApplyInfo != null) {
|
||||
info.setLossDepartName(leaseApplyInfo.getLossDepartName());
|
||||
info.setLossImpUnitName(leaseApplyInfo.getLossImpUnitName());
|
||||
}
|
||||
if (StringUtils.isNotBlank(info.getLossUrl())) {
|
||||
//用逗号分割放入数组
|
||||
String[] split = info.getLossUrl().split(",");
|
||||
List<DirectApplyUrl> list1 = new ArrayList<>();
|
||||
for (String s : split) {
|
||||
list1.add(new DirectApplyUrl(s));
|
||||
}
|
||||
info.setDirUrls(list1);
|
||||
}
|
||||
lossAssignVo.setLossAssignInfo(info);
|
||||
// 查询详情表信息
|
||||
List<LossAssignDetails> details = mapper.getDetailsById(lossAssignInfo.getId());
|
||||
if (!CollectionUtils.isEmpty(details)) {
|
||||
// 根据协议id,类型id及设备id查询待转及可转数量
|
||||
for (LossAssignDetails detail : details) {
|
||||
LossAssignDetails assignDetails = mapper.getNumList(detail);
|
||||
if (assignDetails != null) {
|
||||
if (detail.getLossId().equals(assignDetails.getLossId())) {
|
||||
detail.setWaitTransNum(BigDecimal.ZERO);
|
||||
detail.setTransNum(BigDecimal.ONE);
|
||||
} else {
|
||||
detail.setWaitTransNum(assignDetails.getWaitTransNum());
|
||||
detail.setTransNum(BigDecimal.ZERO);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
lossAssignVo.setLossAssignDetails(details);
|
||||
return AjaxResult.success(lossAssignVo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 报备丢失审批
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult updateDirectSysWorkflowRecordHistory(LossAssignInfo lossAssignInfo) {
|
||||
Integer isAccept = lossAssignInfo.getIsAccept();
|
||||
String remark = lossAssignInfo.getRemark();
|
||||
// 考虑工单直转,参数只有一个id,故从后台查询详细数据
|
||||
lossAssignInfo = mapper.getInfoDetails(lossAssignInfo);
|
||||
lossAssignInfo.setIsAccept(isAccept);
|
||||
lossAssignInfo.setRemark(remark);
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
|
||||
Long userId = sysUser.getUserId();
|
||||
Integer taskId = lossAssignInfo.getId();
|
||||
String recordCode = lossAssignInfo.getCode();
|
||||
Integer nextNodeId = lossAssignInfo.getNextNodeId();
|
||||
Integer nodeId = lossAssignInfo.getNodeId();
|
||||
lossAssignInfo.setCreateBy(userId.toString());
|
||||
if (lossAssignInfo.getIsAccept() == null) {
|
||||
throw new ServiceException("请选择是否接受审批");
|
||||
}
|
||||
|
||||
// 查询出【当前任务所属审批流】的所有节点
|
||||
List<SysWorkflowNode> sysWorkflowNodeList = getWorkflowNodes(lossAssignInfo);
|
||||
if (lossAssignInfo.getIsAccept() == 1) {
|
||||
// 处理审批通过✅
|
||||
handleDirectApproval(sysWorkflowNodeList, lossAssignInfo, sysUser, taskId, recordCode, nextNodeId, nodeId);
|
||||
} else {
|
||||
// 处理审核驳回❌
|
||||
handleDirectReject(sysWorkflowNodeList, lossAssignInfo, taskId);
|
||||
}
|
||||
return AjaxResult.success("操作成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 丢失报备查询列表
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<LossAssignInfo> getList(LossAssignInfo lossAssignInfo) {
|
||||
Set<String> 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<String> departId = selectMapper.getDepartId(username);
|
||||
// 根据项目部id查询工程信息
|
||||
List<String> projectIdList = selectMapper.getProjectId(departId);
|
||||
if (!org.springframework.util.CollectionUtils.isEmpty(projectIdList)) {
|
||||
lossAssignInfo.setProjectIdList(projectIdList);
|
||||
}
|
||||
// 部门查询赋值
|
||||
extractedDept(lossAssignInfo);
|
||||
}
|
||||
}
|
||||
|
||||
List<LossAssignInfo> list = mapper.getList(lossAssignInfo);
|
||||
if (!com.alibaba.nacos.common.utils.CollectionUtils.isEmpty(list) && teamData != null) {
|
||||
list = list.stream()
|
||||
.filter(item ->
|
||||
(StringUtils.isNotBlank(item.getBzIdCard()) && Objects.equals(username, item.getBzIdCard()))
|
||||
)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取物资类型连动式下拉框
|
||||
* @param typeId
|
||||
* @param agreementId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<Type> getEquipmentThreeTypes(Long typeId, Long agreementId) {
|
||||
List<Type> maTypes = mapper.selectMaTypeThreeLists(agreementId);
|
||||
List<Type> list = new ArrayList<>();
|
||||
for (Type maType : maTypes) {
|
||||
if (maType.getParentId() == 0) {
|
||||
list.add(maType);
|
||||
}
|
||||
}
|
||||
//根据父节点获取对应的儿子节点
|
||||
for (Type maType : list) {
|
||||
List<Type> child = getChild(maTypes, maType.getTypeId());
|
||||
maType.setChildren(child);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归调用获取子级
|
||||
*
|
||||
* @param list 集合
|
||||
* @param parentId 父级id
|
||||
*/
|
||||
public List<Type> getChild(List<Type> list, Long parentId) {
|
||||
List<Type> childList = new ArrayList<Type>();
|
||||
for (Type maType : list) {
|
||||
Long typeId = maType.getTypeId();
|
||||
Long pid = maType.getParentId();
|
||||
if (parentId.equals(pid)) {
|
||||
List<Type> childLists = getChild(list, typeId);
|
||||
maType.setChildren(childLists);
|
||||
childList.add(maType);
|
||||
}
|
||||
}
|
||||
return childList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 部门查询赋值
|
||||
* @param lossAssignInfo
|
||||
*/
|
||||
private void extractedDept(LossAssignInfo lossAssignInfo) {
|
||||
String deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId().toString();
|
||||
Set<String> 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)) {
|
||||
lossAssignInfo.setImpUnit(deptId);
|
||||
} else {
|
||||
//判断祖籍是否包含分公司
|
||||
String ancestors = selectMapper.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)) {
|
||||
lossAssignInfo.setImpUnit(trimmedPart);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查用户是否具有特殊角色
|
||||
* @param userRoles
|
||||
* @return
|
||||
*/
|
||||
private boolean hasSpecialRole(Set<String> userRoles) {
|
||||
if (userRoles == null) {
|
||||
return false;
|
||||
}
|
||||
List<String> allowedRoles = Collections.singletonList("clzcx");
|
||||
return allowedRoles.stream().anyMatch(userRoles::contains);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理审核驳回❌
|
||||
* @param sysWorkflowNodeList
|
||||
* @param lossAssignInfo
|
||||
* @param taskId
|
||||
*/
|
||||
private void handleDirectReject(List<SysWorkflowNode> sysWorkflowNodeList, LossAssignInfo lossAssignInfo, Integer taskId) {
|
||||
updateWorkflowStatus(taskId, 3);
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
|
||||
// 修改工单信息
|
||||
updateWorkOrder(lossAssignInfo.getRecordId(), sysUser.getUserName());
|
||||
for (int i = 0; i < sysWorkflowNodeList.size(); i++) {
|
||||
// 判断列表中哪个节点是当前审批的节点,如果不是审批的节点不处理
|
||||
if (lossAssignInfo.getNextNodeId().equals(sysWorkflowNodeList.get(i).getId())) {
|
||||
log.info("-------------进入到了当前审批的节点-------------");
|
||||
//插入history表中
|
||||
SysWorkflowRecordHistory history = new SysWorkflowRecordHistory();
|
||||
history.setNodeId(lossAssignInfo.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(lossAssignInfo.getRemark());
|
||||
history.setRecordId(lossAssignInfo.getRecordId());
|
||||
history.setIsAccept(lossAssignInfo.getIsAccept());
|
||||
history.setCreateBy(sysUser.getUserId().toString());
|
||||
sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(history);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改工单信息
|
||||
* @param recordId
|
||||
* @param userName
|
||||
*/
|
||||
private void updateWorkOrder(Integer recordId, String userName) {
|
||||
WorkPeopleInfo peopleInfo = new WorkPeopleInfo();
|
||||
peopleInfo.setFlowId(recordId);
|
||||
peopleInfo.setReceiverUsername(userName);
|
||||
|
||||
List<WorkPeopleInfo> infos = lMapper.getWorkPeopleInfo(peopleInfo);
|
||||
if (com.alibaba.nacos.common.utils.CollectionUtils.isNotEmpty(infos)) {
|
||||
for (WorkPeopleInfo info : infos) {
|
||||
peopleInfo.setInformationId(info.getInformationId());
|
||||
lMapper.updateWorkPeopleInfo(peopleInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改任务状态
|
||||
*
|
||||
* @param taskId
|
||||
* @param status
|
||||
*/
|
||||
private void updateWorkflowStatus(Integer taskId, int status) {
|
||||
SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord();
|
||||
sysWorkflowRecord.setTaskId(taskId);
|
||||
sysWorkflowRecord.setWorkflowStatus(status);
|
||||
sysWorkflowRecord.setTaskType(26);
|
||||
sysWorkflowRecordMapper.updateSysWorkflowRecord(sysWorkflowRecord);
|
||||
// 修改bm_loss_assign表状态为驳回
|
||||
LossAssignInfo lossAssignInfo = new LossAssignInfo();
|
||||
lossAssignInfo.setId(taskId);
|
||||
lossAssignInfo.setStatus(status);
|
||||
mapper.updateDirectApplyInfo(lossAssignInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理审批通过✅
|
||||
* @param sysWorkflowNodeList
|
||||
* @param lossAssignInfo
|
||||
* @param sysUser
|
||||
* @param taskId
|
||||
* @param recordCode
|
||||
* @param nextNodeId
|
||||
* @param nodeId
|
||||
*/
|
||||
private void handleDirectApproval(List<SysWorkflowNode> sysWorkflowNodeList, LossAssignInfo lossAssignInfo, SysUser sysUser, Integer taskId, String recordCode, Integer nextNodeId, Integer nodeId) {
|
||||
boolean found = false;
|
||||
List<WorkPeopleInfo> userList = new ArrayList<>();
|
||||
for (int i = 0; i < sysWorkflowNodeList.size(); i++) {
|
||||
// 判断列表中哪个节点是当前审批的节点,如果不是审批的节点不处理
|
||||
if (lossAssignInfo.getNextNodeId().equals(sysWorkflowNodeList.get(i).getId())) {
|
||||
log.info("-------------进入到了当前审批的节点-------------");
|
||||
//插入history表中
|
||||
SysWorkflowRecordHistory history = new SysWorkflowRecordHistory();
|
||||
history.setNodeId(lossAssignInfo.getNextNodeId());
|
||||
SysWorkflowRecordHistory sysWorkflowRecordHistory = new SysWorkflowRecordHistory();
|
||||
sysWorkflowRecordHistory.setRecordId(lossAssignInfo.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);
|
||||
}
|
||||
//目前定义为安全工器具为刘春杰审批
|
||||
if (history.getNextNodeId() != null && history.getNextNodeId() == 47) {
|
||||
lossAssignInfo.setUserId(1549L);
|
||||
userList = mapper.getUseList(lossAssignInfo);
|
||||
}
|
||||
String userIds = userList.stream().map(WorkPeopleInfo::getUserId).map(String::valueOf).collect(Collectors.joining(","));
|
||||
history.setDirectUserIds(userIds);
|
||||
history.setRemark(lossAssignInfo.getRemark());
|
||||
history.setRecordId(lossAssignInfo.getRecordId());
|
||||
history.setIsAccept(lossAssignInfo.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(lossAssignInfo.getRecordId(), sysUser.getUserName());
|
||||
// 如果下个节点⬇存在的话,那么就创建下个节点⬇的工单信息
|
||||
if (nextNodeId != null && com.alibaba.nacos.common.utils.CollectionUtils.isNotEmpty(userList)) {
|
||||
createWorkOrderAndPeopleDirect(sysUser, lossAssignInfo.getLossProName(), taskId, recordCode, lossAssignInfo.getRecordId(), nextNodeId, userList);
|
||||
} else {
|
||||
int result = 0;
|
||||
//处理设备状态为丢失状态
|
||||
List<LossAssignDetails> detailsById = mapper.getDetailsById(lossAssignInfo.getId());
|
||||
for (LossAssignDetails details : detailsById) {
|
||||
result = mapper.updateStatus(details.getMaId(), 18);
|
||||
if (result == 0) {
|
||||
throw new ServiceException("更新设备状态失败");
|
||||
}
|
||||
}
|
||||
// 更新任务状态为已完成
|
||||
updateWorkflowStatus(lossAssignInfo.getId(), 2);
|
||||
}
|
||||
log.info("-------------节点更新工单信息结束-------------");
|
||||
} catch (Exception e) {
|
||||
System.err.println("更新工单信息失败:" + e.getMessage());
|
||||
log.error("更新工单信息失败: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理审批通过
|
||||
* @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<WorkPeopleInfo> userList) {
|
||||
String id = UUID.randomUUID().toString().replace("-", "");
|
||||
String webUrlBase = "/mea-h5/#/pages/businessAudit/siteDirectAudit/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 = mapper.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);
|
||||
mapper.insertWorkPeople(workPeopleInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审批所有节点
|
||||
* @param lossAssignInfo
|
||||
* @return
|
||||
*/
|
||||
private List<SysWorkflowNode> getWorkflowNodes(LossAssignInfo lossAssignInfo) {
|
||||
SysWorkflowNode sysWorkflowNode = new SysWorkflowNode();
|
||||
sysWorkflowNode.setTypeId(23);
|
||||
List<SysWorkflowNode> sysWorkflowNodeList = sysWorkflowNodeMapper.selectSysWorkflowNodeList(sysWorkflowNode);
|
||||
if (sysWorkflowNodeList == null || sysWorkflowNodeList.isEmpty()) {
|
||||
throw new ServiceException("流程节点配置为空");
|
||||
}
|
||||
return sysWorkflowNodeList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改审批流
|
||||
* @param event
|
||||
*/
|
||||
private void updateSysWorkflowRecord(WorkflowEvent event) {
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
|
||||
SysWorkflowRecord recordInfo = new SysWorkflowRecord();
|
||||
int count = 0;
|
||||
//获取审批流id
|
||||
SysWorkflowType sysWorkflowType = new SysWorkflowType();
|
||||
sysWorkflowType.setTaskType(event.getTaskType());
|
||||
sysWorkflowType.setIsEnable(1);
|
||||
List<SysWorkflowType> sysWorkflowTypeList = sysWorkflowTypeMapper.selectSysWorkflowTypeList(sysWorkflowType);
|
||||
if (sysWorkflowTypeList.isEmpty()) {
|
||||
throw new ServiceException("新增任务审批记录失败,请创建审核流程");
|
||||
}
|
||||
SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord();
|
||||
if (sysWorkflowTypeList.size() == 1) {
|
||||
// 如果该任务类型配置了一个审批流,则直接使用
|
||||
sysWorkflowType = sysWorkflowTypeList.get(0);
|
||||
// 先根据id查询该数据是否已经存在
|
||||
recordInfo = sysWorkflowRecordMapper.getWorkflowRecordHistory(event);
|
||||
// 根据id删除该数据
|
||||
if (recordInfo != null) {
|
||||
sysWorkflowRecordMapper.deleteSysWorkflowRecord(event);
|
||||
}
|
||||
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<SysWorkflowNode> 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());
|
||||
//根据project_id获取external_id
|
||||
List<WorkPeopleInfo> userList = new ArrayList<>();
|
||||
LossAssignInfo lossAssignInfo = mapper.getExternalId(Integer.parseInt(event.getLeaseProId()));
|
||||
if (lossAssignInfo != null) {
|
||||
//获取项目经理id
|
||||
String leaderId = mapper.getDeptId(lossAssignInfo.getLossExternalId());
|
||||
//获取项目经理账号
|
||||
String leaderAccount = mapper.getUserNameById(leaderId);
|
||||
if (leaderAccount != null && !leaderAccount.isEmpty()) {
|
||||
userList = mapper.getUserIdByUserName(leaderAccount);
|
||||
}
|
||||
if (com.alibaba.nacos.common.utils.CollectionUtils.isNotEmpty(userList)) {
|
||||
String userIds = userList.stream().map(WorkPeopleInfo::getUserId).map(String::valueOf).collect(Collectors.joining(","));
|
||||
sysWorkflowRecordHistory.setDirectUserIds(userIds);
|
||||
} else {
|
||||
mapper.deleteWorkflowRecord(newId);
|
||||
log.info("项目经理账号不存在");
|
||||
}
|
||||
}
|
||||
// 先根据id查询该数据是否已经存在
|
||||
if (recordInfo != null) {
|
||||
SysWorkflowRecordHistory info = sysWorkflowRecordHistoryMapper.getHistoryInfo(recordInfo.getId());
|
||||
if (info != null) {
|
||||
// 将审核记录删除,重新添加
|
||||
sysWorkflowRecordHistoryMapper.deleteSysWorkflowRecordHistory(recordInfo.getId());
|
||||
}
|
||||
}
|
||||
sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(sysWorkflowRecordHistory);
|
||||
if (count > 0 && com.alibaba.nacos.common.utils.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());
|
||||
}
|
||||
assert lossAssignInfo != null;
|
||||
createWorkOrderAndPeople(sysUser, event, Long.valueOf(sysWorkflowRecord.getTaskId()), newId, sysWorkflowRecordHistory.getNodeId(), userList, lossAssignInfo.getLossProName());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增审批流
|
||||
* @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<SysWorkflowType> 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<SysWorkflowNode> 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());
|
||||
//根据project_id获取external_id
|
||||
List<WorkPeopleInfo> userList = new ArrayList<>();
|
||||
LossAssignInfo lossAssignInfo = mapper.getExternalId(Integer.parseInt(event.getLeaseProId()));
|
||||
if (lossAssignInfo != null) {
|
||||
//获取项目经理id
|
||||
String leaderId = mapper.getDeptId(lossAssignInfo.getLossExternalId());
|
||||
//获取项目经理账号
|
||||
String leaderAccount = mapper.getUserNameById(leaderId);
|
||||
if (leaderAccount != null && !leaderAccount.isEmpty()) {
|
||||
userList = mapper.getUserIdByUserName(leaderAccount);
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(userList)) {
|
||||
String userIds = userList.stream().map(WorkPeopleInfo::getUserId).map(String::valueOf).collect(Collectors.joining(","));
|
||||
sysWorkflowRecordHistory.setDirectUserIds(userIds);
|
||||
}
|
||||
}
|
||||
sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(sysWorkflowRecordHistory);
|
||||
|
||||
if (count > 0 && !CollectionUtils.isEmpty(userList)) {
|
||||
assert lossAssignInfo != null;
|
||||
createWorkOrderAndPeople(sysUser, event, Long.valueOf(sysWorkflowRecord.getTaskId()), newId, sysWorkflowRecordHistory.getNodeId(), userList, lossAssignInfo.getLossProName());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建工单和工单人员
|
||||
* @param sysUser
|
||||
* @param event
|
||||
* @param taskId
|
||||
* @param newId
|
||||
* @param nodeId
|
||||
* @param userList
|
||||
* @param projectName
|
||||
*/
|
||||
private void createWorkOrderAndPeople(SysUser sysUser, WorkflowEvent event, Long taskId, int newId, int nodeId, List<WorkPeopleInfo> userList, String projectName) {
|
||||
String id = UUID.randomUUID().toString().replace("-", "");
|
||||
String webUrlBase = "/mea-h5/#/pages/businessAudit/siteDirectAudit/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 = mapper.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);
|
||||
mapper.insertWorkPeople(workPeopleInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成丢失单号
|
||||
* @return
|
||||
*/
|
||||
private String genderLossCode() {
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
|
||||
Date date = new Date();
|
||||
String format = simpleDateFormat.format(date);
|
||||
Integer total = mapper.getListAll();
|
||||
return "DS" + format + "-" + (total + 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package com.bonus.material.work.mapper;
|
||||
|
||||
import com.bonus.common.biz.domain.lease.LeaseApplyInfo;
|
||||
import com.bonus.material.clz.domain.direct.WorkflowEvent;
|
||||
import com.bonus.material.work.domain.SysWorkflowRecord;
|
||||
import com.bonus.material.work.domain.SysWorkflowRecordHistory;
|
||||
import com.bonus.material.work.domain.dto.SysWorkflowAuditDto;
|
||||
|
|
@ -45,16 +46,16 @@ public interface SysWorkflowRecordMapper {
|
|||
|
||||
/**
|
||||
* 根据id查询审批流记录信息
|
||||
* @param id
|
||||
* @param event
|
||||
* @return
|
||||
*/
|
||||
SysWorkflowRecord getWorkflowRecordHistory(Integer id);
|
||||
SysWorkflowRecord getWorkflowRecordHistory(WorkflowEvent event);
|
||||
|
||||
/**
|
||||
* 删除审批流记录信息
|
||||
* @param taskId
|
||||
* @param event
|
||||
*/
|
||||
void deleteSysWorkflowRecord(int taskId);
|
||||
void deleteSysWorkflowRecord(WorkflowEvent event);
|
||||
|
||||
int deleteRecord(int id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,7 +291,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
LEFT JOIN ma_type mt2 on mt2.type_id = mt1.parent_id
|
||||
LEFT JOIN ma_machine mm on mm.ma_id = dad.ma_id
|
||||
LEFT JOIN clz_direct_apply_info cda ON dad.direct_id = cda.id
|
||||
LEFT JOIN clz_slt_agreement_info csi ON cda.lease_agreement_id
|
||||
LEFT JOIN clz_slt_agreement_info csi ON cda.lease_agreement_id = csi.agreement_id
|
||||
LEFT JOIN clz_lease_apply_info cla ON csi.lease_id = cla.id
|
||||
WHERE dad.direct_id = #{id}
|
||||
GROUP BY
|
||||
|
|
|
|||
|
|
@ -0,0 +1,626 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.bonus.material.lossAssessment.mapper.LossAssignMapper">
|
||||
|
||||
<resultMap type="com.bonus.material.ma.domain.Type" id="TypeResult">
|
||||
<result property="typeId" column="type_id" />
|
||||
<result property="typeName" column="type_name" />
|
||||
<result property="parentId" column="parent_id" />
|
||||
<result property="keeperNickName" column="keeper_nick_name" />
|
||||
<result property="repairNickName" column="repair_nick_name" />
|
||||
<result property="houseId" column="house_id" />
|
||||
<result property="houseName" column="house_name" />
|
||||
<result property="storageNum" column="storage_num" />
|
||||
<result property="typeCode" column="type_code" />
|
||||
<result property="modelCode" column="model_code" />
|
||||
<result property="unitId" column="unit_id" />
|
||||
<result property="unitName" column="unit_name" />
|
||||
<result property="unitValue" column="unit_value" />
|
||||
<result property="sortNum" column="sort_num" />
|
||||
<result property="manageType" column="manage_type" />
|
||||
<result property="leasePrice" column="lease_price" />
|
||||
<result property="effTime" column="eff_time" />
|
||||
<result property="rentPrice" column="rent_price" />
|
||||
<result property="buyPrice" column="buy_price" />
|
||||
<result property="payRatio" column="pay_ratio" />
|
||||
<result property="payPrice" column="pay_price" />
|
||||
<result property="taxRatio" column="tax_ratio" />
|
||||
<result property="level" column="level" />
|
||||
<result property="ratedLoad" column="rated_load" />
|
||||
<result property="testLoad" column="test_load" />
|
||||
<result property="holdingTime" column="holding_time" />
|
||||
<result property="warnNum" column="warn_num" />
|
||||
<result property="delFlag" column="del_flag" />
|
||||
<result property="createBy" column="create_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="isPlan" column="is_plan" />
|
||||
<result property="isAncuo" column="is_ancuo" />
|
||||
<result property="remark" column="remark" />
|
||||
<result property="facModel" column="fac_model" />
|
||||
<result property="intelligentCode" column="intelligent_code" />
|
||||
<result property="isTest" column="is_test" />
|
||||
<result property="companyId" column="company_id" />
|
||||
<result property="samplingRatio" column="sampling_ratio" />
|
||||
<result property="isEnter" column="is_enter" />
|
||||
<result property="keeperUserId" column="keep_user_id" />
|
||||
<result property="isCheck" column="is_check" />
|
||||
<result property="jiJuType" column="jiju_type" />
|
||||
</resultMap>
|
||||
|
||||
<insert id="saveDirectApplyInfo" keyProperty="id" useGeneratedKeys="true">
|
||||
insert into bm_loss_assign
|
||||
(
|
||||
<if test="code != null and code != ''">
|
||||
code,
|
||||
</if>
|
||||
<if test="agreementId != null ">
|
||||
agreement_id,
|
||||
</if>
|
||||
<if test="lossMan != null and lossMan != ''">
|
||||
loss_man,
|
||||
</if>
|
||||
<if test="lossPhone != null and lossPhone != ''">
|
||||
phone,
|
||||
</if>
|
||||
<if test="lossUrl != null and lossUrl != ''">
|
||||
loss_url,
|
||||
</if>
|
||||
<if test="status != null">
|
||||
status,
|
||||
</if>
|
||||
<if test="createBy != null">
|
||||
create_by,
|
||||
</if>
|
||||
create_time,
|
||||
del_flag
|
||||
) values (
|
||||
<if test="code != null and code != ''">
|
||||
#{code},
|
||||
</if>
|
||||
<if test="agreementId != null">
|
||||
#{agreementId},
|
||||
</if>
|
||||
<if test="lossMan != null and lossMan != ''">
|
||||
#{lossMan},
|
||||
</if>
|
||||
<if test="lossPhone != null and lossPhone != ''">
|
||||
#{lossPhone},
|
||||
</if>
|
||||
<if test="lossUrl != null and lossUrl != ''">
|
||||
#{lossUrl},
|
||||
</if>
|
||||
<if test="status != null">
|
||||
#{status},
|
||||
</if>
|
||||
<if test="createBy != null">
|
||||
#{createBy},
|
||||
</if>
|
||||
NOW(),
|
||||
'1'
|
||||
)
|
||||
</insert>
|
||||
|
||||
<insert id="saveDirectApplyDetails">
|
||||
insert into bm_loss_assign_details(loss_assign_id, type_id, ma_id, num, create_by,create_time, del_flag)
|
||||
values
|
||||
<foreach collection="list" item="item" index="index" separator=",">
|
||||
(#{item.lossId}, #{item.typeId}, #{item.maId}, #{item.lossNum}, #{item.createBy}, NOW() , '1')
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
<insert id="insertWorkOrder" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into uni_org.sys_information
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">id,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="createUserName != null">create_user_name,</if>
|
||||
<if test="title != null">title,</if>
|
||||
<if test="content != null">content,</if>
|
||||
<if test="webAppId != null">web_app_id,</if>
|
||||
<if test="type != null">type,</if>
|
||||
<if test="extend != null">extend,</if>
|
||||
<if test="sendUserName != null">send_user_name,</if>
|
||||
<if test="webUrl != null">web_url,</if>
|
||||
<if test="typeId != null">type_id,</if>
|
||||
<if test="businessId != null">business_id,</if>
|
||||
<if test="flowState != null">flow_state,</if>
|
||||
<if test="rout != null">rout,</if>
|
||||
<if test="nextStatus != null">next_status,</if>
|
||||
<if test="extendName != null">extend_name,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">#{id},</if>
|
||||
<if test="createTime != null">now(),</if>
|
||||
<if test="createUserName != null">#{createUserName},</if>
|
||||
<if test="title != null">#{title},</if>
|
||||
<if test="content != null">#{content},</if>
|
||||
<if test="webAppId != null">#{webAppId},</if>
|
||||
<if test="type != null">#{type},</if>
|
||||
<if test="extend != null">#{extend},</if>
|
||||
<if test="sendUserName != null">#{sendUserName},</if>
|
||||
<if test="webUrl != null">#{webUrl},</if>
|
||||
<if test="typeId != null">#{typeId},</if>
|
||||
<if test="businessId != null">#{businessId},</if>
|
||||
<if test="flowState != null">#{flowState},</if>
|
||||
<if test="rout != null">#{rout},</if>
|
||||
<if test="nextStatus != null">#{nextStatus},</if>
|
||||
<if test="extendName != null">#{extendName},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<insert id="insertWorkPeople">
|
||||
insert into uni_org.sys_information_people
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">id,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="informationId != null">information_id,</if>
|
||||
<if test="readState != null">read_state,</if>
|
||||
<if test="handleState != null">handle_state,</if>
|
||||
<if test="receiverUsername != null">receiver_username,</if>
|
||||
<if test="updateUser != null">update_user,</if>
|
||||
<if test="isExamine != null">is_examine,</if>
|
||||
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">#{id},</if>
|
||||
<if test="createTime != null">now(),</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="informationId != null">#{informationId},</if>
|
||||
<if test="readState != null">#{readState},</if>
|
||||
<if test="handleState != null">#{handleState},</if>
|
||||
<if test="receiverUsername != null">#{receiverUsername},</if>
|
||||
<if test="updateUser != null">#{updateUser},</if>
|
||||
<if test="isExamine != null">#{isExamine},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateDirectApplyInfo">
|
||||
update bm_loss_assign
|
||||
set
|
||||
<if test="agreementId != null">
|
||||
agreement_id = #{agreementId},
|
||||
</if>
|
||||
<if test="lossMan != null">
|
||||
loss_man = #{lossMan},
|
||||
</if>
|
||||
<if test="lossPhone != null">
|
||||
phone = #{lossPhone},
|
||||
</if>
|
||||
<if test="lossUrl != null">
|
||||
loss_url = #{lossUrl},
|
||||
</if>
|
||||
<if test="status != null">
|
||||
status = #{status},
|
||||
</if>
|
||||
update_time= NOW()
|
||||
where id = #{id}
|
||||
</update>
|
||||
<update id="updateStatus">
|
||||
update ma_machine
|
||||
set
|
||||
ma_status = #{maStatus}
|
||||
where ma_id = #{maId}
|
||||
</update>
|
||||
|
||||
<delete id="deleteDirectApplyDetails">
|
||||
update bm_loss_assign_details
|
||||
set del_flag = '0'
|
||||
where loss_assign_id = #{id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteWorkflowRecord">
|
||||
delete from sys_workflow_record where id = #{newId}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteDirectApplyInfo">
|
||||
update bm_loss_assign
|
||||
set del_flag = '0'
|
||||
where id = #{id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteApplyDetails">
|
||||
delete from bm_loss_assign_details where loss_assign_id = #{id}
|
||||
</delete>
|
||||
|
||||
<select id="getUseData" resultType="com.bonus.material.settlement.domain.SltAgreementInfo">
|
||||
SELECT
|
||||
mt2.type_name AS typeName,
|
||||
mt.type_name AS typeModelName,
|
||||
mt.unit_name AS unitName,
|
||||
sum( sai.num ) AS useNum ,
|
||||
mm.ma_code AS maCode,
|
||||
lai.lease_person AS leasePerson,
|
||||
DATE(sai.start_time) AS startTime,
|
||||
mm.next_check_time AS nextCheckTime,
|
||||
sai.ma_id AS maId,
|
||||
sai.type_id AS typeId,
|
||||
sai.agreement_id AS agreementId,
|
||||
lai.create_time AS createTime,
|
||||
mt.unit_value AS unitValue,
|
||||
mt.jiju_type AS jiJuType
|
||||
FROM
|
||||
slt_agreement_info sai
|
||||
LEFT JOIN ma_type mt ON sai.type_id = mt.type_id
|
||||
LEFT JOIN ma_type mt2 ON mt2.type_id = mt.parent_id
|
||||
LEFT JOIN ma_machine mm ON sai.ma_id = mm.ma_id
|
||||
LEFT JOIN lease_apply_info lai ON lai.id = sai.lease_id
|
||||
WHERE
|
||||
sai.agreement_id = #{agreementId} AND sai.status = '0'
|
||||
AND mt.jiju_type = '2' AND sai.ma_id is not null
|
||||
AND mm.ma_status = '2'
|
||||
<if test="typeId != null">
|
||||
AND sai.type_id = #{typeId}
|
||||
</if>
|
||||
<if test="maId != null">
|
||||
AND mt.parent_id = #{maId}
|
||||
</if>
|
||||
<if test="startDate != null and endDate != ''">
|
||||
AND DATE_FORMAT(lai.create_time, '%Y-%m-%d' ) BETWEEN #{startDate} AND #{endDate}
|
||||
</if>
|
||||
<if test="keyWord != null and keyWord != ''">
|
||||
AND (mt2.type_name like concat('%', #{keyWord}, '%') or
|
||||
mt.type_name like concat('%', #{keyWord}, '%') or
|
||||
mm.ma_code like concat('%', #{keyWord}, '%')
|
||||
)
|
||||
</if>
|
||||
GROUP BY
|
||||
sai.type_id,
|
||||
sai.ma_id
|
||||
</select>
|
||||
|
||||
<select id="getBatchInfo" resultType="com.bonus.material.settlement.domain.SltAgreementInfo">
|
||||
SELECT
|
||||
bl.agreement_id AS agreementId,
|
||||
blad.type_id AS typeId,
|
||||
blad.ma_id AS maId,
|
||||
bl.id AS id,
|
||||
SUM(IFNULL(blad.num, 0)) AS waitTransNum -- 待转数量
|
||||
FROM
|
||||
bm_loss_assign bl
|
||||
INNER JOIN bm_loss_assign_details blad ON bl.id = blad.loss_assign_id
|
||||
WHERE
|
||||
bl.`status` IN (0, 1)
|
||||
and bl.del_flag = '1'
|
||||
and blad.del_flag = '1'
|
||||
AND bl.agreement_id = #{agreementId}
|
||||
AND (
|
||||
<foreach collection="pairs" item="pair" separator="OR">
|
||||
(blad.type_id = #{pair.typeId}
|
||||
<if test="pair.maId != null">AND blad.ma_id = #{pair.maId}</if>
|
||||
<if test="pair.maId == null">AND blad.ma_id IS NULL</if>)
|
||||
</foreach>
|
||||
)
|
||||
AND IFNULL(blad.num, 0) > 0 -- 提前过滤0值,减少计算
|
||||
GROUP BY
|
||||
bl.agreement_id, blad.type_id, blad.ma_id, bl.id;
|
||||
</select>
|
||||
|
||||
<select id="getListAll" resultType="java.lang.Integer">
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
bm_loss_assign
|
||||
</select>
|
||||
|
||||
<select id="getDeptId" resultType="java.lang.String">
|
||||
select
|
||||
project_leader_id as leaderId
|
||||
from
|
||||
data_center.dx_fb_son
|
||||
where
|
||||
id = #{externalId}
|
||||
</select>
|
||||
|
||||
<select id="getUserNameById" resultType="java.lang.String">
|
||||
select
|
||||
account as userName
|
||||
from
|
||||
data_center.dc_user
|
||||
where
|
||||
id = #{leaderId}
|
||||
</select>
|
||||
|
||||
<select id="getUserIdByUserName" resultType="com.bonus.common.biz.domain.lease.WorkPeopleInfo">
|
||||
select
|
||||
user_id as userId,
|
||||
user_name as userName
|
||||
from
|
||||
sys_user
|
||||
where user_name = #{userName}
|
||||
</select>
|
||||
|
||||
<select id="getInfoById" resultType="com.bonus.material.lossAssessment.domain.LossAssignInfo">
|
||||
SELECT DISTINCT
|
||||
bla.id AS id,
|
||||
bla.code AS code,
|
||||
bla.create_time AS createTime,
|
||||
bui.unit_id AS lossUnitId,
|
||||
bui.unit_name AS lossUnitName,
|
||||
bpl.pro_id AS lossProId,
|
||||
bpl.pro_name AS lossProName,
|
||||
bla.status as status,
|
||||
bla.loss_url as lossUrl,
|
||||
bla.loss_man as lossMan,
|
||||
bla.phone as lossPhone,
|
||||
bpl.external_id as lossExternalId
|
||||
FROM
|
||||
bm_loss_assign bla
|
||||
LEFT JOIN bm_agreement_info bai ON bla.agreement_id = bai.agreement_id
|
||||
LEFT JOIN bm_project bpl ON bpl.pro_id = bai.project_id
|
||||
LEFT JOIN bm_unit bui ON bui.unit_id = bai.unit_id
|
||||
WHERE
|
||||
bla.del_flag = '1' and bla.id = #{id}
|
||||
</select>
|
||||
|
||||
<select id="getDetailsById" resultType="com.bonus.material.lossAssessment.domain.LossAssignDetails">
|
||||
SELECT blad.id AS id,
|
||||
blad.loss_assign_id AS lossId,
|
||||
blad.type_id AS typeId,
|
||||
blad.ma_id AS maId,
|
||||
blad.num AS lossNum,
|
||||
mt1.type_name AS typeModelName,
|
||||
mt2.type_name AS typeName,
|
||||
mm.ma_code AS maCode,
|
||||
mt1.unit_name AS unitName,
|
||||
cla.lease_person AS leasePerson,
|
||||
csi.start_time AS startTime,
|
||||
bla.agreement_id AS agreementId,
|
||||
SUM(CASE WHEN csi.status = '0' and mm.ma_status = '2' THEN IFNULL(csi.num, 0) ELSE 0 END) AS useNum
|
||||
FROM bm_loss_assign_details blad
|
||||
LEFT JOIN ma_type mt1 on mt1.type_id = blad.type_id
|
||||
LEFT JOIN ma_type mt2 on mt2.type_id = mt1.parent_id
|
||||
LEFT JOIN ma_machine mm on mm.ma_id = blad.ma_id
|
||||
LEFT JOIN bm_loss_assign bla ON blad.loss_assign_id = bla.id
|
||||
LEFT JOIN slt_agreement_info csi ON bla.agreement_id = csi.agreement_id
|
||||
and csi.ma_id = mm.ma_id and csi.type_id = blad.type_id
|
||||
LEFT JOIN lease_apply_info cla ON csi.lease_id = cla.id
|
||||
WHERE blad.del_flag = '1' and blad.loss_assign_id = #{id}
|
||||
GROUP BY
|
||||
blad.type_id,
|
||||
blad.ma_id
|
||||
</select>
|
||||
|
||||
<select id="getDeptInfo" resultType="com.bonus.material.lossAssessment.domain.LossAssignInfo">
|
||||
SELECT DISTINCT
|
||||
df.project_dept AS lossDepartName,
|
||||
sd.dept_name AS lossImpUnitName
|
||||
FROM
|
||||
bm_project bp
|
||||
LEFT JOIN sys_dept sd ON sd.dept_id = bp.imp_unit
|
||||
LEFT JOIN data_center.dx_fb_son df ON bp.external_id = df.id
|
||||
WHERE
|
||||
bp.pro_center IS NOT NULL
|
||||
AND bp.external_id IS NOT NULL
|
||||
AND bp.pro_id NOT IN ( 3414, 1192, 3321, 3595 )
|
||||
AND bp.external_id = #{lossExternalId}
|
||||
AND bp.del_flag = '0'
|
||||
GROUP BY
|
||||
bp.pro_name
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<select id="getInfoDetails" resultType="com.bonus.material.lossAssessment.domain.LossAssignInfo">
|
||||
SELECT DISTINCT
|
||||
bla.id AS id,
|
||||
bla.code AS code,
|
||||
bla.create_time AS createTime,
|
||||
su.nick_name AS createBy,
|
||||
bui.unit_id AS lossUnitId,
|
||||
bui.unit_name AS lossUnitName,
|
||||
bpl.pro_id AS lossProId,
|
||||
bpl.pro_name AS lossProName,
|
||||
GROUP_CONCAT(DISTINCT mt2.type_name) as typeName,
|
||||
bla.status as status,
|
||||
swrs.direct_user as directUserIds,
|
||||
swrs.node_id AS nodeId,
|
||||
swrs.next_node_id AS nextNodeId,
|
||||
swr.id AS recordId
|
||||
FROM
|
||||
bm_loss_assign bla
|
||||
LEFT JOIN bm_agreement_info bai ON bla.agreement_id = bai.agreement_id
|
||||
LEFT JOIN bm_project bpl ON bpl.pro_id = bai.project_id
|
||||
LEFT JOIN bm_unit bui ON bui.unit_id = bai.unit_id
|
||||
LEFT JOIN bm_loss_assign_details blad on blad.loss_assign_id = bla.id
|
||||
LEFT JOIN ma_type mt1 on mt1.type_id = blad.type_id
|
||||
LEFT JOIN ma_type mt2 on mt2.type_id = mt1.parent_id
|
||||
left join sys_user su on bla.create_by = su.user_id
|
||||
left join sys_workflow_record swr on bla.id = swr.task_id and swr.task_type = '26'
|
||||
left join sys_workflow_type swt on swr.workflow_id = swt.id
|
||||
left join sys_workflow_node swn on swt.id = swn.type_id
|
||||
left join sys_workflow_config swc on swn.id = swc.node_id
|
||||
left join (
|
||||
select swrs.*
|
||||
from sys_workflow_record_history swrs
|
||||
inner join (
|
||||
-- 第一步:按 record_id 分组,获取每组最新的 create_time
|
||||
select record_id, max(create_time) as max_create_time
|
||||
from sys_workflow_record_history
|
||||
group by record_id
|
||||
) t on swrs.record_id = t.record_id
|
||||
and swrs.create_time = t.max_create_time
|
||||
) swrs on swr.id = swrs.record_id
|
||||
where
|
||||
bla.del_flag = '1' and bla.id = #{id}
|
||||
GROUP BY bla.id
|
||||
ORDER BY bla.create_time desc
|
||||
</select>
|
||||
|
||||
<select id="getUseList" resultType="com.bonus.common.biz.domain.lease.WorkPeopleInfo">
|
||||
select
|
||||
user_id as userId,
|
||||
user_name as userName
|
||||
from sys_user
|
||||
where user_id = #{userId}
|
||||
</select>
|
||||
|
||||
<select id="getList" resultType="com.bonus.material.lossAssessment.domain.LossAssignInfo">
|
||||
SELECT * FROM (
|
||||
SELECT DISTINCT
|
||||
bla.id AS id,
|
||||
bla.code AS code,
|
||||
bla.create_time AS createTime,
|
||||
su.nick_name AS createBy,
|
||||
bui.unit_id AS lossUnitId,
|
||||
bui.unit_name AS lossUnitName,
|
||||
bpl.pro_id AS lossProId,
|
||||
bpl.pro_name AS lossProName,
|
||||
GROUP_CONCAT(DISTINCT mt2.type_name) as typeName,
|
||||
bla.status as status,
|
||||
swrs.direct_user as directUserIds,
|
||||
swrs.node_id AS nodeId,
|
||||
swrs.next_node_id AS nextNodeId,
|
||||
swr.id AS recordId,
|
||||
bla.create_by AS userId,
|
||||
bui.bzz_idcard AS bzIdCard
|
||||
FROM
|
||||
bm_loss_assign bla
|
||||
LEFT JOIN bm_agreement_info bai ON bla.agreement_id = bai.agreement_id
|
||||
LEFT JOIN bm_project bpl ON bpl.pro_id = bai.project_id
|
||||
LEFT JOIN bm_unit bui ON bui.unit_id = bai.unit_id
|
||||
LEFT JOIN bm_loss_assign_details blad on blad.loss_assign_id = bla.id
|
||||
LEFT JOIN ma_type mt1 on mt1.type_id = blad.type_id
|
||||
LEFT JOIN ma_type mt2 on mt2.type_id = mt1.parent_id
|
||||
left join sys_user su on bla.create_by = su.user_id
|
||||
left join sys_workflow_record swr on bla.id = swr.task_id and swr.task_type = '26'
|
||||
left join sys_workflow_type swt on swr.workflow_id = swt.id
|
||||
left join sys_workflow_node swn on swt.id = swn.type_id
|
||||
left join sys_workflow_config swc on swn.id = swc.node_id
|
||||
left join (
|
||||
select swrs.*
|
||||
from sys_workflow_record_history swrs
|
||||
inner join (
|
||||
-- 第一步:按 record_id 分组,获取每组最新的 create_time
|
||||
select record_id, max(create_time) as max_create_time
|
||||
from sys_workflow_record_history
|
||||
group by record_id
|
||||
) t on swrs.record_id = t.record_id
|
||||
and swrs.create_time = t.max_create_time -- 第二步:关联原表,获取最新时间对应的完整记录
|
||||
) swrs on swr.id = swrs.record_id
|
||||
<where>
|
||||
bla.del_flag = '1'
|
||||
<if test="status != null">
|
||||
AND bla.status = #{status}
|
||||
</if>
|
||||
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
|
||||
AND DATE_FORMAT( bla.create_time, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime}
|
||||
</if>
|
||||
<if test="projectIdList != null and projectIdList.size() > 0">
|
||||
AND bpl.external_id in
|
||||
<foreach item="item" collection="projectIdList" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="impUnit != null and impUnit != ''">
|
||||
AND bpl.imp_unit = #{impUnit}
|
||||
</if>
|
||||
<if test="statusList != null and statusList.size() > 0">
|
||||
AND bla.status in
|
||||
<foreach item="item" collection="statusList" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY bla.id
|
||||
ORDER BY bla.create_time desc
|
||||
) a
|
||||
<where>
|
||||
<if test="keyWord!=null and keyWord!=''">
|
||||
AND (
|
||||
INSTR(a.typeName, #{keyWord}) > 0 OR
|
||||
INSTR(a.lossUnitName, #{keyWord}) > 0 OR
|
||||
INSTR(a.lossProName, #{keyWord}) > 0 OR
|
||||
INSTR(a.code, #{keyWord}) > 0 OR
|
||||
INSTR(a.createBy, #{keyWord}) > 0
|
||||
)
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectMaTypeThreeLists" resultMap="TypeResult">
|
||||
SELECT
|
||||
m.type_id,
|
||||
m.type_name,
|
||||
m.parent_id,
|
||||
m.manage_type,
|
||||
m.`LEVEL`,
|
||||
m.type_id AS id,
|
||||
m.type_name AS label
|
||||
FROM ma_type m
|
||||
WHERE m.type_id IN (
|
||||
-- 对三级节点去重
|
||||
SELECT DISTINCT node_id
|
||||
FROM (
|
||||
-- 三级父节点
|
||||
SELECT
|
||||
mt.parent_id AS node_id
|
||||
FROM (
|
||||
SELECT DISTINCT sai.type_id
|
||||
FROM slt_agreement_info sai
|
||||
WHERE sai.agreement_id = #{agreementId} AND sai.STATUS = '0'
|
||||
) AS sai_filtered
|
||||
INNER JOIN ma_type mt ON mt.type_id = sai_filtered.type_id
|
||||
WHERE mt.parent_id IS NOT NULL and mt.jiju_type = '2'
|
||||
|
||||
UNION ALL -- 二级父节点
|
||||
|
||||
SELECT
|
||||
mt2.parent_id AS node_id
|
||||
FROM (
|
||||
SELECT DISTINCT sai.type_id
|
||||
FROM slt_agreement_info sai
|
||||
WHERE sai.agreement_id = #{agreementId} AND sai.STATUS = '0'
|
||||
) AS sai_filtered
|
||||
INNER JOIN ma_type mt ON mt.type_id = sai_filtered.type_id
|
||||
INNER JOIN ma_type mt2 ON mt2.type_id = mt.parent_id
|
||||
WHERE mt2.parent_id IS NOT NULL and mt.jiju_type = '2'
|
||||
|
||||
UNION ALL -- 一级父节点
|
||||
|
||||
SELECT
|
||||
mt3.parent_id AS node_id
|
||||
FROM (
|
||||
SELECT DISTINCT sai.type_id
|
||||
FROM slt_agreement_info sai
|
||||
WHERE sai.agreement_id = #{agreementId} AND sai.STATUS = '0'
|
||||
) AS sai_filtered
|
||||
INNER JOIN ma_type mt ON mt.type_id = sai_filtered.type_id
|
||||
INNER JOIN ma_type mt2 ON mt2.type_id = mt.parent_id
|
||||
INNER JOIN ma_type mt3 ON mt3.type_id = mt2.parent_id
|
||||
WHERE mt3.parent_id IS NOT NULL and mt.jiju_type = '2'
|
||||
) AS all_nodes
|
||||
);
|
||||
</select>
|
||||
|
||||
<select id="getExternalId" resultType="com.bonus.material.lossAssessment.domain.LossAssignInfo">
|
||||
select
|
||||
external_id as lossExternalId,
|
||||
pro_name as lossProName
|
||||
from
|
||||
bm_project
|
||||
where
|
||||
pro_id = #{projectId}
|
||||
</select>
|
||||
|
||||
<select id="getNumList" resultType="com.bonus.material.lossAssessment.domain.LossAssignDetails">
|
||||
SELECT
|
||||
bl.id AS lossId,
|
||||
bl.agreement_id AS agreementId,
|
||||
blad.type_id AS typeId,
|
||||
blad.ma_id AS maId,
|
||||
SUM(IFNULL(blad.num, 0)) AS waitTransNum
|
||||
FROM
|
||||
bm_loss_assign bl
|
||||
INNER JOIN bm_loss_assign_details blad ON bl.id = blad.loss_assign_id
|
||||
WHERE
|
||||
bl.`status` IN (0, 1)
|
||||
AND bl.agreement_id = #{agreementId}
|
||||
AND blad.type_id = #{typeId}
|
||||
AND blad.ma_id = #{maId}
|
||||
GROUP BY
|
||||
bl.agreement_id, blad.type_id, blad.ma_id, bl.id
|
||||
LIMIT 1
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -32,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
update sys_workflow_record set workflow_id = #{workflowId} where id = #{id}
|
||||
</update>
|
||||
<delete id="deleteSysWorkflowRecord">
|
||||
delete from sys_workflow_record where task_type = '25' AND task_id = #{taskId}
|
||||
delete from sys_workflow_record where task_type = #{taskType} AND task_id = #{taskId}
|
||||
</delete>
|
||||
<delete id="deleteRecord">
|
||||
delete from sys_workflow_record where task_Id = #{id}
|
||||
|
|
@ -163,6 +163,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
task_type as taskType,
|
||||
task_code as taskCode
|
||||
from sys_workflow_record
|
||||
where task_type = '25' AND task_id = #{id}
|
||||
where task_type = #{taskType} AND task_id = #{taskId}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
Loading…
Reference in New Issue