|
|
@ -2,13 +2,19 @@ package com.yxt.anrui.scm.biz.scmapplyinbound; |
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.yxt.anrui.base.api.baseoutsourcingapplication.BaseOutsourcingApplicationDto; |
|
|
|
import com.yxt.anrui.base.api.baseoutsourcingapplication.SubmitBaseOutSourcingApplicationDto; |
|
|
|
import com.yxt.anrui.flowable.api.flow.FlowableFeign; |
|
|
|
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; |
|
|
|
import com.yxt.anrui.flowable.api.flowtask.FlowTaskFeign; |
|
|
|
import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo; |
|
|
|
import com.yxt.anrui.flowable.api.sysformlink.SysFormLinkFlowStateEnum; |
|
|
|
import com.yxt.anrui.flowable.api.utils.ProcDefEnum; |
|
|
|
import com.yxt.anrui.flowable.api.utils.ProcessStateEnum; |
|
|
|
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; |
|
|
|
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg; |
|
|
|
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign; |
|
|
|
import com.yxt.anrui.portal.api.sysuser.SysUserFeign; |
|
|
|
import com.yxt.anrui.scm.api.flow.FlowTaskVo; |
|
|
@ -50,308 +56,394 @@ import java.util.stream.Collectors; |
|
|
|
@Service |
|
|
|
public class ScmApplyInboundService extends MybatisBaseService<ScmApplyInboundMapper, ScmApplyInbound> { |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private ScmApplyInboundVehicleService scmApplyInboundVehicleService; |
|
|
|
@Autowired |
|
|
|
private SysUserFeign sysUserFeign; |
|
|
|
@Autowired |
|
|
|
private SysStaffOrgFeign sysStaffOrgFeign; |
|
|
|
@Autowired |
|
|
|
private FlowableService flowableService; |
|
|
|
@Autowired |
|
|
|
private FlowTaskFeign flowTaskFeign; |
|
|
|
|
|
|
|
public PagerVo<ScmApplyInbound> listPage(PagerQuery<ScmApplyInboundQuery> pq) { |
|
|
|
ScmApplyInboundQuery query = pq.getParams(); |
|
|
|
QueryWrapper<ScmApplyInbound> qw = createQueryWrapper(query); |
|
|
|
IPage<ScmApplyInbound> page = PagerUtil.queryToPage(pq); |
|
|
|
IPage<ScmApplyInbound> pagging = baseMapper.selectPage(page, qw); |
|
|
|
PagerVo<ScmApplyInbound> p = PagerUtil.pageToVo(pagging, null); |
|
|
|
return p; |
|
|
|
} |
|
|
|
public List<ScmApplyInbound> listAll(ScmApplyInboundQuery query) { |
|
|
|
QueryWrapper<ScmApplyInbound> qw = createQueryWrapper(query); |
|
|
|
return baseMapper.selectList(qw); |
|
|
|
} |
|
|
|
private QueryWrapper<ScmApplyInbound> createQueryWrapper(ScmApplyInboundQuery query) { |
|
|
|
// todo: 这里根据具体业务调整查询条件
|
|
|
|
// 多字段Like示例:qw.and(wrapper -> wrapper.like("name", query.getName()).or().like("remark", query.getName()));
|
|
|
|
QueryWrapper<ScmApplyInbound> qw = new QueryWrapper<>(); |
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(query.getPurchaseOrderNo())) { |
|
|
|
qw.like("purchaseOrderNo", query.getPurchaseOrderNo()); |
|
|
|
} |
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(query.getModelName())) { |
|
|
|
qw.like("modelName", query.getModelName()); |
|
|
|
} |
|
|
|
return qw; |
|
|
|
} |
|
|
|
|
|
|
|
public PagerVo<ScmApplyInboundListVo> listPageVo(PagerQuery<ScmApplyInboundQuery> pq) { |
|
|
|
ScmApplyInboundQuery query = pq.getParams(); |
|
|
|
QueryWrapper<ScmApplyInbound> qw = createQueryWrapper(query); |
|
|
|
IPage<ScmApplyInbound> page = PagerUtil.queryToPage(pq); |
|
|
|
IPage<ScmApplyInboundListVo> pagging = baseMapper.selectPageVo(page, qw); |
|
|
|
PagerVo<ScmApplyInboundListVo> p = PagerUtil.pageToVo(pagging, null); |
|
|
|
return p; |
|
|
|
} |
|
|
|
|
|
|
|
public List<ScmApplyInboundVo> listAllVo(ScmApplyInboundQuery query) { |
|
|
|
QueryWrapper<ScmApplyInbound> qw = createQueryWrapper(query); |
|
|
|
return baseMapper.selectListAllVo(qw); |
|
|
|
} |
|
|
|
|
|
|
|
public List<ScmApplyInboundVo> listVo() { |
|
|
|
return baseMapper.selectListVo(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 新增和修改车辆入账单 |
|
|
|
* @param dto |
|
|
|
*/ |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public ResultBean saveOrUpdateApplyInBound(ScmApplyInboundDto dto){ |
|
|
|
// 验证车架号:不能为空、不能重复
|
|
|
|
List<ScmApplyInboundVehicleDto> vehicleList = dto.getVehicleList(); |
|
|
|
List<String> vinNoList = vehicleList.stream().filter(vehicle -> StringUtils.isNotBlank(vehicle.getVinNo())).map(vehicle -> vehicle.getVinNo()).collect(Collectors.toList()); |
|
|
|
if (vehicleList.size() != vinNoList.size()) { |
|
|
|
return new ResultBean().fail().setMsg("车架号不能为空"); |
|
|
|
} |
|
|
|
// 去重
|
|
|
|
long disCount = vinNoList.stream().distinct().count(); |
|
|
|
if (vinNoList.size() != disCount) { |
|
|
|
return new ResultBean().fail().setMsg("车架号不能重复"); |
|
|
|
} |
|
|
|
|
|
|
|
if (StringUtils.isBlank(dto.getSid())) { // 新增
|
|
|
|
// 验证数据库是否重复
|
|
|
|
for (int i = 0; i < vinNoList.size(); i++) { |
|
|
|
int count = scmApplyInboundVehicleService.checkVinNo(vinNoList.get(i), ""); |
|
|
|
if (count != 0) { |
|
|
|
return new ResultBean().setMsg("车架号已经存在"); |
|
|
|
} |
|
|
|
} |
|
|
|
ScmApplyInbound inboundVehicle = new ScmApplyInbound(); |
|
|
|
BeanUtil.copyProperties(dto, inboundVehicle); |
|
|
|
inboundVehicle.setSid(UUID.randomUUID().toString()); |
|
|
|
save(inboundVehicle); |
|
|
|
// 保存车辆列表
|
|
|
|
scmApplyInboundVehicleService.saveApplyInboundVehicleList(vehicleList, inboundVehicle.getSid(), inboundVehicle.getModelSid()); |
|
|
|
return new ResultBean().success().setMsg("保存成功").setData(inboundVehicle.getSid()); |
|
|
|
} else { // 修改
|
|
|
|
// 采购订单下线日期一旦维护,二次确认,则不能修改 TODO
|
|
|
|
// 验证数据库是否重复
|
|
|
|
for (int i = 0; i < vinNoList.size(); i++) { |
|
|
|
int count = scmApplyInboundVehicleService.checkVinNo(vinNoList.get(i), dto.getSid()); |
|
|
|
if (count != 0) { |
|
|
|
return new ResultBean().setMsg("车架号已经存在"); |
|
|
|
} |
|
|
|
} |
|
|
|
ScmApplyInbound scmApplyInbound = fetchBySid(dto.getSid()); |
|
|
|
BeanUtil.copyProperties(dto, scmApplyInbound); |
|
|
|
updateById(scmApplyInbound); |
|
|
|
// 更新车辆列表信息
|
|
|
|
scmApplyInboundVehicleService.updateApplyInboundVehicleList(vehicleList); |
|
|
|
return new ResultBean().success().setMsg("修改成功").setData(dto.getSid()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据sid查询车辆入账单详情 |
|
|
|
* @param sid |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ScmApplyInboundVo selectBySid(String sid) { |
|
|
|
ScmApplyInboundVo vo = new ScmApplyInboundVo(); |
|
|
|
ScmApplyInbound scmApplyInbound = fetchBySid(sid); |
|
|
|
BeanUtil.copyProperties(scmApplyInbound, vo); |
|
|
|
List<ScmApplyInboundVehicleVo> list = scmApplyInboundVehicleService.selectListByAppSid(sid); |
|
|
|
vo.setInboundVehicleList(list); |
|
|
|
return vo; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 检查用户是否设置部门 |
|
|
|
* |
|
|
|
* @param userSid |
|
|
|
* @return 返回部门sid |
|
|
|
*/ |
|
|
|
private String checkUserOrg(String userSid) { |
|
|
|
String orgSid = ""; |
|
|
|
String staffSid = sysUserFeign.selectBySid(userSid).getData().getStaffSid(); |
|
|
|
ResultBean<String> resultBean = sysStaffOrgFeign.getSysStaffOrgSidListByStaffSid(staffSid); |
|
|
|
if (resultBean.getSuccess()) { |
|
|
|
orgSid = resultBean.getData(); |
|
|
|
} |
|
|
|
return orgSid; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 更新流程相关的状态 |
|
|
|
* @param map |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private int updateFlowFiled(Map<String, Object> map) { |
|
|
|
return baseMapper.updateFlowFiled(map); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 提交入账申请 |
|
|
|
* @param dto |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean submitRecordApplication(SubmitScmApplyInboundDto dto) { |
|
|
|
String orgSid = checkUserOrg(dto.getUserSid()); |
|
|
|
ResultBean resultBean = saveOrUpdateApplyInBound(dto); |
|
|
|
String businessSid = resultBean.getData().toString(); |
|
|
|
Map<String, Object> variables = new HashMap<>(); |
|
|
|
variables.put("businessSid", businessSid); |
|
|
|
variables.put("orgSid", orgSid); //部门sid
|
|
|
|
if (StringUtils.isBlank(dto.getTaskId())) { // 新提交
|
|
|
|
ResultBean resultBean1 = flowableService.businessStart(ProcDefEnum.RECORDAPPLICATION.getProDefId(), dto.getUserSid(), variables); |
|
|
|
if (resultBean1.getSuccess() && resultBean1.getData() != null) { |
|
|
|
Map<String, String> map = (Map<String, String>) resultBean1.getData(); |
|
|
|
//更新业务表中的流程状态
|
|
|
|
Map<String, Object> paramMap = new HashMap<>(); |
|
|
|
paramMap.put("sid", businessSid); |
|
|
|
paramMap.put("procDefId", ProcDefEnum.RECORDAPPLICATION.getProDefId()); |
|
|
|
paramMap.put("nodeState", map.get("nodeState")); |
|
|
|
paramMap.put("procInsId", map.get("procInsId")); |
|
|
|
paramMap.put("taskDefKey", map.get("taskDefKey")); |
|
|
|
updateFlowFiled(paramMap); |
|
|
|
} |
|
|
|
return resultBean1; |
|
|
|
} else { // 驳回到发起人后再次提交
|
|
|
|
variables.put("comment", StringUtils.isNotBlank(dto.getComment()) ? dto.getComment() : "重新提交"); |
|
|
|
variables.put("instanceId", dto.getInstanceId()); |
|
|
|
variables.put("taskId", dto.getTaskId()); |
|
|
|
variables.put("userSid", dto.getUserSid()); |
|
|
|
return complete(variables); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 办理 |
|
|
|
* @param variables |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean complete(Map<String, Object> variables) { |
|
|
|
BusinessVariables bv= BusinessVariables.builder().build(); |
|
|
|
bv.setFormVariables(variables); |
|
|
|
ResultBean<com.yxt.anrui.flowable.api.flowtask.FlowTask> resultBean = flowTaskFeign.businessComplete(bv); |
|
|
|
if (!resultBean.getSuccess()) { |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
String nodeState = ""; |
|
|
|
String taskDefKey = ""; |
|
|
|
Map<String, Object> paramMap = new HashMap<>(); |
|
|
|
paramMap.put("sid", variables.get("businessSid").toString()); |
|
|
|
if (resultBean.getData() != null) { |
|
|
|
ResultBean<List<LatestTaskVo>> listResultBean = flowTaskFeign.getLatestTasks(resultBean.getData().getProcInsId()); |
|
|
|
if (listResultBean.getSuccess() && listResultBean.getData() != null && listResultBean.getData().size() != 0) { |
|
|
|
nodeState = listResultBean.getData().get(0).getName_(); |
|
|
|
taskDefKey = listResultBean.getData().get(0).getTask_def_key_(); |
|
|
|
} else { |
|
|
|
nodeState = ProcessStateEnum.FINISHED.getStateName(); |
|
|
|
taskDefKey = "Event_end"; |
|
|
|
paramMap.put("flowState", SysFormLinkFlowStateEnum.FINISH.getCode()); |
|
|
|
} |
|
|
|
} |
|
|
|
paramMap.put("nodeState", nodeState); |
|
|
|
paramMap.put("taskDefKey", taskDefKey); |
|
|
|
updateFlowFiled(paramMap); |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 撤回 |
|
|
|
* @param userSid |
|
|
|
* @param businessSid |
|
|
|
* @param flowTaskVo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean revokeProcess(String userSid, String businessSid, FlowTaskVo flowTaskVo) { |
|
|
|
com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl=new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo(); |
|
|
|
BeanUtil.copyProperties(flowTaskVo,fl); |
|
|
|
fl.setUserSid(userSid); |
|
|
|
ResultBean<List<LatestTaskVo>> resultBean = flowTaskFeign.revokeProcess(fl); |
|
|
|
if (!resultBean.getSuccess()) { |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
String nodeState = resultBean.getData().get(0).getName_(); |
|
|
|
String taskDefKey = resultBean.getData().get(0).getTask_def_key_(); |
|
|
|
String incomingSourceRef = resultBean.getData().get(0).getIncomingSourceRef(); |
|
|
|
Map<String, Object> paramMap = new HashMap<>(); |
|
|
|
paramMap.put("sid", businessSid); |
|
|
|
if (incomingSourceRef.contains("start")) { |
|
|
|
paramMap.put("nodeState", SysFormLinkFlowStateEnum.UNCOMMITTED.getState()); |
|
|
|
paramMap.put("taskDefKey", taskDefKey); |
|
|
|
paramMap.put("flowState", SysFormLinkFlowStateEnum.UNCOMMITTED.getCode()); |
|
|
|
} else { |
|
|
|
paramMap.put("nodeState",nodeState ); |
|
|
|
paramMap.put("taskDefKey",taskDefKey ); |
|
|
|
} |
|
|
|
updateFlowFiled(paramMap); |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 驳回 |
|
|
|
* @param businessSid |
|
|
|
* @param flowTaskVo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean taskReject(String businessSid, FlowTaskVo flowTaskVo) { |
|
|
|
com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl=new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo(); |
|
|
|
BeanUtil.copyProperties(flowTaskVo,fl); |
|
|
|
ResultBean<List<LatestTaskVo>> resultBean = flowTaskFeign.taskReject(fl); |
|
|
|
if (!resultBean.getSuccess()) { |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
String nodeState = resultBean.getData().get(0).getName_(); |
|
|
|
String taskDefKey = resultBean.getData().get(0).getTask_def_key_(); |
|
|
|
String incomingSourceRef = resultBean.getData().get(0).getIncomingSourceRef(); |
|
|
|
Map<String, Object> paramMap = new HashMap<>(); |
|
|
|
paramMap.put("sid", businessSid); |
|
|
|
paramMap.put("nodeState", nodeState); |
|
|
|
paramMap.put("taskDefKey", taskDefKey); |
|
|
|
if (incomingSourceRef.contains("start")) { |
|
|
|
paramMap.put("flowState", SysFormLinkFlowStateEnum.REJECT.getCode()); |
|
|
|
} |
|
|
|
updateFlowFiled(paramMap); |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 终止流程 |
|
|
|
* @param businessSid |
|
|
|
* @param flowTaskVo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean breakProcess(String businessSid, FlowTaskVo flowTaskVo) { |
|
|
|
com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl=new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo(); |
|
|
|
BeanUtil.copyProperties(flowTaskVo,fl); |
|
|
|
ResultBean resultBean = flowTaskFeign.breakProcess(fl); |
|
|
|
if (!resultBean.getSuccess()) { |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
Map<String, Object> paramMap = new HashMap<>(); |
|
|
|
paramMap.put("sid", businessSid); |
|
|
|
paramMap.put("nodeState", String.valueOf(resultBean.getData())); |
|
|
|
paramMap.put("taskDefKey", "Event_end"); |
|
|
|
paramMap.put("flowState", SysFormLinkFlowStateEnum.BREAK.getCode()); |
|
|
|
updateFlowFiled(paramMap); |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 流程历史流转记录 |
|
|
|
* @param procInsId |
|
|
|
* @param deployId |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean flowRecord(String procInsId, String deployId) { |
|
|
|
return flowTaskFeign.businessFlowRecord(procInsId,deployId); |
|
|
|
} |
|
|
|
@Autowired |
|
|
|
private ScmApplyInboundVehicleService scmApplyInboundVehicleService; |
|
|
|
@Autowired |
|
|
|
private SysUserFeign sysUserFeign; |
|
|
|
@Autowired |
|
|
|
private SysStaffOrgFeign sysStaffOrgFeign; |
|
|
|
@Autowired |
|
|
|
private FlowableFeign flowableFeign; |
|
|
|
// private FlowableService flowableService;
|
|
|
|
@Autowired |
|
|
|
private FlowTaskFeign flowTaskFeign; |
|
|
|
|
|
|
|
public PagerVo<ScmApplyInbound> listPage(PagerQuery<ScmApplyInboundQuery> pq) { |
|
|
|
ScmApplyInboundQuery query = pq.getParams(); |
|
|
|
QueryWrapper<ScmApplyInbound> qw = createQueryWrapper(query); |
|
|
|
IPage<ScmApplyInbound> page = PagerUtil.queryToPage(pq); |
|
|
|
IPage<ScmApplyInbound> pagging = baseMapper.selectPage(page, qw); |
|
|
|
PagerVo<ScmApplyInbound> p = PagerUtil.pageToVo(pagging, null); |
|
|
|
return p; |
|
|
|
} |
|
|
|
|
|
|
|
public List<ScmApplyInbound> listAll(ScmApplyInboundQuery query) { |
|
|
|
QueryWrapper<ScmApplyInbound> qw = createQueryWrapper(query); |
|
|
|
return baseMapper.selectList(qw); |
|
|
|
} |
|
|
|
|
|
|
|
private QueryWrapper<ScmApplyInbound> createQueryWrapper(ScmApplyInboundQuery query) { |
|
|
|
// todo: 这里根据具体业务调整查询条件
|
|
|
|
// 多字段Like示例:qw.and(wrapper -> wrapper.like("name", query.getName()).or().like("remark", query.getName()));
|
|
|
|
QueryWrapper<ScmApplyInbound> qw = new QueryWrapper<>(); |
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(query.getPurchaseOrderNo())) { |
|
|
|
qw.like("purchaseOrderNo", query.getPurchaseOrderNo()); |
|
|
|
} |
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(query.getModelName())) { |
|
|
|
qw.like("modelName", query.getModelName()); |
|
|
|
} |
|
|
|
return qw; |
|
|
|
} |
|
|
|
|
|
|
|
public PagerVo<ScmApplyInboundListVo> listPageVo(PagerQuery<ScmApplyInboundQuery> pq) { |
|
|
|
ScmApplyInboundQuery query = pq.getParams(); |
|
|
|
QueryWrapper<ScmApplyInbound> qw = createQueryWrapper(query); |
|
|
|
IPage<ScmApplyInbound> page = PagerUtil.queryToPage(pq); |
|
|
|
IPage<ScmApplyInboundListVo> pagging = baseMapper.selectPageVo(page, qw); |
|
|
|
PagerVo<ScmApplyInboundListVo> p = PagerUtil.pageToVo(pagging, null); |
|
|
|
return p; |
|
|
|
} |
|
|
|
|
|
|
|
public List<ScmApplyInboundVo> listAllVo(ScmApplyInboundQuery query) { |
|
|
|
QueryWrapper<ScmApplyInbound> qw = createQueryWrapper(query); |
|
|
|
return baseMapper.selectListAllVo(qw); |
|
|
|
} |
|
|
|
|
|
|
|
public List<ScmApplyInboundVo> listVo() { |
|
|
|
return baseMapper.selectListVo(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 新增和修改车辆入账单 |
|
|
|
* |
|
|
|
* @param dto |
|
|
|
*/ |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public ResultBean<String> saveOrUpdateApplyInBound(ScmApplyInboundDto dto) { |
|
|
|
// 验证车架号:不能为空、不能重复
|
|
|
|
List<ScmApplyInboundVehicleDto> vehicleList = dto.getVehicleList(); |
|
|
|
List<String> vinNoList = vehicleList.stream().filter(vehicle -> StringUtils.isNotBlank(vehicle.getVinNo())).map(vehicle -> vehicle.getVinNo()).collect(Collectors.toList()); |
|
|
|
if (vehicleList.size() != vinNoList.size()) { |
|
|
|
return new ResultBean().fail().setMsg("车架号不能为空"); |
|
|
|
} |
|
|
|
// 去重
|
|
|
|
long disCount = vinNoList.stream().distinct().count(); |
|
|
|
if (vinNoList.size() != disCount) { |
|
|
|
return new ResultBean().fail().setMsg("车架号不能重复"); |
|
|
|
} |
|
|
|
|
|
|
|
if (StringUtils.isBlank(dto.getSid())) { // 新增
|
|
|
|
// 验证数据库是否重复
|
|
|
|
for (int i = 0; i < vinNoList.size(); i++) { |
|
|
|
int count = scmApplyInboundVehicleService.checkVinNo(vinNoList.get(i), ""); |
|
|
|
if (count != 0) { |
|
|
|
return new ResultBean().setMsg("车架号已经存在"); |
|
|
|
} |
|
|
|
} |
|
|
|
ScmApplyInbound inboundVehicle = new ScmApplyInbound(); |
|
|
|
BeanUtil.copyProperties(dto, inboundVehicle); |
|
|
|
inboundVehicle.setSid(UUID.randomUUID().toString()); |
|
|
|
save(inboundVehicle); |
|
|
|
// 保存车辆列表
|
|
|
|
scmApplyInboundVehicleService.saveApplyInboundVehicleList(vehicleList, inboundVehicle.getSid(), inboundVehicle.getModelSid()); |
|
|
|
return new ResultBean().success().setMsg("保存成功").setData(inboundVehicle.getSid()); |
|
|
|
} else { // 修改
|
|
|
|
// 采购订单下线日期一旦维护,二次确认,则不能修改 TODO
|
|
|
|
// 验证数据库是否重复
|
|
|
|
for (int i = 0; i < vinNoList.size(); i++) { |
|
|
|
int count = scmApplyInboundVehicleService.checkVinNo(vinNoList.get(i), dto.getSid()); |
|
|
|
if (count != 0) { |
|
|
|
return new ResultBean().setMsg("车架号已经存在"); |
|
|
|
} |
|
|
|
} |
|
|
|
ScmApplyInbound scmApplyInbound = fetchBySid(dto.getSid()); |
|
|
|
BeanUtil.copyProperties(dto, scmApplyInbound); |
|
|
|
updateById(scmApplyInbound); |
|
|
|
// 更新车辆列表信息
|
|
|
|
scmApplyInboundVehicleService.updateApplyInboundVehicleList(vehicleList); |
|
|
|
return new ResultBean().success().setMsg("修改成功").setData(dto.getSid()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据sid查询车辆入账单详情 |
|
|
|
* |
|
|
|
* @param sid |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ScmApplyInboundVo selectBySid(String sid) { |
|
|
|
ScmApplyInboundVo vo = new ScmApplyInboundVo(); |
|
|
|
ScmApplyInbound scmApplyInbound = fetchBySid(sid); |
|
|
|
BeanUtil.copyProperties(scmApplyInbound, vo); |
|
|
|
List<ScmApplyInboundVehicleVo> list = scmApplyInboundVehicleService.selectListByAppSid(sid); |
|
|
|
vo.setInboundVehicleList(list); |
|
|
|
return vo; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 检查用户是否设置部门 |
|
|
|
* |
|
|
|
* @param userSid |
|
|
|
* @return 返回部门sid |
|
|
|
*/ |
|
|
|
private String checkUserOrg(String userSid) { |
|
|
|
String orgSid = ""; |
|
|
|
String staffSid = sysUserFeign.selectBySid(userSid).getData().getStaffSid(); |
|
|
|
ResultBean<String> resultBean = sysStaffOrgFeign.getSysStaffOrgSidListByStaffSid(staffSid); |
|
|
|
if (resultBean.getSuccess()) { |
|
|
|
orgSid = resultBean.getData(); |
|
|
|
} |
|
|
|
return orgSid; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 更新流程相关的状态 |
|
|
|
* |
|
|
|
* @param map |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private int updateFlowFiled(Map<String, Object> map) { |
|
|
|
return baseMapper.updateFlowFiled(map); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 更新流程相关的状态 |
|
|
|
* |
|
|
|
* @param updateFlowFieldVo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private int updateFlowFiled(UpdateFlowFieldVo updateFlowFieldVo) { |
|
|
|
UpdateWrapper<ScmApplyInbound> uw = new UpdateWrapper<>(); |
|
|
|
uw.eq("sid", updateFlowFieldVo.getSid()); |
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(updateFlowFieldVo.getProcDefId())) { |
|
|
|
uw.set("procDefId", updateFlowFieldVo.getProcDefId()); |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(updateFlowFieldVo.getNodeState())) { |
|
|
|
uw.set("nodeState", updateFlowFieldVo.getNodeState()); |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(updateFlowFieldVo.getProcInsId())) { |
|
|
|
uw.set("procInsId", updateFlowFieldVo.getProcInsId()); |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(updateFlowFieldVo.getTaskDefKey())) { |
|
|
|
uw.set("taskDefKey", updateFlowFieldVo.getTaskDefKey()); |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(updateFlowFieldVo.getTaskId())) { |
|
|
|
uw.set("taskId", updateFlowFieldVo.getTaskId()); |
|
|
|
} |
|
|
|
// if (StringUtils.isNotBlank(updateFlowFieldVo.getNextNodeUserSids())) {
|
|
|
|
// uw.set("", updateFlowFieldVo.getNextNodeUserSids());
|
|
|
|
// }
|
|
|
|
return baseMapper.update(null, uw); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 提交入账申请 |
|
|
|
* |
|
|
|
* @param dto |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean submitRecordApplication(SubmitScmApplyInboundDto dto) { |
|
|
|
ResultBean rb = ResultBean.fireFail(); |
|
|
|
//取组织架构的全路径sid
|
|
|
|
// SysStaffOrg sysStaffOrg = sysStaffOrgFeign.getOrgByStaffSid(dto.getUserSid()).getData();
|
|
|
|
String orgSidPath = dto.getOrgSidPath(); //sysStaffOrg.getOrgSidPath();
|
|
|
|
Map<String, Object> variables = BeanUtil.beanToMap(dto); |
|
|
|
|
|
|
|
ScmApplyInbound booad = new ScmApplyInbound(); |
|
|
|
int r = submitBusinessData(dto, booad); |
|
|
|
if (r == 0) { |
|
|
|
return rb.setMsg("操作失败,提交的数据不一致!"); |
|
|
|
} |
|
|
|
|
|
|
|
ResultBean<String> resultBean = saveOrUpdateApplyInBound(dto); |
|
|
|
String businessSid = resultBean.getData(); |
|
|
|
BusinessVariables bv = new BusinessVariables(); |
|
|
|
bv.setOrgSidPath(orgSidPath); |
|
|
|
bv.setBusinessSid(businessSid); |
|
|
|
bv.setUserSid(dto.getUserSid()); |
|
|
|
variables.put("businessSid", businessSid); |
|
|
|
bv.setFormVariables(variables); |
|
|
|
bv.setModelId(ProcDefEnum.RECORDAPPLICATION.getProDefId()); |
|
|
|
if (r == 1) { |
|
|
|
ResultBean<UpdateFlowFieldVo> resultBean1 = flowableFeign.startProcess(bv); |
|
|
|
UpdateFlowFieldVo uff = resultBean1.getData(); |
|
|
|
updateFlowFiled(uff); |
|
|
|
return resultBean1; |
|
|
|
} else if (r == 2) { |
|
|
|
bv.setTaskDefKey(booad.getTaskDefKey()); |
|
|
|
bv.setComment(StringUtils.isNotBlank(dto.getComment()) ? dto.getComment() : "重新提交"); |
|
|
|
bv.setInstanceId(booad.getProcInsId()); |
|
|
|
ResultBean<UpdateFlowFieldVo> rrb = flowableFeign.handleProsess(bv); |
|
|
|
updateFlowFiled(rrb.getData()); |
|
|
|
return rrb; |
|
|
|
} |
|
|
|
return rb; |
|
|
|
} |
|
|
|
|
|
|
|
private synchronized int submitBusinessData(SubmitScmApplyInboundDto dto, ScmApplyInbound booad) { |
|
|
|
int r = 0; |
|
|
|
booad = this.fetchBySid(dto.getSid()); |
|
|
|
String businessTaskid = booad.getTaskId(); |
|
|
|
if (StringUtils.isBlank(businessTaskid) && StringUtils.isBlank(dto.getTaskId())) { |
|
|
|
// 新提交 taskid都是空的
|
|
|
|
r = 1; |
|
|
|
} else if (StringUtils.isNotBlank(businessTaskid) && businessTaskid.equals(dto.getTaskId())) {//只有数据一致的时候才能进行下一步
|
|
|
|
r = 2; |
|
|
|
} |
|
|
|
return r; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 办理 |
|
|
|
* |
|
|
|
* @param dto |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean complete(SubmitScmApplyInboundDto dto) { |
|
|
|
|
|
|
|
ResultBean rb = ResultBean.fireFail(); |
|
|
|
ScmApplyInbound booad = this.fetchBySid(dto.getSid()); |
|
|
|
if (StringUtils.isBlank(booad.getTaskId()) || !booad.getTaskId().equals(dto.getTaskId())) { |
|
|
|
return rb.setMsg("操作失败,提交的数据不一致!"); |
|
|
|
} |
|
|
|
|
|
|
|
//取组织架构的全路径sid
|
|
|
|
// SysStaffOrg sysStaffOrg = sysStaffOrgFeign.getOrgByStaffSid(dto.getApplicationSid()).getData();
|
|
|
|
String orgSidPath = dto.getOrgSidPath(); |
|
|
|
Map<String, Object> variables = BeanUtil.beanToMap(dto); |
|
|
|
BusinessVariables bv = new BusinessVariables(); |
|
|
|
bv.setTaskId(booad.getTaskId()); |
|
|
|
bv.setOrgSidPath(orgSidPath); |
|
|
|
bv.setBusinessSid(dto.getSid()); |
|
|
|
bv.setUserSid(dto.getUserSid()); |
|
|
|
variables.put("businessSid", dto.getSid()); |
|
|
|
bv.setTaskDefKey(booad.getTaskDefKey()); |
|
|
|
bv.setComment(StringUtils.isNotBlank(dto.getComment()) ? dto.getComment() : "重新提交"); |
|
|
|
bv.setInstanceId(booad.getProcInsId()); |
|
|
|
bv.setFormVariables(variables); |
|
|
|
bv.setModelId(ProcDefEnum.RECORDAPPLICATION.getProDefId()); |
|
|
|
ResultBean<UpdateFlowFieldVo> rrb = flowableFeign.handleProsess(bv); |
|
|
|
updateFlowFiled(rrb.getData()); |
|
|
|
return rrb; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 撤回 |
|
|
|
* |
|
|
|
* @param userSid |
|
|
|
* @param businessSid |
|
|
|
* @param flowTaskVo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean revokeProcess(String userSid, String businessSid, FlowTaskVo flowTaskVo) { |
|
|
|
com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl = new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo(); |
|
|
|
BeanUtil.copyProperties(flowTaskVo, fl); |
|
|
|
fl.setUserSid(userSid); |
|
|
|
ResultBean<List<LatestTaskVo>> resultBean = flowTaskFeign.revokeProcess(fl); |
|
|
|
if (!resultBean.getSuccess()) { |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
String nodeState = resultBean.getData().get(0).getName_(); |
|
|
|
String taskDefKey = resultBean.getData().get(0).getTask_def_key_(); |
|
|
|
String incomingSourceRef = resultBean.getData().get(0).getIncomingSourceRef(); |
|
|
|
Map<String, Object> paramMap = new HashMap<>(); |
|
|
|
paramMap.put("sid", businessSid); |
|
|
|
if (incomingSourceRef.contains("start")) { |
|
|
|
paramMap.put("nodeState", SysFormLinkFlowStateEnum.UNCOMMITTED.getState()); |
|
|
|
paramMap.put("taskDefKey", taskDefKey); |
|
|
|
paramMap.put("flowState", SysFormLinkFlowStateEnum.UNCOMMITTED.getCode()); |
|
|
|
} else { |
|
|
|
paramMap.put("nodeState", nodeState); |
|
|
|
paramMap.put("taskDefKey", taskDefKey); |
|
|
|
} |
|
|
|
updateFlowFiled(paramMap); |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 驳回 |
|
|
|
* |
|
|
|
* @param businessSid |
|
|
|
* @param flowTaskVo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean taskReject(String businessSid, FlowTaskVo flowTaskVo) { |
|
|
|
com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl = new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo(); |
|
|
|
BeanUtil.copyProperties(flowTaskVo, fl); |
|
|
|
ResultBean<List<LatestTaskVo>> resultBean = flowTaskFeign.taskReject(fl); |
|
|
|
if (!resultBean.getSuccess()) { |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
String nodeState = resultBean.getData().get(0).getName_(); |
|
|
|
String taskDefKey = resultBean.getData().get(0).getTask_def_key_(); |
|
|
|
String incomingSourceRef = resultBean.getData().get(0).getIncomingSourceRef(); |
|
|
|
Map<String, Object> paramMap = new HashMap<>(); |
|
|
|
paramMap.put("sid", businessSid); |
|
|
|
paramMap.put("nodeState", nodeState); |
|
|
|
paramMap.put("taskDefKey", taskDefKey); |
|
|
|
if (incomingSourceRef.contains("start")) { |
|
|
|
paramMap.put("flowState", SysFormLinkFlowStateEnum.REJECT.getCode()); |
|
|
|
} |
|
|
|
updateFlowFiled(paramMap); |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 终止流程 |
|
|
|
* |
|
|
|
* @param businessSid |
|
|
|
* @param flowTaskVo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean breakProcess(String businessSid, FlowTaskVo flowTaskVo) { |
|
|
|
com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl = new com.yxt.anrui.flowable.api.flowtask.FlowTaskVo(); |
|
|
|
BeanUtil.copyProperties(flowTaskVo, fl); |
|
|
|
ResultBean resultBean = flowTaskFeign.breakProcess(fl); |
|
|
|
if (!resultBean.getSuccess()) { |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
Map<String, Object> paramMap = new HashMap<>(); |
|
|
|
paramMap.put("sid", businessSid); |
|
|
|
paramMap.put("nodeState", String.valueOf(resultBean.getData())); |
|
|
|
paramMap.put("taskDefKey", "Event_end"); |
|
|
|
paramMap.put("flowState", SysFormLinkFlowStateEnum.BREAK.getCode()); |
|
|
|
updateFlowFiled(paramMap); |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 流程历史流转记录 |
|
|
|
* |
|
|
|
* @param procInsId |
|
|
|
* @param deployId |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean flowRecord(String procInsId, String deployId) { |
|
|
|
return flowTaskFeign.businessFlowRecord(procInsId, deployId); |
|
|
|
} |
|
|
|
|
|
|
|
public ResultBean getNextNodesForSubmit(SubmitScmApplyInboundDto dto) { |
|
|
|
BusinessVariables bv = new BusinessVariables(); |
|
|
|
bv.setModelId(ProcDefEnum.RECORDAPPLICATION.getProDefId()); |
|
|
|
bv.setTaskDefKey(dto.getTaskDefKey()); |
|
|
|
bv.setFormVariables(BeanUtil.beanToMap(dto)); |
|
|
|
ResultBean processCirculationNodesByMap = flowTaskFeign.getNextNodesForSubmit(bv); |
|
|
|
processCirculationNodesByMap.setCode("200"); |
|
|
|
processCirculationNodesByMap.setSuccess(true); |
|
|
|
return processCirculationNodesByMap; |
|
|
|
} |
|
|
|
|
|
|
|
public ResultBean getPreviousNodesForReject(SubmitScmApplyInboundDto dto) { |
|
|
|
BusinessVariables bv = new BusinessVariables(); |
|
|
|
bv.setTaskDefKey(dto.getTaskDefKey()); |
|
|
|
bv.setModelId(ProcDefEnum.RECORDAPPLICATION.getProDefId()); |
|
|
|
bv.setFormVariables(BeanUtil.beanToMap(dto)); |
|
|
|
ResultBean processCirculationNodesByMap = flowTaskFeign.getPreviousNodesForReject(bv); |
|
|
|
processCirculationNodesByMap.setCode("200"); |
|
|
|
processCirculationNodesByMap.setSuccess(true); |
|
|
|
return processCirculationNodesByMap; |
|
|
|
} |
|
|
|
} |