You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-wms-java/src/main/java/com/glxp/api/controller/basic/SysApprovalFlowController.java

153 lines
7.5 KiB
Java

package com.glxp.api.controller.basic;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.entity.auth.AuthAdmin;
import com.glxp.api.entity.auth.DeptEntity;
import com.glxp.api.entity.basic.SysApprovalFlow;
import com.glxp.api.entity.dev.DeviceChangeLogEntity;
import com.glxp.api.entity.dev.DeviceChangeOrderEntity;
import com.glxp.api.entity.dev.DeviceChangeOrderItemEntity;
import com.glxp.api.enums.ApprovalFlowEnum;
import com.glxp.api.enums.dev.DeviceChangeStatusEnum;
import com.glxp.api.enums.dev.DeviceChangeTypeEnum;
import com.glxp.api.enums.dev.DeviceStatusEnum;
import com.glxp.api.exception.JsonException;
import com.glxp.api.req.basic.SubmitApprovalFlowRequest;
import com.glxp.api.res.basic.SysApprovalFlowDetailResponse;
import com.glxp.api.service.auth.CustomerService;
import com.glxp.api.service.auth.DeptService;
import com.glxp.api.service.basic.SysApprovalFlowService;
import com.glxp.api.service.dev.DeviceChangeLogService;
import com.glxp.api.service.dev.DeviceChangeOrderItemService;
import com.glxp.api.service.dev.DeviceChangeOrderService;
import com.glxp.api.service.dev.DeviceInfoService;
import com.glxp.api.service.system.SystemParamConfigService;
import com.glxp.api.vo.dev.DeviceChangeOrderVo;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@RestController
public class SysApprovalFlowController {
@Resource
private SysApprovalFlowService sysApprovalFlowService;
@Resource
private SystemParamConfigService systemParamConfigService;
@Resource
private DeviceChangeOrderService deviceChangeOrderService;
@Resource
private DeviceChangeOrderItemService deviceChangeOrderItemService;
@Resource
private DeviceInfoService deviceInfoService;
@Resource
private DeviceChangeLogService deviceChangeLogService;
@Resource
private DeptService deptService;
@Resource
private CustomerService customerService;
@ApiOperation(value = "获取流程审批过程")
@GetMapping("/udiwms/sysApprovalFlow/approvalFlowDetailList/{approvalFlowId}")
public BaseResponse getDetailList(@PathVariable String approvalFlowId) {
List<SysApprovalFlowDetailResponse> list = sysApprovalFlowService.getDetailList(approvalFlowId);
return ResultVOUtils.success(list);
}
@ApiOperation(value = "提交节点审批")
@PostMapping("/udiwms/sysApprovalFlow/submitApprovalFlow")
public BaseResponse submitApprovalFlow(@RequestBody @Valid SubmitApprovalFlowRequest submitApprovalFlowRequest) {
sysApprovalFlowService.submitApprovalFlow(submitApprovalFlowRequest);
return ResultVOUtils.success();
}
@ApiOperation(value = "获取流程审批开关参数")
@GetMapping("/udiwms/sysApprovalFlow/config")
public BaseResponse getConfig() {
Boolean sys_approval_flow = "1".equals(systemParamConfigService.selectValueByParamKey("sys_approval_flow"));
return ResultVOUtils.success(sys_approval_flow);
}
@ApiOperation(value = "是否有节点审批权限")
@GetMapping("/sysApprovalFlow/nodePermissions/{id}")
public BaseResponse nodePermissions(@PathVariable String id) {
boolean b = sysApprovalFlowService.nodePermissions(id);
return ResultVOUtils.success(b);
}
@ApiOperation(value = "提交节点审批-设备一处")
@PostMapping("/udiwms/sysApprovalFlow/submitApprovalFlow/sbyc")
@Transactional(rollbackFor = Exception.class)
public BaseResponse submitApprovalFlowSbyc(@RequestBody @Valid SubmitApprovalFlowRequest submitApprovalFlowRequest) {
String approvalFlowMxId = submitApprovalFlowRequest.getId();
sysApprovalFlowService.submitApprovalFlow(submitApprovalFlowRequest);
//判断是否是最终状态为 审核通过 是 调用 审核通过的后续方法
SysApprovalFlow sysApprovalFlow = sysApprovalFlowService.getApprovalFlowByMxId(approvalFlowMxId);
Integer status = sysApprovalFlow.getStatus();
if (status.equals(ApprovalFlowEnum.TG.getCode())){
//后续方法
String id = sysApprovalFlow.getId();
DeviceChangeOrderEntity order = deviceChangeOrderService.getOne(Wrappers.lambdaQuery(DeviceChangeOrderEntity.class).eq(DeviceChangeOrderEntity::getApprovalFlowId, id));
if (order == null){
return ResultVOUtils.error("未找到对应的审批流程,请确认");
}
LocalDateTime now = LocalDateTime.now();
Long userId = customerService.getUserId();
AuthAdmin authUserDto = customerService.getUserBean();
//查询创建人名称
String userName = authUserDto.getEmployeeName();
deviceChangeOrderService.update(Wrappers.lambdaUpdate(DeviceChangeOrderEntity.class)
.set(DeviceChangeOrderEntity::getStatus, DeviceChangeStatusEnum.FINISH)
.set(DeviceChangeOrderEntity::getConfirmTime, now)
.set(DeviceChangeOrderEntity::getConfirmUser, userId)
.set(DeviceChangeOrderEntity::getConfirmUserName, userName)
.eq(DeviceChangeOrderEntity::getApprovalFlowId, id)
.eq(DeviceChangeOrderEntity::getStatus, DeviceChangeStatusEnum.AUDITING));
List<DeviceChangeOrderItemEntity> list = deviceChangeOrderItemService.list(Wrappers.lambdaQuery(DeviceChangeOrderItemEntity.class).eq(DeviceChangeOrderItemEntity::getOrderId, order.getOrderId()));
if (CollectionUtil.isEmpty(list)){
return ResultVOUtils.error("单据里待移除设备不存在,请确认");
}
List<DeviceChangeLogEntity> logs = new ArrayList<>();
DeviceChangeOrderVo orderVo = BeanUtil.copyProperties(order, DeviceChangeOrderVo.class);
orderVo.setConfirmTime(now);
orderVo.setConfirmUser(userId);
orderVo.setConfirmUserName(userName);
DeptEntity dept = deptService.selectByCode(orderVo.getDeptCode());
orderVo.setDeptName(dept.getName());
if (orderVo.getToDeptCode().equals(orderVo.getDeptCode())) {
orderVo.setToDeptName(dept.getName());
} else {
dept = deptService.selectByCode(orderVo.getToDeptCode());
orderVo.setToDeptName(dept.getName());
}
list.forEach( i ->{
deviceInfoService.changeStatus(i.getDeviceCode(), order.getDeptCode(), DeviceStatusEnum.NORMAL, order.getType() == DeviceChangeTypeEnum.CHANGE ? DeviceStatusEnum.CHANGE : DeviceStatusEnum.DESTROY);
if (order.getType() == DeviceChangeTypeEnum.DESTROY) {
DeviceChangeLogEntity logEntity = DeviceChangeLogEntity.genEntity(i.getDeviceCode(), orderVo);
logs.add(logEntity);
}
});
if (CollectionUtil.isNotEmpty(logs)) {
deviceChangeLogService.saveBatch(logs);
}
}
return ResultVOUtils.success();
}
}