Browse Source

Merge remote-tracking branch 'origin/master'

master
God 2 years ago
parent
commit
6e18ba3a41
  1. 3
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclestate/BaseVehicleStateEnum.java
  2. 9
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicleactualsales/BaseVehicleActualSalesService.java
  3. 87
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehiclestate/BaseVehicleStateService.java
  4. 7
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java
  5. 2
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busarrearscarryvehicleapply/BusArrearsCarryVehicleApplyMapper.java
  6. 9
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busarrearscarryvehicleapply/BusArrearsCarryVehicleApplyMapper.xml
  7. 179
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busarrearscarryvehicleapply/BusArrearsCarryVehicleApplyService.java
  8. 6
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdelivered/BusDeliveredMapper.xml
  9. 1
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyService.java
  10. 4
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapplydetails/BusDeliveredApplyDetailsMapper.xml
  11. 4
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdepositfictitious/BusDepositFictitiousMapper.xml
  12. 4
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busmaindeposit/BusMainDepositMapper.xml
  13. 2
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busmaindeposit/BusMainDepositService.java
  14. 2
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesordervehicle/BusSalesOrderVehicleMapper.xml
  15. 175
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml
  16. 5
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java
  17. 12
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java
  18. 228
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java

3
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclestate/BaseVehicleStateEnum.java

@ -73,6 +73,9 @@ public class BaseVehicleStateEnum {
FIN_WRQ("8", "认款未完成"),
CKTJ("9", "出库提交"),
CKZZ("10", "出库终止、驳回以及撤回到第一环节时"),
QKTCTJ("11", "欠款提车提交"),
QKTCZZ("12", "欠款提车终止"),
QKTCTG("13", "欠款提车审核通过"),
;

9
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicleactualsales/BaseVehicleActualSalesService.java

@ -35,6 +35,7 @@ import com.yxt.anrui.fin.api.finpaymentrecord.FinPaymentrecordDto;
import com.yxt.anrui.fin.api.finpaymentrecord.FinPaymentrecordFeign;
import com.yxt.anrui.flowable.api.flow.FlowableFeign;
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo;
import com.yxt.anrui.flowable.api.flow2.FlowFeign;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskFeign;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskVo;
import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo;
@ -105,6 +106,8 @@ public class BaseVehicleActualSalesService extends MybatisBaseService<BaseVehicl
private SysOrganizationFeign sysOrganizationFeign;
@Autowired
private BaseVehicleBrandService baseVehicleBrandService;
@Autowired
private FlowFeign flowFeign;
/**
* 分页列表
@ -779,12 +782,6 @@ public class BaseVehicleActualSalesService extends MybatisBaseService<BaseVehicl
String settlementStatusValue = VehicleState.BuyoutEnum.UN_BUYOUT.getRemarks();
updateByVinNo(baseVehicleActualSales.getSid(), settlementStatus, settlementStatusValue);
}
/*if (query.getUserSid().equals(baseVehicleActualSales.getCreateBySid())) {
//更新车辆状态为未买断
String settlementStatus = VehicleState.BuyoutEnum.UN_BUYOUT.getCode();
String settlementStatusValue = VehicleState.BuyoutEnum.UN_BUYOUT.getRemarks();
updateByVinNo(baseVehicleActualSales.getSid(), settlementStatus, settlementStatusValue);
}*/
return rb.success().setData(resultBean.getData());
}
}

87
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehiclestate/BaseVehicleStateService.java

@ -31,46 +31,59 @@ public class BaseVehicleStateService extends MybatisBaseService<BaseVehicleState
baseVehicleState.setBusNo(BaseVehicleStateEnum.BusNoEnum.DDBA.getBusNoKey());
baseVehicleState.setBusName(BaseVehicleStateEnum.BusNoEnum.DDBA.getBusNoValue());
baseMapper.insert(baseVehicleState);
} else if (BaseVehicleStateEnum.OperateTypeEnum.DDBA_PASS.getTypeKey().equals(operateType)) {
//销售订单办理通过后更新业务阶段为出库开票、小状态为待出库,款项状态为0
baseVehicleState.setFinState("0");
baseVehicleState.setBusNo(BaseVehicleStateEnum.BusNoEnum.CKKP.getBusNoKey());
baseVehicleState.setBusName(BaseVehicleStateEnum.BusNoEnum.CKKP.getBusNoValue());
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.CKKP_STATE_1.getStateKey());
} else if (BaseVehicleStateEnum.OperateTypeEnum.CKKP_PASS.getTypeKey().equals(operateType)) {
//出库通过后更新业务阶段为交车,小状态为待准备501
baseVehicleState.setBusNo(BaseVehicleStateEnum.BusNoEnum.JC.getBusNoKey());
baseVehicleState.setBusName(BaseVehicleStateEnum.BusNoEnum.JC.getBusNoValue());
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.JC_STATE_1.getStateKey());
} else if (BaseVehicleStateEnum.OperateTypeEnum.JC_PASS.getTypeKey().equals(operateType)) {
//交车确认通过后更新业务状态为业务结束,小状态为业务完成601
baseVehicleState.setBusNo(BaseVehicleStateEnum.BusNoEnum.YWJS.getBusNoKey());
baseVehicleState.setBusName(BaseVehicleStateEnum.BusNoEnum.YWJS.getBusNoValue());
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.YWJS_STATE_1.getStateKey());
} else if (BaseVehicleStateEnum.OperateTypeEnum.BUS_STOP.getTypeKey().equals(operateType)) {
//如果为终止或作废,则更新小状态为业务终止602
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.YWJS_STATE_2.getStateKey());
} else if (BaseVehicleStateEnum.OperateTypeEnum.DDBA_SAVEVIN.getTypeKey().equals(operateType)) {
//销售订单录入车架号
baseVehicleState.setVinNo(dto.getVinNo());
baseVehicleState.setVinSid(dto.getVinSid());
} else if (BaseVehicleStateEnum.OperateTypeEnum.FIN_RQ.getTypeKey().equals(operateType)) {
//认款办理确认以及结转审核通过的更新款项状态为1 已交清,否则为0
baseVehicleState.setFinState(BaseVehicleStateEnum.BusStateEnum.FIN_STATE_JQ.getStateKey());
}else if(BaseVehicleStateEnum.OperateTypeEnum.FIN_WRQ.getTypeKey().equals(operateType)){
//认款办理确认以及结转审核通过的更新款项状态为1 已交清,否则为0
baseVehicleState.setFinState(BaseVehicleStateEnum.BusStateEnum.FIN_STATE_WJQ.getStateKey());
}else if(BaseVehicleStateEnum.OperateTypeEnum.CKTJ.getTypeKey().equals(operateType)){
//出库提交申请后,将小状态修改为出库中402
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.CKKP_STATE_2.getStateKey());
}else if(BaseVehicleStateEnum.OperateTypeEnum.CKZZ.getTypeKey().equals(operateType)){
//出库申请终止后,将小状态修改为401待出库
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.CKKP_STATE_1.getStateKey());
}
if(baseVehicleState != null){
if (BaseVehicleStateEnum.OperateTypeEnum.DDBA_PASS.getTypeKey().equals(operateType)) {
//销售订单办理通过后更新业务阶段为出库开票、小状态为待出库,款项状态为0
baseVehicleState.setFinState("0");
baseVehicleState.setCarryVehicleState("0");
baseVehicleState.setCarryInvoiceState("0");
baseVehicleState.setBusNo(BaseVehicleStateEnum.BusNoEnum.CKKP.getBusNoKey());
baseVehicleState.setBusName(BaseVehicleStateEnum.BusNoEnum.CKKP.getBusNoValue());
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.CKKP_STATE_1.getStateKey());
} else if (BaseVehicleStateEnum.OperateTypeEnum.CKKP_PASS.getTypeKey().equals(operateType)) {
//出库通过后更新业务阶段为交车,小状态为待准备501
baseVehicleState.setBusNo(BaseVehicleStateEnum.BusNoEnum.JC.getBusNoKey());
baseVehicleState.setBusName(BaseVehicleStateEnum.BusNoEnum.JC.getBusNoValue());
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.JC_STATE_1.getStateKey());
} else if (BaseVehicleStateEnum.OperateTypeEnum.JC_PASS.getTypeKey().equals(operateType)) {
//交车确认通过后更新业务状态为业务结束,小状态为业务完成601
baseVehicleState.setBusNo(BaseVehicleStateEnum.BusNoEnum.YWJS.getBusNoKey());
baseVehicleState.setBusName(BaseVehicleStateEnum.BusNoEnum.YWJS.getBusNoValue());
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.YWJS_STATE_1.getStateKey());
} else if (BaseVehicleStateEnum.OperateTypeEnum.BUS_STOP.getTypeKey().equals(operateType)) {
//如果为终止或作废,则更新小状态为业务终止602
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.YWJS_STATE_2.getStateKey());
} else if (BaseVehicleStateEnum.OperateTypeEnum.DDBA_SAVEVIN.getTypeKey().equals(operateType)) {
//销售订单录入车架号
baseVehicleState.setVinNo(dto.getVinNo());
baseVehicleState.setVinSid(dto.getVinSid());
} else if (BaseVehicleStateEnum.OperateTypeEnum.FIN_RQ.getTypeKey().equals(operateType)) {
//认款办理确认以及结转审核通过的更新款项状态为1 已交清,否则为0
baseVehicleState.setFinState(BaseVehicleStateEnum.BusStateEnum.FIN_STATE_JQ.getStateKey());
}else if(BaseVehicleStateEnum.OperateTypeEnum.FIN_WRQ.getTypeKey().equals(operateType)){
//认款办理确认以及结转审核通过的更新款项状态为1 已交清,否则为0
baseVehicleState.setFinState(BaseVehicleStateEnum.BusStateEnum.FIN_STATE_WJQ.getStateKey());
}else if(BaseVehicleStateEnum.OperateTypeEnum.CKTJ.getTypeKey().equals(operateType)){
//出库提交申请后,将小状态修改为出库中402
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.CKKP_STATE_2.getStateKey());
}else if(BaseVehicleStateEnum.OperateTypeEnum.CKZZ.getTypeKey().equals(operateType)){
//出库申请终止后,将小状态修改为401待出库
baseVehicleState.setBusState(BaseVehicleStateEnum.BusStateEnum.CKKP_STATE_1.getStateKey());
}else if(BaseVehicleStateEnum.OperateTypeEnum.QKTCTJ.getTypeKey().equals(operateType)){
//欠款提车提交后,将提车状态修改为1,0为未提交过,1为审核通过,2为审核中
baseVehicleState.setCarryVehicleState("2");
}else if(BaseVehicleStateEnum.OperateTypeEnum.QKTCZZ.getTypeKey().equals(operateType)){
//欠款提车终止,将提车状态修改为0,0为未提交过,1为审核通过,2为审核中
baseVehicleState.setCarryVehicleState("0");
}else if(BaseVehicleStateEnum.OperateTypeEnum.QKTCTG.getTypeKey().equals(operateType)){
//欠款提车审核通过,将提车状态修改为1,0为未提交过,1为审核通过,2为审核中
baseVehicleState.setCarryVehicleState("1");
}
baseMapper.updateById(baseVehicleState);
}
baseMapper.updateById(baseVehicleState);
});

7
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java

@ -58,6 +58,7 @@ import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingFeign;
import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedFeign;
import com.yxt.anrui.flowable.api.flow.FlowableFeign;
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo;
import com.yxt.anrui.flowable.api.flow2.FlowFeign;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskFeign;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskVo;
import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo;
@ -171,6 +172,8 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
@Autowired
private FlowableFeign flowableFeign;
@Autowired
private FlowFeign flowFeign;
@Autowired
private MessageFeign messageFeign;
@Autowired
private FlowTaskFeign flowTaskFeign;
@ -1540,7 +1543,7 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
//流程定义id
bv.setModelId(ProcDefEnum.CONTRACTAPPLY.getProDefId());
if (r == 1) {
ResultBean<UpdateFlowFieldVo> voResultBean = flowableFeign.startProcess(bv);
ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv);
UpdateFlowFieldVo ufVo = voResultBean.getData();
updateFlowFiled(BeanUtil.beanToMap(ufVo));
if (!voResultBean.getSuccess()) {
@ -2298,7 +2301,7 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
variables.put("app", appMap);
bv.setFormVariables(variables);
if (bv.getTaskId().equals(commonContract.getTaskId())) {
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.handleProsess(bv);
ResultBean<UpdateFlowFieldVo> resultBean = flowFeign.handleProsess(bv);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}

2
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busarrearscarryvehicleapply/BusArrearsCarryVehicleApplyMapper.java

@ -84,4 +84,6 @@ public interface BusArrearsCarryVehicleApplyMapper extends BaseMapper<BusArrears
BusArrearsCarryVehicleApply selSubmitLc(String vehSid);
BusArrearsCarryVehicleApplyVo selComByVehSid(String vehSid);
List<String> selectByNo(String sid);
}

9
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busarrearscarryvehicleapply/BusArrearsCarryVehicleApplyMapper.xml

@ -143,4 +143,13 @@
WHERE bacva.`nodeState` = "已办结"
AND bacvd.`vinSid` = #{vehSid}
</select>
<select id="selectByNo" resultType="java.lang.String">
select bv.sid
from bus_arrears_carry_vehicle_details bd
LEFT JOIN bus_arrears_carry_vehicle_apply ba on ba.sid = bd.applySid
left join bus_sales_order_vehicle bv on bv.linkSid = bd.vinSid
left join bus_sales_order bo on bo.sid = bv.salesOrderSid
where bd.applySid = #{sid} and bo.contractNo = ba.contractNo
</select>
</mapper>

179
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busarrearscarryvehicleapply/BusArrearsCarryVehicleApplyService.java

@ -7,6 +7,7 @@ import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.base.api.basemodelconfig.BaseModelConfigFeign;
import com.yxt.anrui.base.api.basemodelconfig.BaseModelConfigSelectVo;
import com.yxt.anrui.base.api.basetrailer.BaseTrailerFeign;
@ -15,6 +16,9 @@ import com.yxt.anrui.base.api.basetrailer.TraliveredVo;
import com.yxt.anrui.base.api.basevehicle.BaseVehicleFeign;
import com.yxt.anrui.base.api.basevehiclemodel.BaseVehicleModel;
import com.yxt.anrui.base.api.basevehiclemodel.BaseVehicleModelFeign;
import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleStateDto;
import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleStateEnum;
import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleStateFeign;
import com.yxt.anrui.base.api.basevehicletempstate.BaseVehicleTempstate;
import com.yxt.anrui.base.api.basevehicletempstate.BaseVehicleTempstateDto;
import com.yxt.anrui.base.api.basevehicletempstate.BaseVehicleTempstateFeign;
@ -87,6 +91,7 @@ import com.yxt.messagecenter.api.messagelist.MessageList;
import com.yxt.messagecenter.api.messagelist.MessageListFeign;
import org.apache.commons.collections4.comparators.NullComparator;
import org.apache.commons.lang3.StringUtils;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -100,6 +105,7 @@ import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
/**
@ -203,6 +209,8 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
private com.yxt.anrui.portal.api.flow.FlowableFeign flowableFeignPro;
@Autowired
private MessageListFeign messageListFeign;
@Autowired
private BaseVehicleStateFeign baseVehicleStateFeign;
private static final NullComparator<String> nullComparator = new NullComparator<>();
/**
@ -1738,6 +1746,7 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
Map<String, Object> appMap = new HashMap<>();
//需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。
appMap.put("sid", businessSid);
appMap.put("contractNO",busArrearsCarryVehicleApply.getContractNo());
variables.put("app", appMap);
if (StringUtils.isNotBlank(dto.getIsFinance())) {
variables.put("jinrong", "1".equals(dto.getIsFinance()));
@ -1759,6 +1768,7 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
}
UpdateFlowFieldVo ufVo = voResultBean.getData();
updateFlowFiled(BeanUtil.beanToMap(ufVo));
busArrearsCarryVehicleApply = fetchBySid(businessSid);
BaseVehicleTempstateDto baseVehicleTempstateDto = new BaseVehicleTempstateDto();
baseVehicleTempstateDto.setBusSid(businessSid);
baseVehicleTempstateDto.setTempStateKey(VehicleStateTempOrLast.PaymentEnum.ARREARS_CARRY_VEHICLE.getCode());
@ -1772,18 +1782,54 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
baseVehicleTempstateFeign.save(baseVehicleTempstateDto);
}
baseMapper.updateType(businessSid);
//极光推送
busArrearsCarryVehicleApply = fetchBySid(businessSid);
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("欠款提车申请");
messageFlowableQuery.setMsgContent(busArrearsCarryVehicleApply.getApplyName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle("欠款提车申请");
ResultBean<String> stringResultBean = messageFeign.pushMessage(messageFlowableQuery);
//==============================修改车辆的持久状态组装数据
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
BusArrearsCarryVehicleApply finalBusArrearsCarryVehicleApply = busArrearsCarryVehicleApply;
Future future1 = pool.submit(() -> {
List<BaseVehicleStateDto> dtoList = new ArrayList<>();
List<String> vinSidList = baseMapper.selectByNo(finalBusArrearsCarryVehicleApply.getSid());
vinSidList.removeAll(Collections.singleton(null));
if (!vinSidList.isEmpty()) {
vinSidList.stream().forEach(v -> {
BaseVehicleStateDto baseVehicleStateDto = new BaseVehicleStateDto();
baseVehicleStateDto.setOperateType(BaseVehicleStateEnum.OperateTypeEnum.QKTCTJ.getTypeKey());
baseVehicleStateDto.setBusSid(v);
dtoList.add(baseVehicleStateDto);
});
ResultBean busVehicleStateResultBean = baseVehicleStateFeign.saveOrUpdate(dtoList);
}
});
} catch (Exception e) {
e.printStackTrace();
}
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
BusArrearsCarryVehicleApply finalBusArrearsCarryVehicleApply1 = busArrearsCarryVehicleApply;
Future future1 = pool.submit(() -> {
//极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("欠款提车申请");
messageFlowableQuery.setMsgContent(finalBusArrearsCarryVehicleApply1.getApplyName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle("欠款提车申请");
ResultBean<String> stringResultBean = messageFeign.pushMessage(messageFlowableQuery);
});
} catch (Exception e) {
e.printStackTrace();
}
return voResultBean;
}
if (r == 2) {
@ -1857,6 +1903,7 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
Map<String, Object> variables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", bv.getBusinessSid());
appMap.put("contractNO",busArrearsCarryVehicleApply.getContractNo());
variables.put("app", appMap);
if (StringUtils.isNotBlank(busArrearsCarryVehicleApply.getIsFinance())) {
variables.put("jinrong", "1".equals(busArrearsCarryVehicleApply.getIsFinance()));
@ -1926,8 +1973,33 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
}
//修改状态
baseMapper.updateType(bv.getBusinessSid());
//==============================修改车辆的持久状态组装数据
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
BusArrearsCarryVehicleApply finalBusArrearsCarryVehicleApply = busArrearsCarryVehicleApply;
Future future1 = pool.submit(() -> {
List<BaseVehicleStateDto> dtoList = new ArrayList<>();
List<String> vinSidList = baseMapper.selectByNo(finalBusArrearsCarryVehicleApply.getSid());
vinSidList.removeAll(Collections.singleton(null));
if (!vinSidList.isEmpty()) {
vinSidList.stream().forEach(v -> {
BaseVehicleStateDto baseVehicleStateDto = new BaseVehicleStateDto();
baseVehicleStateDto.setOperateType(BaseVehicleStateEnum.OperateTypeEnum.QKTCTG.getTypeKey());
baseVehicleStateDto.setBusSid(v);
dtoList.add(baseVehicleStateDto);
});
ResultBean busVehicleStateResultBean = baseVehicleStateFeign.saveOrUpdate(dtoList);
}
});
} catch (Exception e) {
e.printStackTrace();
}
//推送出库申请
List<BusArrearsCarryVehicleDetailsVo> vehicleDetailsVos = busArrearsCarryVehicleDetailsService.selByArrearsSid(busArrearsCarryVehicleApply.getSid());
/*List<BusArrearsCarryVehicleDetailsVo> vehicleDetailsVos = busArrearsCarryVehicleDetailsService.selByArrearsSid(busArrearsCarryVehicleApply.getSid());
if (vehicleDetailsVos.size() > 0) {
for (BusArrearsCarryVehicleDetailsVo vehicleDetailsVo : vehicleDetailsVos) {
BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleService.selectByNoAndVinSid(busArrearsCarryVehicleApply.getContractNo(),vehicleDetailsVo.getVinSid());
@ -1961,7 +2033,7 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
busDeliveredService.saveOrUpdateDto(busDeliveredDto);
}
}
}
}*/
}
return rb.success().setData(resultBean.getData());
} else {
@ -1976,6 +2048,7 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
Map<String, Object> variables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", bv.getBusinessSid());
appMap.put("contractNO",busArrearsCarryVehicleApply.getContractNo());
variables.put("app", appMap);
//=================================
FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery();
@ -2046,6 +2119,31 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
}
//修改状态
baseMapper.updateType(bv.getBusinessSid());
//==============================修改车辆的持久状态组装数据
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
BusArrearsCarryVehicleApply finalBusArrearsCarryVehicleApply = busArrearsCarryVehicleApply;
Future future1 = pool.submit(() -> {
List<BaseVehicleStateDto> dtoList = new ArrayList<>();
List<String> vinSidList = baseMapper.selectByNo(finalBusArrearsCarryVehicleApply.getSid());
vinSidList.removeAll(Collections.singleton(null));
if (!vinSidList.isEmpty()) {
vinSidList.stream().forEach(v -> {
BaseVehicleStateDto baseVehicleStateDto = new BaseVehicleStateDto();
baseVehicleStateDto.setOperateType(BaseVehicleStateEnum.OperateTypeEnum.QKTCTG.getTypeKey());
baseVehicleStateDto.setBusSid(v);
dtoList.add(baseVehicleStateDto);
});
ResultBean busVehicleStateResultBean = baseVehicleStateFeign.saveOrUpdate(dtoList);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
return rb.success().setData(resultBean1.getData());
@ -2133,6 +2231,7 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
}
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", query.getBusinessSid());
appMap.put("contractNO",busArrearsCarryVehicleApply.getContractNo());
variables.put("app", appMap);
//=================================
FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery();
@ -2196,6 +2295,7 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
}
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", query.getBusinessSid());
appMap.put("contractNO",busArrearsCarryVehicleApply.getContractNo());
variables.put("app", appMap);
//=================================
FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery();
@ -2246,6 +2346,31 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
}
updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
baseVehicleTempstateFeign.delByBusSid(busArrearsCarryVehicleApply.getSid());
//==============================修改车辆的持久状态组装数据
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
BusArrearsCarryVehicleApply finalBusArrearsCarryVehicleApply = busArrearsCarryVehicleApply;
Future future1 = pool.submit(() -> {
List<BaseVehicleStateDto> dtoList = new ArrayList<>();
List<String> vinSidList = baseMapper.selectByNo(finalBusArrearsCarryVehicleApply.getSid());
vinSidList.removeAll(Collections.singleton(null));
if (!vinSidList.isEmpty()) {
vinSidList.stream().forEach(v -> {
BaseVehicleStateDto baseVehicleStateDto = new BaseVehicleStateDto();
baseVehicleStateDto.setOperateType(BaseVehicleStateEnum.OperateTypeEnum.QKTCZZ.getTypeKey());
baseVehicleStateDto.setBusSid(v);
dtoList.add(baseVehicleStateDto);
});
ResultBean busVehicleStateResultBean = baseVehicleStateFeign.saveOrUpdate(dtoList);
}
});
} catch (Exception e) {
e.printStackTrace();
}
return rb.success().setData(resultBean.getData());
} else {
if (businessTaskId.equals(query.getTaskId())) {
@ -2257,10 +2382,36 @@ public class BusArrearsCarryVehicleApplyService extends MybatisBaseService<BusAr
}
updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
baseVehicleTempstateFeign.delByBusSid(busArrearsCarryVehicleApply.getSid());
//==============================修改车辆的持久状态组装数据
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
BusArrearsCarryVehicleApply finalBusArrearsCarryVehicleApply = busArrearsCarryVehicleApply;
Future future1 = pool.submit(() -> {
List<BaseVehicleStateDto> dtoList = new ArrayList<>();
List<String> vinSidList = baseMapper.selectByNo(finalBusArrearsCarryVehicleApply.getSid());
vinSidList.removeAll(Collections.singleton(null));
if (!vinSidList.isEmpty()) {
vinSidList.stream().forEach(v -> {
BaseVehicleStateDto baseVehicleStateDto = new BaseVehicleStateDto();
baseVehicleStateDto.setOperateType(BaseVehicleStateEnum.OperateTypeEnum.QKTCZZ.getTypeKey());
baseVehicleStateDto.setBusSid(v);
dtoList.add(baseVehicleStateDto);
});
ResultBean busVehicleStateResultBean = baseVehicleStateFeign.saveOrUpdate(dtoList);
}
});
} catch (Exception e) {
e.printStackTrace();
}
return rb.success().setData(resultBean.getData());
}
}
}
return rb.setMsg("操作失败!提交的数据不一致!");
}

6
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdelivered/BusDeliveredMapper.xml

@ -287,7 +287,7 @@
RIGHT(bv.linkNo, 8) as vinNo,
bv.linkSid vinSid,
bv.sid busVinSid
from (select busSid from anrui_base.base_vehicle_state where busState = '401' and finState = '1') as bs
from (select busSid from anrui_base.base_vehicle_state where busState = '401' and (finState = '1' or carryVehicleState = '1')) as bs
left join bus_sales_order_vehicle bv on bs.busSid = bv.sid
left join bus_sales_order bo on bo.sid = bv.salesOrderSid
left join anrui_base.base_vehicle bbv on bbv.sid = bv.linkSid
@ -304,7 +304,7 @@
bo.contractNo,
bo.customerName as name,
bo.payType paymentMethod
from (select busSid from anrui_base.base_vehicle_state where busState = '401' and finState = '1') as bs
from (select busSid from anrui_base.base_vehicle_state where busState = '401' and (finState = '1' or carryVehicleState = 1)) as bs
left join bus_sales_order_vehicle bv on bs.busSid = bv.sid
left join bus_sales_order bo on bo.sid = bv.salesOrderSid
left join anrui_base.base_vehicle bbv on bbv.sid = bv.linkSid
@ -326,7 +326,7 @@
</resultMap>
<select id="vinLists" resultType="com.yxt.anrui.buscenter.api.busdelivered.AppVinListVo">
select bv.linkSid vinSid,bv.sid busVinSid,RIGHT(bv.linkNo, 8) as vin
from (select busSid from anrui_base.base_vehicle_state where busState = '401' and finState = '1') as bs
from (select busSid from anrui_base.base_vehicle_state where busState = '401' and (finState = '1' or carryVehicleState = 1)) as bs
left join bus_sales_order_vehicle bv on bs.busSid = bv.sid
left join bus_sales_order bo on bo.sid = bv.salesOrderSid
where length(bv.linkSid)>0 and bo.contractNo = #{contractNo}

1
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyService.java

@ -749,7 +749,6 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
appMap.put("contractId", busDeliveredApply.getContractNo());
appMap.put("contract_id", busDeliveredApply.getContractNo());
variables.put("app", appMap);
// variables.put("isDanBao","2".equals(busDeliveredApply.getPaymentMethodKey()));
//根据合同号查询销售订单
if (!"2".equals(busDeliveredApply.getPaymentMethodKey())) {
BusSalesOrder busSalesOrder = busSalesOrderService.selectByContractNos(busDeliveredApply.getContractNo());

4
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapplydetails/BusDeliveredApplyDetailsMapper.xml

@ -70,7 +70,9 @@
<select id="selectVinSidByApplySid" resultType="java.lang.String">
select bv.sid
from bus_delivered_apply_details bd
left join bus_delivered_apply ba on ba.sid = bd.applySid
left join bus_sales_order_vehicle bv on bv.linkSid = bd.vinSid
where bd.applySid = #{sid}
left join bus_sales_order bo on bo.sid = bv.salesOrderSid
where bd.applySid = #{sid} and bo.contractNo = ba.contractNo
</select>
</mapper>

4
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdepositfictitious/BusDepositFictitiousMapper.xml

@ -61,7 +61,7 @@
and fc.busSid = #{depositBillNo}
group by f.selectSid
having usePrice>0
union all
<!-- union all
SELECT
COALESCE ( bf.price, 0 ) as usePrice,bso.billNo as contractId,bso.customerName as customer,'简易订单转订金' as purpose,bso.sid as salesOrderSid
FROM
@ -70,7 +70,7 @@
LEFT JOIN bus_sales_order bso ON bso.sid = bsod.salesOrderSid
where depositBillSid =#{depositBillNo}
group by bso.billNo
having usePrice>0
having usePrice>0-->
</select>
<select id="getList"

4
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busmaindeposit/BusMainDepositMapper.xml

@ -404,11 +404,11 @@
and fc.busSid = #{busMainSid}
GROUP BY
d.`sid`
union all
<!-- union all
SELECT
COALESCE ( SUM(bf.price), 0 ) as useDeposit
FROM
bus_deposit_fictitious bf where depositBillSid = #{busMainSid}) d
bus_deposit_fictitious bf where depositBillSid = #{busMainSid}-->) d
</select>

2
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busmaindeposit/BusMainDepositService.java

@ -664,7 +664,7 @@ public class BusMainDepositService extends MybatisBaseService<BusMainDepositMapp
record.setReason(finCollectionConfirmation.getReason());
} else {
record.setPaymentState("已确认");
if (StringUtils.isNotBlank(record.getUsedDeposit())) {
if (StringUtils.isNotBlank(useDepositMoney)) {
record.setDescribe("订金: " + vo.getDeposit() + "元 已用:" + useDepositMoney + "元");
} else {
record.setDescribe("订金: " + vo.getDeposit() + "元 已用:" + "0" + "元");

2
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesordervehicle/BusSalesOrderVehicleMapper.xml

@ -101,7 +101,7 @@
<select id="selectByNoAndVinSidsNew"
resultType="com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle">
select bv.linkSid,bv.sid,bv.linkNo
from (select busSid from anrui_base.base_vehicle_state where busState = '401' and finState = '1') as bs
from (select busSid from anrui_base.base_vehicle_state where busState = '401' and (finState = '1' or carryVehicleState = 1)) as bs
left join bus_sales_order_vehicle bv on bs.busSid = bv.sid
left join bus_sales_order bo on bo.sid = bv.salesOrderSid
where length(bv.linkSid)>0 and bo.contractNo = #{contractNo}

175
anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml

@ -52,24 +52,24 @@
</where>
order by id asc-->
SELECT distinct furd.sid,
furd.contractNo AS contractNo,
furd.receivablesName AS receivablesName,
furd.customerPhone AS customerPhone,
furd.customerName AS `customerName`,
furd.contractNo AS contractNo,
furd.receivablesName AS receivablesName,
furd.customerPhone AS customerPhone,
furd.customerName AS `customerName`,
furd.customerSid,
furd.useOrgSid,
COALESCE ( SUM( df.dbalance ), 0 ) AS realMoney,
cast((furd.`reveivableMoney` - COALESCE(SUM( df.dbalance ), 0)) AS DECIMAL(10, 2)) AS currentReceivableMoney,
COALESCE(SUM(df.dbalance), 0) AS realMoney,
cast((furd.`reveivableMoney` - COALESCE(SUM(df.dbalance), 0)) AS DECIMAL(10, 2)) AS currentReceivableMoney,
furd.reveivableMoney,
furd.contractSid,
if(bv.linkNo is null or LENGTH(trim(bv.linkNo)) &lt; 1,
if(furd.payTypeKey = 2, RIGHT(bv.temporaryNo, 2), bv.temporaryNo),
RIGHT(bv.linkNo, 8)) as VIN,
RIGHT(bv.linkNo, 8)) as VIN,
furd.busVinSid,
furd.payType,
furd.payTypeKey,
0 as subscribedOf,
furd.sid as receivablesSid
0 as subscribedOf,
furd.sid as receivablesSid
FROM fin_uncollected_receivables_detailed furd
left join anrui_buscenter.bus_sales_order_vehicle bv on bv.sid = furd.busVinSid
LEFT JOIN (
@ -93,7 +93,7 @@
${ew.sqlSegment}
and length(furd.busVinSid) > 0
</where>
group by furd.sid,currentReceivableMoney>0,furd.contractNo
group by furd.sid, currentReceivableMoney>0, furd.contractNo
having currentReceivableMoney>0
order by furd.contractNo desc
</select>
@ -170,53 +170,142 @@
<select id="receivedSelect" resultType="com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.ReceiveSeleteVo">
SELECT furd.receivablesName,
furd.reveivableMoney,
furd.sid as receivablesSid,
furd.sid as receivablesSid,
(
select ifnull(sum(dbalance), 0) as subscriptionMoney
from (SELECT d.receivablesSid,
cast((
d.`subscriptionMoney` - COALESCE(SUM(f.`thisUseMoney`), 0)) AS DECIMAL(10, 2)) AS dbalance
FROM fin_selected_receivables_detailed d
LEFT JOIN (
SELECT f.busSid,
f.thisUseMoney
FROM fin_funds_carried_forward_veh f
JOIN `fin_funds_carried_forward_apply` fa ON f.mainSid = fa.sid
WHERE fa.`nodeState` != '终止'
) f ON f.`busSid` = d.`sid`
WHERE d.auditState = 3
GROUP BY d.`sid`) d
WHERE d.receivablesSid = furd.sid) as subscriptionMoneyAll,
select ifnull(sum(dbalance), 0) as subscriptionMoney
from (SELECT d.receivablesSid,
cast((
d.`subscriptionMoney` - COALESCE(SUM(f.`thisUseMoney`), 0)) AS DECIMAL(10, 2)) AS dbalance
FROM fin_selected_receivables_detailed d
LEFT JOIN (
SELECT f.busSid,
f.thisUseMoney
FROM fin_funds_carried_forward_veh f
JOIN `fin_funds_carried_forward_apply` fa ON f.mainSid = fa.sid
WHERE fa.`nodeState` != '终止'
) f ON f.`busSid` = d.`sid`
WHERE d.auditState = 3
GROUP BY d.`sid`) d
WHERE d.receivablesSid = furd.sid) as subscriptionMoneyAll,
(
SELECT group_concat(length(remarks) > 0, ',')
FROM fin_selected_receivables_detailed
WHERE receivablesSid = furd.sid
AND auditState = 3
) AS remarks
) AS remarks
FROM fin_uncollected_receivables_detailed furd
WHERE furd.busVinSid = #{busVinSid}
</select>
<select id="selectByContractNoOne" resultType="java.lang.String">
select fun.busVinSid
from fin_uncollected_receivables_detailed fun
left join fin_uncollected_receivables_detailed fun1 on fun.busVinSid = fun1.busVinSid
where fun.contractNo = #{contractNo}
and (fun.currentReceivableMoney &lt; 0 or fun.currentReceivableMoney = 0)
and fun.receivablesName = '订金'
and (fun1.currentReceivableMoney &lt; 0 or fun1.currentReceivableMoney = 0)
and (fun1.receivablesName = '首付款及费用' or fun1.receivablesName = '车款')
<!-- select fun.busVinSid
from fin_uncollected_receivables_detailed fun
left join fin_uncollected_receivables_detailed fun1 on fun.busVinSid = fun1.busVinSid
where fun.contractNo = #{contractNo}
and (fun.currentReceivableMoney &lt; 0 or fun.currentReceivableMoney = 0)
and fun.receivablesName = '订金'
and (fun1.currentReceivableMoney &lt; 0 or fun1.currentReceivableMoney = 0)
and (fun1.receivablesName = '首付款及费用' or fun1.receivablesName = '车款')-->
select d.busVinSid
from (SELECT fun.busVinSid,
(
fun.`reveivableMoney` - COALESCE(SUM(df.dbalance), 0)) AS dblance,
(
fun1.`reveivableMoney` - COALESCE(SUM(df1.dbalance), 0)) AS dblance1
FROM fin_uncollected_receivables_detailed fun
LEFT JOIN (
SELECT d.sid,
d.`receivablesSid`,
(
d.`subscriptionMoney` - COALESCE(SUM(f.`thisUseMoney`), 0)) AS dbalance
FROM fin_selected_receivables_detailed d
LEFT JOIN (
SELECT f.busSid,
f.thisUseMoney
FROM fin_funds_carried_forward_veh f
JOIN `fin_funds_carried_forward_apply` fa ON f.mainSid = fa.sid
WHERE fa.`nodeState` != '终止'
) f ON f.`busSid` = d.`sid`
WHERE d.`auditState` = 3
GROUP BY d.`sid`
) df ON df.receivablesSid = fun.`sid`
LEFT JOIN fin_uncollected_receivables_detailed fun1 ON fun1.busVinSid = fun.busVinSid
LEFT JOIN (
SELECT d.sid,
d.`receivablesSid`,
(
d.`subscriptionMoney` - COALESCE(SUM(f.`thisUseMoney`), 0)) AS dbalance
FROM fin_selected_receivables_detailed d
LEFT JOIN (
SELECT f.busSid,
f.thisUseMoney
FROM fin_funds_carried_forward_veh f
JOIN `fin_funds_carried_forward_apply` fa ON f.mainSid = fa.sid
WHERE fa.`nodeState` != '终止'
) f ON f.`busSid` = d.`sid`
WHERE d.`auditState` = 3
GROUP BY d.`sid`
) df1 ON df1.receivablesSid = fun1.`sid`
WHERE fun.contractNo = #{contractNo}
AND (fun1.receivablesName = '首付款及费用' OR fun1.receivablesName = '车款')
and (fun.receivablesName = '订金')
GROUP BY fun.sid,
fun1.sid
HAVING dblance &lt;= 0
AND dblance1 &lt;= 0) d
group by d.busVinSid
</select>
<select id="selectByCreateBySidOne" resultType="java.lang.String">
select fun.busVinSid
from fin_uncollected_receivables_detailed fun
left join fin_uncollected_receivables_detailed fun1 on fun.busVinSid = fun1.busVinSid
where fun.createBySid = #{userSid}
and (fun.currentReceivableMoney &lt; 0 or fun.currentReceivableMoney = 0)
and fun.receivablesName = '订金'
and (fun1.currentReceivableMoney &lt; 0 or fun1.currentReceivableMoney = 0)
and (fun1.receivablesName = '首付款及费用' or fun1.receivablesName = '车款')
select d.busVinSid
from (SELECT fun.busVinSid,
(
fun.`reveivableMoney` - COALESCE(SUM(df.dbalance), 0)) AS dblance,
(
fun1.`reveivableMoney` - COALESCE(SUM(df1.dbalance), 0)) AS dblance1
FROM fin_uncollected_receivables_detailed fun
LEFT JOIN (
SELECT d.sid,
d.`receivablesSid`,
(
d.`subscriptionMoney` - COALESCE(SUM(f.`thisUseMoney`), 0)) AS dbalance
FROM fin_selected_receivables_detailed d
LEFT JOIN (
SELECT f.busSid,
f.thisUseMoney
FROM fin_funds_carried_forward_veh f
JOIN `fin_funds_carried_forward_apply` fa ON f.mainSid = fa.sid
WHERE fa.`nodeState` != '终止'
) f ON f.`busSid` = d.`sid`
WHERE d.`auditState` = 3
GROUP BY d.`sid`
) df ON df.receivablesSid = fun.`sid`
LEFT JOIN fin_uncollected_receivables_detailed fun1 ON fun1.busVinSid = fun.busVinSid
LEFT JOIN (
SELECT d.sid,
d.`receivablesSid`,
(
d.`subscriptionMoney` - COALESCE(SUM(f.`thisUseMoney`), 0)) AS dbalance
FROM fin_selected_receivables_detailed d
LEFT JOIN (
SELECT f.busSid,
f.thisUseMoney
FROM fin_funds_carried_forward_veh f
JOIN `fin_funds_carried_forward_apply` fa ON f.mainSid = fa.sid
WHERE fa.`nodeState` != '终止'
) f ON f.`busSid` = d.`sid`
WHERE d.`auditState` = 3
GROUP BY d.`sid`
) df1 ON df1.receivablesSid = fun1.`sid`
WHERE fun.createBySid = #{userSid}
AND (fun1.receivablesName = '首付款及费用' OR fun1.receivablesName = '车款')
and (fun.receivablesName = '订金')
GROUP BY fun.sid,
fun1.sid
HAVING dblance &lt;= 0
AND dblance1 &lt;= 0) d
group by d.busVinSid
</select>
<select id="selectSidBybusVinSidAndConNo" resultType="java.lang.String">
SELECT sid

5
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java

@ -31,4 +31,9 @@ public interface FlowFeign {
@PostMapping(value = "/handleProsess")
@ResponseBody
ResultBean<UpdateFlowFieldVo> handleProsess(@RequestBody BusinessVariables bv);
@ApiOperation(value = "撤回流程")
@PostMapping(value = "/revokeProcess")
@ResponseBody
ResultBean<UpdateFlowFieldVo> revokeProcess(@RequestBody com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl);
}

12
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java

@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo;
import com.yxt.anrui.flowable.api.flow2.FlowFeign;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskVo;
import com.yxt.anrui.flowable.biz.process.ProcessService;
import com.yxt.anrui.flowable.feign.MessageFeign;
import com.yxt.anrui.flowable.feign.form.MessageFlowVo;
@ -102,5 +103,16 @@ public class FlowRest implements FlowFeign {
return updateFlowFieldVoResultBean;
}
@Override
public ResultBean<UpdateFlowFieldVo> revokeProcess(FlowTaskVo fl) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
//获取表单中的参数
Map<String, Object> formVariables = fl.getValues();
formVariables = formVariables == null ? new HashMap<>() : formVariables;
formVariables.put("businessSid", fl.getBusinessSid());
ResultBean<UpdateFlowFieldVo> updateFlowFieldVoResultBean = flowService.revokeProcess(fl);
return null;
}
}

228
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java

@ -1,6 +1,7 @@
package com.yxt.anrui.flowable.biz.flow2;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@ -8,18 +9,22 @@ import com.yxt.anrui.flowable.api.flow.Flowable;
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo;
import com.yxt.anrui.flowable.api.flowcomment.FlowComment;
import com.yxt.anrui.flowable.api.flowtask.FlowTask;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskVo;
import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo;
import com.yxt.anrui.flowable.api.processcomment.ProcessCommentDto;
import com.yxt.anrui.flowable.api.utils.ProcDefEnum;
import com.yxt.anrui.flowable.biz.flowtask.FlowTaskMapper;
import com.yxt.anrui.flowable.biz.flowtask.FlowTaskService;
import com.yxt.anrui.flowable.biz.process.ExpressionCmd;
import com.yxt.anrui.flowable.biz.process.ProcessService;
import com.yxt.anrui.flowable.biz.processcomment.ProcessCommentService;
import com.yxt.anrui.flowable.common.ProcessConstants;
import com.yxt.anrui.flowable.exception.CustomException;
import com.yxt.anrui.flowable.feign.MessageFeign;
import com.yxt.anrui.flowable.feign.form.MessageFlowVo;
import com.yxt.anrui.flowable.feign.form.MessageFlowableQuery;
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
import com.yxt.anrui.flowable.utils.FlowableUtils;
import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigFeign;
import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigQuery;
import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigVvo;
@ -31,9 +36,15 @@ import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.result.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
import org.flowable.common.engine.api.FlowableException;
import org.flowable.common.engine.api.FlowableObjectNotFoundException;
import org.flowable.engine.*;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task;
@ -85,6 +96,8 @@ public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
private MessageFeign messageFeign;
@Autowired
private SysFlowccFeign sysFlowccFeign;
@Autowired
private FlowTaskMapper flowTaskMapper;
public ResultBean<String> getNextNodeUser(BusinessVariables bv) {
ResultBean<String> rb = ResultBean.fireFail();
@ -121,6 +134,11 @@ public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
}
/**
* 根据业务参数取流程流转的环节 信息
* @param bv
* @return
*/
public ResultBean getProcessCirculationNodesByMap(BusinessVariables bv) {
ResultBean<List<Map<String, Object>>> rb = new ResultBean<List<Map<String, Object>>>();
String modelId = bv.getModelId();
@ -255,6 +273,11 @@ public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
return managementService.executeCommand(new ExpressionCmd(runtimeService, processEngineConfiguration, null, exp, variableMap));
}
/**
* 启动流程
* @param bv
* @return
*/
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
@ -402,6 +425,12 @@ public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
return nextNodeUserSids;
}
/**
* 办理
* @param bv
* @param b
* @return
*/
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
@ -716,4 +745,203 @@ public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
}
return rb.success().setMsg("抄送" + userName.toString() + "成功!");
}
public ResultBean<UpdateFlowFieldVo> revokeProcess(FlowTaskVo flowTaskVo) {
ResultBean<UpdateFlowFieldVo> rb =ResultBean.fireFail();
String userSid = flowTaskVo.getUserSid();
//获取当前环节信息
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().taskId(flowTaskVo.getTaskId()).singleResult();
Execution execution = runtimeService.createExecutionQuery().executionId(historicTaskInstance.getExecutionId()).singleResult();
DelegateExecution delegateExecution = (DelegateExecution) execution;
if (delegateExecution == null) {
return rb.setMsg("流程已办结或终止,不能撤回");
}
// 获取当前节点的activityId,即xml中每个标签的ID
String currentActivityId = delegateExecution.getCurrentActivityId();
String taskId = getTaskId(currentActivityId, historicTaskInstance.getProcessInstanceId(), historicTaskInstance.getProcessDefinitionId());
if (StringUtils.isBlank(taskId)) {
return rb.setMsg("流程找不到上一环节,撤回操作失败!");
}
//获取上一环节操作信息
HistoricTaskInstance historicTaskInstance1 = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();
//上一环节操作人
String assignee = historicTaskInstance1.getAssignee();
return null;
}
private String getTaskId(String currentActivityId, String processInstanceId, String processDefinitionId) {
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(currentActivityId);
List<SequenceFlow> list=flowNode.getIncomingFlows();
if(list.size()==0){
return "";
}
List<HistoricActivityInstance> list1=new ArrayList<>();
for( SequenceFlow sequenceFlow:list){
String sourceRef = sequenceFlow.getSourceRef();
list1= historyService.createHistoricActivityInstanceQuery().activityId(sourceRef)
.processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().desc().list();
if(list1.size()>0){
break;
}
}
// 获取上一个节点的activityId
HistoricActivityInstance historicActivityInstance = list1.get(0);
String activityType = historicActivityInstance.getActivityType();
String historicActivityInstanceActivityId = historicActivityInstance.getActivityId();
if (!"userTask".equals(activityType)) {
return getTaskId(historicActivityInstanceActivityId, processInstanceId, processDefinitionId);
}
return historicActivityInstance.getTaskId();
}
private ResultBean<List<LatestTaskVo>> revokeProcess_( String processInstanceId,
String assignee ) {
// 流程回退到上一个节点,审批人继续审批
// 获取流程定义信息
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
ProcessDefinition processDefinition = repositoryService
.createProcessDefinitionQuery()
.processDefinitionId(task.getProcessDefinitionId()).singleResult();
// 获取所有节点信息
Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0);
// 获取全部节点列表,包含子节点
Collection<FlowElement> allElements =
FlowableUtils.getAllElements(process.getFlowElements(), null);
// 获取当前任务节点元素
FlowElement source = null;
if (allElements != null) {
for (FlowElement flowElement : allElements) {
//类型为用户节点
if (flowElement.getId().equals(task.getTaskDefinitionKey())) {
//获取节点信息
source = flowElement;
}
}
}
// 目的获取所有跳转到的节点 targetIds
// 获取当前节点的所有父级用户任务节点
// 深度优先算法思想:延边迭代深入
//申请人申请后,销售经理审批同意,随后销售经理再撤回,申请人再撤回。 申请人->网关->销售经理->销售支持部经理
List<UserTask> parentUserTaskList = FlowableUtils.iteratorFindParentUserTasks(source, null, null);
if (parentUserTaskList == null || parentUserTaskList.size() == 0) {
// throw new CustomException("当前节点为");
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("当前节点为").setData(new ArrayList<>());
}
// 如果流程已经结束,则得到结束节点
if (historyService.createHistoricProcessInstanceQuery().finished()
.processInstanceId(processInstanceId).count() > 0) {
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("当前已经结束不能撤回").setData(new ArrayList<>());
}
// 获取活动 ID 即节点 Key
List<String> parentUserTaskKeyList = new ArrayList<>();
parentUserTaskList.forEach(item -> parentUserTaskKeyList.add(item.getId()));
// 获取全部历史节点活动实例,即已经走过的节点历史,数据采用开始时间升序
List<HistoricTaskInstance> historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId)
.orderByHistoricTaskInstanceStartTime().asc().list();
HistoricTaskInstance historicTaskInstance = historicTaskInstanceList.get(historicTaskInstanceList.size() - 1);
Map<String, Object> actHiVarinstForOrgPath = flowTaskMapper.getActHiVarinstForOrgPath(historicTaskInstance.getId());
String orgPath = MapUtil.getStr(actHiVarinstForOrgPath,"TEXT_");
// 数据清洗,将回滚导致的脏数据清洗掉
List<String> lastHistoricTaskInstanceList = FlowableUtils.historicTaskInstanceClean(allElements, historicTaskInstanceList);
// 此时历史任务实例为倒序,获取最后走的节点
List<String> targetIds = new ArrayList<>();
int number = 0;
StringBuilder parentHistoricTaskKey = new StringBuilder();
for (String historicTaskInstanceKey : lastHistoricTaskInstanceList) {
// 当会签时候会出现特殊的,连续都是同一个节点历史数据的情况,这种时候跳过
if (parentHistoricTaskKey.toString().equals(historicTaskInstanceKey)) {
continue;
}
parentHistoricTaskKey = new StringBuilder(historicTaskInstanceKey);
if (historicTaskInstanceKey.equals(task.getTaskDefinitionKey())) {
number++;
}
// 在数据清洗后,历史节点就是唯一一条从起始到当前节点的历史记录,理论上每个点只会出现一次
// 在流程中如果出现循环,那么每次循环中间的点也只会出现一次,再出现就是下次循环
// number == 1,第一次遇到当前节点
// number == 2,第二次遇到,代表最后一次的循环范围
if (number == 2) {
break;
}
// 如果当前历史节点,属于父级的节点,说明最后一次经过了这个点,需要退回这个点
if (parentUserTaskKeyList.contains(historicTaskInstanceKey)) {
targetIds.add(historicTaskInstanceKey);
}
}
// 目的获取所有需要被跳转的节点 currentIds
// 取其中一个父级任务,因为后续要么存在公共网关,要么就是串行公共线路
UserTask oneUserTask = parentUserTaskList.get(0);
// 获取所有正常进行的任务节点 Key,这些任务不能直接使用,需要找出其中需要撤回的任务
List<Task> runTaskList = taskService.createTaskQuery()
.processInstanceId(processInstanceId).list();
List<String> runTaskKeyList = new ArrayList<>();
runTaskList.forEach(item -> runTaskKeyList.add(item.getTaskDefinitionKey()));
// 需驳回任务列表
List<String> currentIds = new ArrayList<>();
// 通过父级网关的出口连线,结合 runTaskList 比对,获取需要撤回的任务
List<UserTask> currentUserTaskList = FlowableUtils.iteratorFindChildUserTasks(oneUserTask, runTaskKeyList, null, null);
currentUserTaskList.forEach(item -> currentIds.add(item.getId()));
// 规定:并行网关之前节点必须需存在唯一用户任务节点,
// 如果出现多个任务节点,则并行网关节点默认为结束节点,原因为不考虑多对多情况
if (targetIds.size() > 1 && currentIds.size() > 1) {
return new ResultBean<List<LatestTaskVo>>().fail().setMsg("任务出现多对多情况,无法撤回").setData(new ArrayList<>());
}
// 循环获取那些需要被撤回的节点的ID,用来设置驳回原因
List<String> currentTaskIds = new ArrayList<>();
currentIds.forEach(currentId -> runTaskList.forEach(runTask -> {
if (currentId.equals(runTask.getTaskDefinitionKey())) {
currentTaskIds.add(runTask.getId());
}
}));
// 设置撤回意见
currentTaskIds.forEach(item -> {
taskService.addComment(item, processInstanceId,FlowComment.RECALL.getType(), "撤回办理");
// 设置实际办理人
taskService.setAssignee(item, assignee);
});
// 最近环节
List<LatestTaskVo> latestTaskList = new ArrayList<>();
try {
// 如果父级任务多于 1 个,说明当前节点不是并行节点,原因为不考虑多对多情况
if (targetIds.size() > 1) {
// 1 对 多任务跳转,currentIds 当前节点(1),targetIds 跳转到的节点(多)
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(processInstanceId).
moveSingleActivityIdToActivityIds(currentIds.get(0), targetIds).changeState();
}
// 如果父级任务只有一个,因此当前任务可能为网关中的任务
if (targetIds.size() == 1) {
// 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetIds.get(0) 跳转到的节点(1)
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(processInstanceId)
.moveActivityIdsToSingleActivityId(currentIds, targetIds.get(0)).changeState();
}
// 最近环节
parentUserTaskList.forEach(item -> {
LatestTaskVo latestTaskVo = new LatestTaskVo();
latestTaskVo.setASSIGNEE_(item.getAssignee());
latestTaskVo.setName_(item.getName());
latestTaskVo.setTask_def_key_(item.getId());
latestTaskVo.setIncomingSourceRef(item.getIncomingFlows().get(0).getSourceRef());
latestTaskVo.setOrgPath(orgPath);
Map<String, Object> task_map = flowTaskMapper.getTaskByDefKey(processInstanceId, item.getId());
if(task_map!=null){
taskService.setAssignee(task_map.get("id_").toString(), assignee);
latestTaskVo.setId_(task_map.get("id_").toString());
latestTaskList.add(latestTaskVo);
}
});
} catch (FlowableObjectNotFoundException e) {
throw new CustomException("未找到流程实例,流程可能已发生变化");
} catch (FlowableException e) {
throw new CustomException("无法取消或开始活动");
}
return new ResultBean<List<LatestTaskVo>>().success().setData(latestTaskList);
}
}

Loading…
Cancel
Save