package com.chinaztt.mes.plan.service.impl;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
import com.chinaztt.mes.common.handler.StateMachineHandler;
|
import com.chinaztt.mes.common.numgen.NumberGenerator;
|
import com.chinaztt.mes.common.oa.OAProcess;
|
import com.chinaztt.mes.common.oa.OAProperty;
|
import com.chinaztt.mes.common.oa.OAResult;
|
import com.chinaztt.mes.common.util.StateResult;
|
import com.chinaztt.mes.plan.dto.OutsourcingOrderDTO;
|
import com.chinaztt.mes.plan.entity.OutsourcingOrder;
|
import com.chinaztt.mes.plan.mapper.OutsourcingOrderMapper;
|
import com.chinaztt.mes.plan.service.OutsourcingOrderService;
|
import com.chinaztt.mes.plan.state.outsourcing.OutsourcingOrderStateMachineConfig;
|
import com.chinaztt.mes.plan.state.outsourcing.constant.OutsourcingOrderEvents;
|
import com.chinaztt.mes.plan.state.outsourcing.constant.OutsourcingOrderStateStringValues;
|
import com.chinaztt.mes.plan.state.outsourcing.constant.OutsourcingOrderStates;
|
import com.chinaztt.ztt.common.core.util.R;
|
import com.chinaztt.ztt.common.security.util.SecurityUtils;
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.messaging.Message;
|
import org.springframework.messaging.support.MessageBuilder;
|
import org.springframework.statemachine.config.StateMachineFactory;
|
import org.springframework.statemachine.persist.StateMachinePersister;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 委外订单表
|
*
|
* @author cxf
|
* @date 2021-08-16 16:13:50
|
*/
|
@Slf4j
|
@Service
|
@AllArgsConstructor
|
@Transactional(rollbackFor = Exception.class)
|
public class OutsourcingOrderServiceImpl extends ServiceImpl<OutsourcingOrderMapper, OutsourcingOrder> implements OutsourcingOrderService {
|
public static final String OA_ERROR_CODE = "999";
|
private OAProperty oaProperty;
|
private NumberGenerator<OutsourcingOrder> outsourcingOrderNumberGenerator;
|
private StateMachineFactory<OutsourcingOrderStates, OutsourcingOrderEvents> outsourcingOrderStateMachineFactory;
|
private StateMachinePersister<OutsourcingOrderStates, OutsourcingOrderEvents, OutsourcingOrder> persister;
|
|
@Override
|
public boolean save(OutsourcingOrder outsourcingOrder) {
|
outsourcingOrder.setState(OutsourcingOrderStateStringValues.PLANNED);
|
checkOutsourcingOrderNo(outsourcingOrder);
|
return SqlHelper.retBool(baseMapper.insert(outsourcingOrder));
|
}
|
|
@Override
|
public boolean updateById(OutsourcingOrder outsourcingOrder) {
|
checkOutsourcingOrderNo(outsourcingOrder);
|
return SqlHelper.retBool(baseMapper.updateById(outsourcingOrder));
|
}
|
|
private void checkOutsourcingOrderNo(OutsourcingOrder outsourcingOrder) {
|
if (StringUtils.isBlank(outsourcingOrder.getOutsourcingOrderNo())) {
|
// 1. 自动生成编号
|
outsourcingOrder.setOutsourcingOrderNo(outsourcingOrderNumberGenerator.generateNumberWithPrefix(OutsourcingOrder.DIGIT, OutsourcingOrder.PREFIX, OutsourcingOrder::getOutsourcingOrderNo));
|
} else {
|
// 2.判断是否重复
|
List<OutsourcingOrder> repeatNos = baseMapper.selectList(Wrappers.<OutsourcingOrder>query().lambda()
|
.eq(OutsourcingOrder::getOutsourcingOrderNo, outsourcingOrder.getOutsourcingOrderNo()).ne(OutsourcingOrder::getId, outsourcingOrder.getId()));
|
if (CollectionUtil.isNotEmpty(repeatNos)) {
|
throw new RuntimeException("编号重复");
|
}
|
}
|
}
|
|
@Override
|
public IPage<OutsourcingOrderDTO> getOutsourcingOrderPage(Page page, QueryWrapper<OutsourcingOrderDTO> gen) {
|
return baseMapper.getOutsourcingOrderPage(page, gen);
|
}
|
|
@Override
|
public boolean changeState(List<Long> ids, String event) {
|
for (Long id : ids) {
|
OutsourcingOrder outsourcingOrder = baseMapper.selectById(id);
|
Message<OutsourcingOrderEvents> message = MessageBuilder.withPayload(OutsourcingOrderEvents.valueOf(event)).setHeader("outsourcingOrder", outsourcingOrder).build();
|
StateMachineHandler handler = new StateMachineHandler(outsourcingOrderStateMachineFactory, persister, OutsourcingOrderStateMachineConfig.MACHINE_ID, outsourcingOrder);
|
StateResult res = handler.sendEvent(message, outsourcingOrder.getId());
|
if (!res.isSuccess()) {
|
throw new RuntimeException(res.getMsg());
|
}
|
}
|
return true;
|
}
|
|
@Override
|
public OutsourcingOrderDTO selectById(Long id) {
|
return baseMapper.selectDtoById(id);
|
}
|
|
@Override
|
public R approvalOaByOutsourcingOrderId(Long outsourcingOrderId) {
|
OutsourcingOrder outsourcingOrder = baseMapper.selectById(outsourcingOrderId);
|
// 发起OA流程
|
Map<String, String> mainFields = new LinkedHashMap<String, String>();
|
OAResult oaResult;
|
try {
|
oaResult = OAProcess.start(mainFields, "委外订单采购流程", oaProperty.getOutsourcingOrderId(), SecurityUtils.getUser().getUsername());
|
} catch (Exception e) {
|
return R.failed("发起OA流程失败");
|
}
|
if (OA_ERROR_CODE.equals(oaResult.getErrorCode())) {
|
return R.failed(oaResult.getErrorMsg());
|
} else {
|
if (StringUtils.isNotBlank(oaResult.getAddWorkflowResult())) {
|
outsourcingOrder.setOaId(Long.parseLong(oaResult.getAddWorkflowResult()));
|
}
|
}
|
// OA流程发起成功,状态修改为审核中
|
outsourcingOrder.setOaState("02submit");
|
baseMapper.updateById(outsourcingOrder);
|
return R.ok(outsourcingOrder);
|
}
|
|
@Override
|
public boolean updateOutsourcingOrder(String isAudit, Long oaWorkId) {
|
return SqlHelper.retBool(baseMapper.updateByOaWorkId(isAudit, oaWorkId));
|
}
|
}
|