Browse Source

Merge remote-tracking branch 'origin/master'

zhanglei
God 2 years ago
parent
commit
d2f0a26b4d
  1. 12
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/FinSelectVo.java
  2. 274
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyService.java
  3. 137
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java
  4. 2
      anrui-crm/anrui-crm-api/src/main/java/com/yxt/anrui/crm/api/crmcustomertemp/AppCrmCustomerTempQuery.java
  5. 3
      anrui-crm/anrui-crm-biz/src/main/java/com/yxt/anrui/crm/biz/crmcustomertemp/CrmCustomerTempService.java
  6. 2
      anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveInvoiceVo.java
  7. 14
      anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveSeleteVo.java
  8. 29
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml
  9. 34
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeign.java
  10. 9
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java
  11. 2
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java
  12. 15
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java
  13. 14
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java
  14. 4
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml
  15. 104
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowRest.java
  16. 719
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java
  17. 2
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java
  18. 4
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml
  19. 4
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java
  20. 22
      anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单1.docx
  21. 23
      anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单2.docx
  22. 29
      anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单3.docx
  23. 42
      anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单4.docx

12
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/FinSelectVo.java

@ -10,7 +10,7 @@ import lombok.Data;
*/
@Data
public class FinSelectVo {
private String receivablesSid;
@ApiModelProperty("款项名称")
private String receivablesName;
@ -23,4 +23,14 @@ public class FinSelectVo {
private String notSubscriptionMoney;
private String remarks;
@ApiModelProperty("付款时间")
private String subscriptionDate;
@ApiModelProperty("收款开户行")
private String collectionBank;
@ApiModelProperty("收款账户")
private String receivingName;
@ApiModelProperty("付款人")
private String payerName;
@ApiModelProperty("付款时间")
private String collectionDate;
}

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

@ -82,9 +82,14 @@ import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempVo;
import com.yxt.anrui.fin.api.finbillapplication.FinBillApplicationDto;
import com.yxt.anrui.fin.api.finbillapplication.FinBillApplicationFeign;
import com.yxt.anrui.fin.api.finbillvehicle.FinBillVehicleDto;
import com.yxt.anrui.fin.api.fincollectionconfirmation.FinCollectionConfirmationDetailsVo;
import com.yxt.anrui.fin.api.fincollectionconfirmation.FinCollectionConfirmationFeign;
import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingDetailsVo;
import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingFeign;
import com.yxt.anrui.fin.api.finselectedreceivablesdetailed.FinSelectedReceivablesDetailed;
import com.yxt.anrui.fin.api.finselectedreceivablesdetailed.FinSelectedReceivablesDetailedFeign;
import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedFeign;
import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedVo;
import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.ReceiveInvoiceVo;
import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.ReceiveSeleteVo;
import com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoice;
@ -204,6 +209,11 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
private LoanSolutionsFeign loanSolutionsFeign;
@Autowired
private FinVehicleInvoiceFeign finVehicleInvoiceFeign;
@Autowired
private FinSelectedReceivablesDetailedFeign finSelectedReceivablesDetailedFeign;
@Autowired
private FinCollectionConfirmationFeign finCollectionConfirmationFeign;
/**
* 构造出库申请的查询条件
@ -258,13 +268,13 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
qw.eq("bd.paymentMethodKey", query.getPaymentMethodKey());
}
//========================================数据授权开始
if(StringUtils.isNotBlank(query.getMenuUrl())){
if (StringUtils.isNotBlank(query.getMenuUrl())) {
PrivilegeQuery privilegeQuery = new PrivilegeQuery();
privilegeQuery.setOrgPath(query.getOrgPath());
privilegeQuery.setMenuUrl(query.getMenuUrl());
privilegeQuery.setUserSid(query.getApplySid());
ResultBean<String> defaultIdReltBean = sysUserFeign.selectPrivilegeLevel(privilegeQuery);
if(StringUtils.isNotBlank(defaultIdReltBean.getData())){
if (StringUtils.isNotBlank(defaultIdReltBean.getData())) {
//数据权限ID(1集团、2事业部、3分公司、4部门、5个人)
String orgSidPath = query.getOrgPath();
orgSidPath = orgSidPath + "/";
@ -285,17 +295,17 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
} else if ("4".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i4);
qw.like("bd.orgSidPath", orgSidPath);
} else if("5".equals(orgLevelKey)){
qw.eq("bd.createBySid",query.getApplySid());
}else{
} else if ("5".equals(orgLevelKey)) {
qw.eq("bd.createBySid", query.getApplySid());
} else {
PagerVo<BusDeliveredApplyVo> p = new PagerVo<>();
return p;
}
}else{
} else {
PagerVo<BusDeliveredApplyVo> p = new PagerVo<>();
return p;
}
}else{
} else {
qw.eq("bd.applySid", query.getApplySid());
}
}
@ -303,9 +313,9 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
IPage<BusDeliveredApplyVo> pagging = baseMapper.selectPageVo(page, qw);
List<BusDeliveredApplyVo> records = pagging.getRecords();
for (BusDeliveredApplyVo record : records) {
if(query.getApplySid().equals(record.getCreateBySid())){
if (query.getApplySid().equals(record.getCreateBySid())) {
record.setAllowModify(true);
}else{
} else {
record.setAllowModify(false);
}
}
@ -726,7 +736,7 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
ResultBean rb = ResultBean.fireFail();
BusDeliveredApply busDeliveredApply = fetchBySid(bv.getBusinessSid());
bv.setOrgSidPath(busDeliveredApply.getOrgSidPath());
Map<String,Object> variables = new HashMap<>();
Map<String, Object> variables = new HashMap<>();
//若app移动端有此功能,则传递appMap参数
Map<String, Object> appMap = new HashMap<>();
//需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。
@ -736,24 +746,24 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
variables.put("app", appMap);
// variables.put("isDanBao","2".equals(busDeliveredApply.getPaymentMethodKey()));
//根据合同号查询销售订单
if(!"2".equals(busDeliveredApply.getPaymentMethodKey())){
if (!"2".equals(busDeliveredApply.getPaymentMethodKey())) {
BusSalesOrder busSalesOrder = busSalesOrderService.selectByContractNos(busDeliveredApply.getContractNo());
if("2".equals(busSalesOrder.getFinancePlan())){
if ("2".equals(busSalesOrder.getFinancePlan())) {
//查询是否是自营非担保
ResultBean<SolutionsDetailsVo> detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid());
if(detailsVoResultBean.getData() != null){
if("01".equals(detailsVoResultBean.getData().getTypeKey())){
if (detailsVoResultBean.getData() != null) {
if ("01".equals(detailsVoResultBean.getData().getTypeKey())) {
//自营非担保
variables.put("isDanBao",true);
}else{
variables.put("isDanBao",false);
variables.put("isDanBao", true);
} else {
variables.put("isDanBao", false);
}
}
}else{
variables.put("isDanBao",false);
} else {
variables.put("isDanBao", false);
}
}else{
variables.put("isDanBao",true);
} else {
variables.put("isDanBao", true);
}
FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery();
flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId());
@ -815,12 +825,12 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
for (BusDeliveredApplyDetails busDeliveredApplyDetail : busDeliveredApplyDetails) {
String vinSid = busDeliveredApplyDetail.getVinSid();
FinVehicleInvoice finVehicleInvoice = finVehicleInvoiceFeign.selectByVinAndContractNo(vinSid, busDeliveredApply.getContractNo()).getData();
if(finVehicleInvoice != null){
if (StringUtils.isNotBlank(finVehicleInvoice.getSid())){
if (finVehicleInvoice != null) {
if (StringUtils.isNotBlank(finVehicleInvoice.getSid())) {
finVehicleInvoiceFeign.updateBySid(finVehicleInvoice.getSid());
}
}
}
} else {
if ("重新提交".equals(bv.getComment())) {
@ -888,8 +898,8 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
appBusHandoverPrepareVehicleDto.setVinNo(details.getVinNo());
appBusHandoverPrepareVehicleDto.setVinSid(details.getVinSid());
//根据合同编号和车辆sid查询
BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleService.selectByNoAndVinSid(busDeliveredApply.getContractNo(),details.getVinSid());
BusDelivered busDelivered = busDeliveredService.getState(busDeliveredApply.getContractNo(),busSalesOrderVehicle.getSid());
BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleService.selectByNoAndVinSid(busDeliveredApply.getContractNo(), details.getVinSid());
BusDelivered busDelivered = busDeliveredService.getState(busDeliveredApply.getContractNo(), busSalesOrderVehicle.getSid());
appBusHandoverPrepareVehicleDto.setSubscription(busDelivered.getSubscription());
appBusHandoverPrepareVehicleDto.setSubscriptionKey(busDelivered.getSubscriptionKey());
dtos.add(appBusHandoverPrepareVehicleDto);
@ -1196,10 +1206,10 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
ResultBean<List<GetNodeVo>> rb = new ResultBean<>();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
if(StringUtils.isNotBlank(query.getBusinessSid())){
if (StringUtils.isNotBlank(query.getBusinessSid())) {
BusDeliveredApply busDeliveredApply = fetchBySid(query.getBusinessSid());
bv.setModelId(busDeliveredApply.getProcDefId());
Map<String,Object> variables = new HashMap<>();
Map<String, Object> variables = new HashMap<>();
//若app移动端有此功能,则传递appMap参数
Map<String, Object> appMap = new HashMap<>();
//需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。
@ -1208,25 +1218,25 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
appMap.put("contract_id", busDeliveredApply.getContractNo());
variables.put("app", appMap);
// variables.put("isDanBao","2".equals(busDeliveredApply.getPaymentMethodKey()));
//根据合同号查询销售订单
if(!"2".equals(busDeliveredApply.getPaymentMethodKey())){
//根据合同号查询销售订单
if (!"2".equals(busDeliveredApply.getPaymentMethodKey())) {
BusSalesOrder busSalesOrder = busSalesOrderService.selectByContractNos(busDeliveredApply.getContractNo());
if("2".equals(busSalesOrder.getFinancePlan())){
if ("2".equals(busSalesOrder.getFinancePlan())) {
//查询是否是自营非担保
ResultBean<SolutionsDetailsVo> detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid());
if(detailsVoResultBean.getData() != null){
if("01".equals(detailsVoResultBean.getData().getTypeKey())){
if (detailsVoResultBean.getData() != null) {
if ("01".equals(detailsVoResultBean.getData().getTypeKey())) {
//自营非担保
variables.put("isDanBao",true);
}else{
variables.put("isDanBao",false);
variables.put("isDanBao", true);
} else {
variables.put("isDanBao", false);
}
}
}else{
variables.put("isDanBao",false);
} else {
variables.put("isDanBao", false);
}
}else{
variables.put("isDanBao",true);
} else {
variables.put("isDanBao", true);
}
FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery();
flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId());
@ -1234,7 +1244,7 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
flowProcessMapQuery.setContractNo(busDeliveredApply.getContractNo());
variables = flowableFeign.getMap(flowProcessMapQuery).getData();
bv.setFormVariables(variables);
}else{
} else {
bv.setModelId(ProcDefEnum.BUSDELIVEREDAPPLY.getProDefId());
}
@ -1254,10 +1264,10 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
ResultBean<List<GetNodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
if(StringUtils.isNotBlank(query.getBusinessSid())){
if (StringUtils.isNotBlank(query.getBusinessSid())) {
BusDeliveredApply busDeliveredApply = fetchBySid(query.getBusinessSid());
bv.setModelId(busDeliveredApply.getProcDefId());
Map<String,Object> variables = new HashMap<>();
Map<String, Object> variables = new HashMap<>();
//若app移动端有此功能,则传递appMap参数
Map<String, Object> appMap = new HashMap<>();
//需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。
@ -1266,25 +1276,25 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
appMap.put("contract_id", busDeliveredApply.getContractNo());
variables.put("app", appMap);
// variables.put("isDanBao","2".equals(busDeliveredApply.getPaymentMethodKey()));
//根据合同号查询销售订单
if(!"2".equals(busDeliveredApply.getPaymentMethodKey())){
//根据合同号查询销售订单
if (!"2".equals(busDeliveredApply.getPaymentMethodKey())) {
BusSalesOrder busSalesOrder = busSalesOrderService.selectByContractNos(busDeliveredApply.getContractNo());
if("2".equals(busSalesOrder.getFinancePlan())){
if ("2".equals(busSalesOrder.getFinancePlan())) {
//查询是否是自营非担保
ResultBean<SolutionsDetailsVo> detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid());
if(detailsVoResultBean.getData() != null){
if("01".equals(detailsVoResultBean.getData().getTypeKey())){
if (detailsVoResultBean.getData() != null) {
if ("01".equals(detailsVoResultBean.getData().getTypeKey())) {
//自营非担保
variables.put("isDanBao",true);
}else{
variables.put("isDanBao",false);
variables.put("isDanBao", true);
} else {
variables.put("isDanBao", false);
}
}
}else{
variables.put("isDanBao",false);
} else {
variables.put("isDanBao", false);
}
}else{
variables.put("isDanBao",true);
} else {
variables.put("isDanBao", true);
}
FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery();
flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId());
@ -1292,7 +1302,7 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
flowProcessMapQuery.setContractNo(busDeliveredApply.getContractNo());
variables = flowableFeign.getMap(flowProcessMapQuery).getData();
bv.setFormVariables(variables);
}else{
} else {
bv.setModelId(ProcDefEnum.BUSDELIVEREDAPPLY.getProDefId());
}
ResultBean<List<Map<String, Object>>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv);
@ -1327,25 +1337,25 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
appMap.put("contract_id", busDeliveredApply.getContractNo());
variables.put("app", appMap);
// variables.put("isDanBao","2".equals(busDeliveredApply.getPaymentMethodKey()));
//根据合同号查询销售订单
if(!"2".equals(busDeliveredApply.getPaymentMethodKey())){
//根据合同号查询销售订单
if (!"2".equals(busDeliveredApply.getPaymentMethodKey())) {
BusSalesOrder busSalesOrder = busSalesOrderService.selectByContractNos(busDeliveredApply.getContractNo());
if("2".equals(busSalesOrder.getFinancePlan())){
if ("2".equals(busSalesOrder.getFinancePlan())) {
//查询是否是自营非担保
ResultBean<SolutionsDetailsVo> detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid());
if(detailsVoResultBean.getData() != null){
if("01".equals(detailsVoResultBean.getData().getTypeKey())){
if (detailsVoResultBean.getData() != null) {
if ("01".equals(detailsVoResultBean.getData().getTypeKey())) {
//自营非担保
variables.put("isDanBao",true);
}else{
variables.put("isDanBao",false);
variables.put("isDanBao", true);
} else {
variables.put("isDanBao", false);
}
}
}else{
variables.put("isDanBao",false);
} else {
variables.put("isDanBao", false);
}
}else{
variables.put("isDanBao",true);
} else {
variables.put("isDanBao", true);
}
FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery();
flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId());
@ -1428,25 +1438,25 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
appMap.put("contract_id", busDeliveredApply.getContractNo());
variables.put("app", appMap);
// variables.put("isDanBao","2".equals(busDeliveredApply.getPaymentMethodKey()));
//根据合同号查询销售订单
if(!"2".equals(busDeliveredApply.getPaymentMethodKey())){
//根据合同号查询销售订单
if (!"2".equals(busDeliveredApply.getPaymentMethodKey())) {
BusSalesOrder busSalesOrder = busSalesOrderService.selectByContractNos(busDeliveredApply.getContractNo());
if("2".equals(busSalesOrder.getFinancePlan())){
if ("2".equals(busSalesOrder.getFinancePlan())) {
//查询是否是自营非担保
ResultBean<SolutionsDetailsVo> detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid());
if(detailsVoResultBean.getData() != null){
if("01".equals(detailsVoResultBean.getData().getTypeKey())){
if (detailsVoResultBean.getData() != null) {
if ("01".equals(detailsVoResultBean.getData().getTypeKey())) {
//自营非担保
variables.put("isDanBao",true);
}else{
variables.put("isDanBao",false);
variables.put("isDanBao", true);
} else {
variables.put("isDanBao", false);
}
}
}else{
variables.put("isDanBao",false);
} else {
variables.put("isDanBao", false);
}
}else{
variables.put("isDanBao",true);
} else {
variables.put("isDanBao", true);
}
FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery();
flowProcessMapQuery.setProDefKey(busDeliveredApply.getProcDefId());
@ -1495,7 +1505,7 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
BusDeliveredApply busDeliveredApply = fetchBySid(query.getBusinessSid());
String businessTaskId = busDeliveredApply.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if(query.getUserSid().equals(busDeliveredApply.getCreateBySid())){
if (query.getUserSid().equals(busDeliveredApply.getCreateBySid())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.breakProcess(flowTaskVo);
@ -1508,7 +1518,7 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
//更新该合同的该车架号的状态为1
busDeliveredService.updateStateByContractNo(busDeliveredApply.getContractNo(), vinSidList, 1);
return rb.success().setData(resultBean.getData());
}else{
} else {
if (businessTaskId.equals(query.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
@ -1540,14 +1550,14 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
QueryWrapper<AppDeliveredApplyPageQuery> qw = new QueryWrapper<>();
String orgPath = pagerQuery.getParams().getOrgPath();
//========================================数据授权开始
if(StringUtils.isNotBlank(query.getMenuSid())){
if (StringUtils.isNotBlank(query.getMenuSid())) {
//=======================
PrivilegeQuery privilegeQuery = new PrivilegeQuery();
privilegeQuery.setOrgPath(query.getOrgPath());
privilegeQuery.setMenuSid(query.getMenuSid());
privilegeQuery.setUserSid(query.getUserSid());
ResultBean<String> defaultIdReltBean = sysUserFeign.selectPrivilegeLevel(privilegeQuery);
if(StringUtils.isNotBlank(defaultIdReltBean.getData())){
if (StringUtils.isNotBlank(defaultIdReltBean.getData())) {
//数据权限ID(1集团、2事业部、3分公司、4部门、5个人)
String orgSidPath = query.getOrgPath();
orgSidPath = orgSidPath + "/";
@ -1568,17 +1578,17 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
} else if ("4".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i4);
qw.like("bd.orgSidPath", orgSidPath);
} else if("5".equals(orgLevelKey)){
qw.eq("bd.createBySid",query.getUserSid());
}else{
} else if ("5".equals(orgLevelKey)) {
qw.eq("bd.createBySid", query.getUserSid());
} else {
PagerVo<AppDeliveredApplyPageVo> p = new PagerVo<>();
return p;
}
}else{
} else {
PagerVo<AppDeliveredApplyPageVo> p = new PagerVo<>();
return p;
}
}else{
} else {
String orgSid = "";
if (StringUtils.isNotBlank(orgPath)) {
orgSid = sysStaffOrgFeign.getOrgSidByPath(orgPath).getData();
@ -1592,16 +1602,16 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
IPage<AppDeliveredApplyPageVo> iPage = baseMapper.getRetrievalApplyList(page, qw, pagerQuery.getParams().getName());
List<AppDeliveredApplyPageVo> records = iPage.getRecords();
records.removeAll(Collections.singleton(null));
if(!records.isEmpty()){
for (AppDeliveredApplyPageVo appDeliveredApplyPageVo : records){
if(query.getUserSid().equals(appDeliveredApplyPageVo.getCreateBySid()) && appDeliveredApplyPageVo.isShowDelete()){
if (!records.isEmpty()) {
for (AppDeliveredApplyPageVo appDeliveredApplyPageVo : records) {
if (query.getUserSid().equals(appDeliveredApplyPageVo.getCreateBySid()) && appDeliveredApplyPageVo.isShowDelete()) {
appDeliveredApplyPageVo.setShowDelete(true);
}else{
} else {
appDeliveredApplyPageVo.setShowDelete(false);
}
if(query.getUserSid().equals(appDeliveredApplyPageVo.getCreateBySid()) && appDeliveredApplyPageVo.isShowUpdata()){
if (query.getUserSid().equals(appDeliveredApplyPageVo.getCreateBySid()) && appDeliveredApplyPageVo.isShowUpdata()) {
appDeliveredApplyPageVo.setShowUpdata(true);
}else{
} else {
appDeliveredApplyPageVo.setShowUpdata(false);
}
}
@ -1739,10 +1749,10 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
busDeliveredDetailsDiscountService.insert(busDeliveredDetailsDiscount);
discountAll = discountAll.add(new BigDecimal(busDeliveredDetailsDiscount.getPrice()).multiply(new BigDecimal(busDeliveredDetailsDiscount.getGiveNum())));
if (j == 0 || j == discountUse.size() - 1) {
String disInfo = busDeliveredDetailsDiscountsVo.getDiscountName()+busDeliveredDetailsDiscountsVo.getDiscountInfo() + "X" + busDeliveredDetailsDiscount.getGiveNum();
String disInfo = busDeliveredDetailsDiscountsVo.getDiscountName() + busDeliveredDetailsDiscountsVo.getDiscountInfo() + "X" + busDeliveredDetailsDiscount.getGiveNum();
discountRemarks = discountRemarks.append(disInfo).append(",");
} else {
String disInfo = busDeliveredDetailsDiscountsVo.getDiscountName()+busDeliveredDetailsDiscountsVo.getDiscountInfo() + "X" + busDeliveredDetailsDiscount.getGiveNum();
String disInfo = busDeliveredDetailsDiscountsVo.getDiscountName() + busDeliveredDetailsDiscountsVo.getDiscountInfo() + "X" + busDeliveredDetailsDiscount.getGiveNum();
discountRemarks = discountRemarks.append(disInfo);
}
}
@ -1885,10 +1895,10 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
busDeliveredDetailsDiscountService.insert(busDeliveredDetailsDiscount);
discountAll = discountAll.add(new BigDecimal(busDeliveredDetailsDiscount.getPrice()).multiply(new BigDecimal(busDeliveredDetailsDiscount.getGiveNum())));
if (j == 0 || j == discountUse.size() - 1) {
String disInfo = busDeliveredDetailsDiscountsVo.getDiscountName()+busDeliveredDetailsDiscountsVo.getDiscountInfo() + "X" + busDeliveredDetailsDiscount.getGiveNum();
String disInfo = busDeliveredDetailsDiscountsVo.getDiscountName() + busDeliveredDetailsDiscountsVo.getDiscountInfo() + "X" + busDeliveredDetailsDiscount.getGiveNum();
discountRemarks = discountRemarks.append(disInfo).append(",");
} else {
String disInfo = busDeliveredDetailsDiscountsVo.getDiscountName()+busDeliveredDetailsDiscountsVo.getDiscountInfo() + "X" + busDeliveredDetailsDiscount.getGiveNum();
String disInfo = busDeliveredDetailsDiscountsVo.getDiscountName() + busDeliveredDetailsDiscountsVo.getDiscountInfo() + "X" + busDeliveredDetailsDiscount.getGiveNum();
discountRemarks = discountRemarks.append(disInfo);
}
}
@ -2083,18 +2093,18 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
//所有车辆与已出库或审批中的车辆集合查询出差集
busSidList.removeAll(applyBusSidList);
//根据合同编号以及车辆sid查询busVinSid
List<String> busVinSidList = baseMapper.selectByContractNoToVinSid(dto.getContractId(),vinSid);
List<String> busVinSidList = baseMapper.selectByContractNoToVinSid(dto.getContractId(), vinSid);
busSidList.removeAll(busVinSidList);
busVinSidList.removeAll(Collections.singleton(null));
if(busVinSidList.isEmpty()){
if (busVinSidList.isEmpty()) {
isTrue = true;
}
//是否是最后一批出库车辆
if(isTrue){
if (isTrue) {
//是否存在未赠送的套餐,如果存在则不允许提交
int num = baseMapper.selectNumByContractNo(dto.getContractId());
int orderNum = busSalesOrderDiscountService.selectByContractNo(dto.getContractId());
if(orderNum>num){
if (orderNum > num) {
return rb.setMsg("本次出库为该订单最后一批出库,还存在未赠送的套餐,不允许提交");
}
}
@ -2142,26 +2152,26 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
appMap.put("contract_id", busDeliveredApply.getContractNo());
variables.put("app", appMap);
//根据合同号查询销售订单
if(!"2".equals(busDeliveredApply.getPaymentMethodKey())){
if (!"2".equals(busDeliveredApply.getPaymentMethodKey())) {
BusSalesOrder busSalesOrder = busSalesOrderService.selectByContractNos(busDeliveredApply.getContractNo());
if("2".equals(busSalesOrder.getFinancePlan())){
if ("2".equals(busSalesOrder.getFinancePlan())) {
//查询是否是自营非担保
ResultBean<SolutionsDetailsVo> detailsVoResultBean = loanSolutionsFeign.selectDetailsss(busSalesOrder.getSid());
if(detailsVoResultBean.getData() != null){
if("01".equals(detailsVoResultBean.getData().getTypeKey())){
if (detailsVoResultBean.getData() != null) {
if ("01".equals(detailsVoResultBean.getData().getTypeKey())) {
//自营非担保
variables.put("isDanBao",true);
}else{
variables.put("isDanBao",false);
variables.put("isDanBao", true);
} else {
variables.put("isDanBao", false);
}
}else{
variables.put("isDanBao",false);
} else {
variables.put("isDanBao", false);
}
}else{
variables.put("isDanBao",false);
} else {
variables.put("isDanBao", false);
}
}else{
variables.put("isDanBao",true);
} else {
variables.put("isDanBao", true);
}
FlowProcessMapQuery flowProcessMapQuery = new FlowProcessMapQuery();
@ -2265,7 +2275,37 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
if (receiveInvoiceVoResultBean.getData() != null) {
List<ReceiveSeleteVo> receiveSeleteVoList = receiveInvoiceVoResultBean.getData().getReceiveSeleteVoList();
List<FinSelectVo> voList = Optional.ofNullable(receiveSeleteVoList).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), FinSelectVo.class)).collect(Collectors.toList());
deliveredFinVo.setFinSelectVoList(voList);
voList.removeAll(Collections.singleton(null));
List<FinSelectVo> finSelectVos = new ArrayList<>();
if (!voList.isEmpty()) {
for (FinSelectVo finSelectVo : voList) {
String receivablesSid = finSelectVo.getReceivablesSid();
FinSelectedReceivablesDetailed data = finSelectedReceivablesDetailedFeign.fetchByReceivablesSidLimt(receivablesSid).getData();
if (data != null) {
String collSid = data.getCollSid();
if (StringUtils.isNotBlank(data.getSubscriptionDate())) {
finSelectVo.setSubscriptionDate(data.getSubscriptionDate());
}
FinCollectionConfirmationDetailsVo confirmationDetailsVo = finCollectionConfirmationFeign.fetchBySid(collSid).getData();
if (null != confirmationDetailsVo) {
if (StringUtils.isNotBlank(confirmationDetailsVo.getCollectionBank())) {
finSelectVo.setCollectionBank(confirmationDetailsVo.getCollectionBank());
}
if (StringUtils.isNotBlank(confirmationDetailsVo.getReceivingName())) {
finSelectVo.setReceivingName(confirmationDetailsVo.getReceivingName());
}
if (StringUtils.isNotBlank(confirmationDetailsVo.getPayerName())) {
finSelectVo.setPayerName(confirmationDetailsVo.getPayerName());
}
if (StringUtils.isNotBlank(confirmationDetailsVo.getCollectionDate())) {
finSelectVo.setCollectionDate(confirmationDetailsVo.getCollectionDate());
}
}
}
finSelectVos.add(finSelectVo);
}
}
deliveredFinVo.setFinSelectVoList(finSelectVos);
InvoiceVo invoiceVo = receiveInvoiceVoResultBean.getData().getInvoiceVo();
if (invoiceVo != null) {
VinInvoiceVo vinInvoiceVo = new VinInvoiceVo();

137
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorder/BusSalesOrderService.java

@ -138,6 +138,7 @@ import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.UnCollectionDto;
import com.yxt.anrui.flowable.api.flow.FlowSelectVo;
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.FlowableQuery;
@ -252,6 +253,8 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
@Autowired
private FlowableFeign flowableFeign;
@Autowired
private FlowFeign flowFeign;
@Autowired
private com.yxt.anrui.portal.api.flow.FlowableFeign flowableFeignPro;
@Autowired
private FlowTaskFeign flowTaskFeign;
@ -3471,50 +3474,53 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
}
BusSalesOrderMakeup busSalesOrderMakeup = busSalesOrderMakeupService.detailsss(sid);
String topMessage = "";
//颜色
if (StringUtils.isNotBlank(busSalesOrderMakeup.getColor())) {
topMessage = topMessage + busSalesOrderMakeup.getColor();
}
if (StringUtils.isNotBlank(busSalesOrderMakeup.getTopName())) {
topMessage = topMessage + busSalesOrderMakeup.getTopName();
}
//板材厚度
String ssMessage = "";
if (StringUtils.isNotBlank(busSalesOrderMakeup.getThicknessBottom())) {
ssMessage = "底" + busSalesOrderMakeup.getThicknessBottom() + "mm";
}
if (StringUtils.isNotBlank(busSalesOrderMakeup.getThicknessEdge())) {
ssMessage = ssMessage + "边" + busSalesOrderMakeup.getThicknessEdge() + "mm";
}
if (StringUtils.isNotBlank(ssMessage)) {
topMessage = topMessage + "、" + ssMessage;
}
if (StringUtils.isNotBlank(busSalesOrderMakeup.getPlateMaterial())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getPlateMaterial();
}
//篷布滑道
if (StringUtils.isNotBlank(busSalesOrderMakeup.getTarpaulinSlide()) && !"-".equals(busSalesOrderMakeup.getTarpaulinSlide())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getTarpaulinSlide();
}
//冷藏冷机
if (StringUtils.isNotBlank(busSalesOrderMakeup.getRefirgerator())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getRefirgerator();
if (!busSalesOrderMakeup.getRefirgerator().contains("机")) {
topMessage = topMessage + "冷机";
if(busSalesOrderMakeup != null){
//颜色
if (StringUtils.isNotBlank(busSalesOrderMakeup.getColor())) {
topMessage = topMessage + busSalesOrderMakeup.getColor();
}
if (StringUtils.isNotBlank(busSalesOrderMakeup.getTopName())) {
topMessage = topMessage + busSalesOrderMakeup.getTopName();
}
//板材厚度
String ssMessage = "";
if (StringUtils.isNotBlank(busSalesOrderMakeup.getThicknessBottom())) {
ssMessage = "底" + busSalesOrderMakeup.getThicknessBottom() + "mm";
}
if (StringUtils.isNotBlank(busSalesOrderMakeup.getThicknessEdge())) {
ssMessage = ssMessage + "边" + busSalesOrderMakeup.getThicknessEdge() + "mm";
}
if (StringUtils.isNotBlank(ssMessage)) {
topMessage = topMessage + "、" + ssMessage;
}
if (StringUtils.isNotBlank(busSalesOrderMakeup.getPlateMaterial())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getPlateMaterial();
}
//篷布滑道
if (StringUtils.isNotBlank(busSalesOrderMakeup.getTarpaulinSlide()) && !"-".equals(busSalesOrderMakeup.getTarpaulinSlide())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getTarpaulinSlide();
}
//冷藏冷机
if (StringUtils.isNotBlank(busSalesOrderMakeup.getRefirgerator())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getRefirgerator();
if (!busSalesOrderMakeup.getRefirgerator().contains("机")) {
topMessage = topMessage + "冷机";
}
}
//自卸液压盖板
if (StringUtils.isNotBlank(busSalesOrderMakeup.getSelfUnHyCoPl()) && !"-".equals(busSalesOrderMakeup.getSelfUnHyCoPl())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getSelfUnHyCoPl();
}
//底板加热
if (StringUtils.isNotBlank(busSalesOrderMakeup.getFloorHeating()) && !"-".equals(busSalesOrderMakeup.getFloorHeating())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getFloorHeating();
}
//更多配置
if (StringUtils.isNotBlank(busSalesOrderMakeup.getMoreConfig()) && !"-".equals(busSalesOrderMakeup.getMoreConfig())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getMoreConfig();
}
}
//自卸液压盖板
if (StringUtils.isNotBlank(busSalesOrderMakeup.getSelfUnHyCoPl()) && !"-".equals(busSalesOrderMakeup.getSelfUnHyCoPl())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getSelfUnHyCoPl();
}
//底板加热
if (StringUtils.isNotBlank(busSalesOrderMakeup.getFloorHeating()) && !"-".equals(busSalesOrderMakeup.getFloorHeating())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getFloorHeating();
}
//更多配置
if (StringUtils.isNotBlank(busSalesOrderMakeup.getMoreConfig()) && !"-".equals(busSalesOrderMakeup.getMoreConfig())) {
topMessage = topMessage + "、" + busSalesOrderMakeup.getMoreConfig();
}
vo.setTopMessage(topMessage);
}
/***************************主车优惠***************************************/
@ -4763,7 +4769,7 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
//流程定义id
bv.setModelId(ProcDefEnum.SALESORDER.getProDefId());
if (r == 1) {
ResultBean<UpdateFlowFieldVo> voResultBean = flowableFeign.startProcess(bv);
ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv);
if (!voResultBean.getSuccess()) {
return rb.setMsg(voResultBean.getMsg());
}
@ -4819,7 +4825,7 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
} catch (Exception e) {
e.printStackTrace();
}
//==============================
/* //==============================
//如果创建人与部门主管一样,则自动到下一环节。
if (busSalesOrder.get().getCreateBySid().equals(nextNodeUserSids_)) {
busSalesOrderOne = fetchBySid(businessSid);
@ -4835,7 +4841,7 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
bv.setOrgSidPath(busSalesOrderOne.getOrgSidPath());
bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!");
return complete(bv);
}
}*/
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
@ -5121,28 +5127,39 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper
//流程定义id
bv.setModelId(busSalesOrder.getProcDefId());
if (bv.getTaskId().equals(busSalesOrder.getTaskId())) {
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.handleProsess(bv);
ResultBean<UpdateFlowFieldVo> resultBean = flowFeign.handleProsess(bv);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
UpdateFlowFieldVo ufVo = resultBean.getData();
updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
busSalesOrder = fetchBySid(bv.getBusinessSid());
//极光推送
if (!"Event_end".equals(resultBean.getData().getTaskDefKey())) {
//极光推送
busSalesOrder = fetchBySid(bv.getBusinessSid());
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
ufVo.setProcInsId(busSalesOrder.getProcInstId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap((Map<String, Object>) variables.get("app"));
messageFlowableQuery.setBusinessSid(bv.getBusinessSid());
messageFlowableQuery.setModuleName("销售订单申请");
messageFlowableQuery.setMsgContent(busSalesOrder.getStaffName() + "提交的" + 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());
BusSalesOrder finalBusSalesOrder = busSalesOrder;
Future future1 = pool.submit(() -> {
//极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
ufVo.setProcInsId(finalBusSalesOrder.getProcInstId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap((Map<String, Object>) variables.get("app"));
messageFlowableQuery.setBusinessSid(bv.getBusinessSid());
messageFlowableQuery.setModuleName("销售订单申请");
messageFlowableQuery.setMsgContent(finalBusSalesOrder.getStaffName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle("销售订单");
ResultBean<String> stringResultBean = messageFeign.pushMessage(messageFlowableQuery);
});
} catch (Exception e) {
e.printStackTrace();
}
} else {
ResultBean<AppOrderDetailsVo> details = getSaleOrderDetails(bv.getBusinessSid());
AppOrderDetailsVo vo = details.getData();

2
anrui-crm/anrui-crm-api/src/main/java/com/yxt/anrui/crm/api/crmcustomertemp/AppCrmCustomerTempQuery.java

@ -38,4 +38,6 @@ public class AppCrmCustomerTempQuery implements Query {
// @ApiModelProperty("组织机构sid")
// private String orgPath;
private String type;
}

3
anrui-crm/anrui-crm-biz/src/main/java/com/yxt/anrui/crm/biz/crmcustomertemp/CrmCustomerTempService.java

@ -473,6 +473,9 @@ public class CrmCustomerTempService extends MybatisBaseService<CrmCustomerTempMa
if (StringUtils.isNotBlank(name)) {
qw.like("cct.name", name);
}
if(StringUtils.isNotBlank(params.getType())){
qw.eq("cct.customerTypeKey",params.getType());
}
}
qw.orderByDesc("cct.id");
IPage<AppCrmCustomerTempVo> iPage = baseMapper.getCustomerTempListByUserSid(page, qw);

2
anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveInvoiceVo.java

@ -14,6 +14,8 @@ import java.util.List;
@Data
public class ReceiveInvoiceVo {
private List<ReceiveSeleteVo> receiveSeleteVoList = new ArrayList<>();
private InvoiceVo invoiceVo;

14
anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/ReceiveSeleteVo.java

@ -3,6 +3,8 @@ package com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @Author dimengzhe
* @Date 2023/4/19 14:18
@ -11,6 +13,7 @@ import lombok.Data;
@Data
public class ReceiveSeleteVo {
private String receivablesSid;
@ApiModelProperty("款项名称")
private String receivablesName;
@ -23,4 +26,15 @@ public class ReceiveSeleteVo {
private String notSubscriptionMoney;
@ApiModelProperty("备注")
private String remarks;
@ApiModelProperty("付款时间")
private String subscriptionDate;
@ApiModelProperty("收款开户行")
private String collectionBank;
@ApiModelProperty("收款账户")
private String receivingName;
@ApiModelProperty("付款人")
private String payerName;
@ApiModelProperty("付款时间")
private String collectionDate;
}

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

@ -45,18 +45,18 @@
<select id="selectListAllVo"
resultType="com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.DetailsOfReceivablesAndUncollectedItemsVo">
<!-- SELECT *
FROM fin_uncollected_receivables_detailed
<where>
${ew.sqlSegment}
and length(busVinSid) > 0
</where>
order by id asc-->
<!-- SELECT *
FROM fin_uncollected_receivables_detailed
<where>
${ew.sqlSegment}
and length(busVinSid) > 0
</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,
cast((furd.`reveivableMoney` - COALESCE(df.dbalance, 0)) AS DECIMAL (10, 2) ) AS currentReceivableMoney,
@ -64,12 +64,12 @@
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 (
@ -161,6 +161,7 @@
<select id="receivedSelect" resultType="com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.ReceiveSeleteVo">
SELECT furd.receivablesName,
furd.reveivableMoney,
furd.sid as receivablesSid,
(
SELECT sum(subscriptionMoney)
FROM fin_selected_receivables_detailed

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

@ -0,0 +1,34 @@
package com.yxt.anrui.flowable.api.flow2;
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo;
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
import com.yxt.common.core.result.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @description:
* @author: dimengzhe
* @date: 2023/7/20
**/
@FeignClient(
contextId = "anrui-flowable-Flow",
name = "anrui-flowable",
path = "v2/flow",
fallback = FlowFeignback.class)
public interface FlowFeign {
@ApiOperation(value = "启动流程")
@PostMapping(value = "/startProcess")
@ResponseBody
ResultBean<UpdateFlowFieldVo> startProcess(@RequestBody BusinessVariables dto);
@ApiOperation(value = "处理流程")
@PostMapping(value = "/handleProsess")
@ResponseBody
ResultBean<UpdateFlowFieldVo> handleProsess(@RequestBody BusinessVariables bv);
}

9
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow2/FlowFeignback.java

@ -0,0 +1,9 @@
package com.yxt.anrui.flowable.api.flow2;
/**
* @description:
* @author: dimengzhe
* @date: 2023/7/20
**/
public class FlowFeignback {
}

2
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java

@ -51,7 +51,7 @@ public enum ProcDefEnum {
BUSSALESORDERRETURNVEHAPPLY("销售订单退车申请", "process_tzjjs03y:1:1012504"),
BASETRAILEROUTAPPLY("挂车出库申请", "process_tkw6vhfw:1:1705004"),
FINFUNDSAPPLY("款项结转申请", "process_ypafrrvg:1:2257504"),
BUSHANDOVER("交车确认", "process_e8feloik:5:1747508"),
BUSHANDOVER("交车确认", "process_e8feloik:6:2675004"),
LOANFINPOLICYRECORDAPPLY("金融产品政策备案", "process_u45lo7qc:1:2272516"),
LOANOTHERPOLICYRECORDAPPLY("其它融产品备案", "process_7pptyzfc:1:2272524"),
DEALERFILINGAPPLY("经销商备案", "process_jdu35cog:3:2577504"),

15
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow/FlowableRest.java

@ -205,6 +205,13 @@ public class FlowableRest implements FlowableFeign {
if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人
userSids.append(processVariables.get("sendRecommendSid").toString()).append(",");
}
//查询是否有设置转办的,抄送给设置转办人员
List<String> zbUserSids = processCommentService.selectByIdAndComment("转办",bv.getInstanceId());
zbUserSids.removeAll(Collections.singleton(null));
if(!zbUserSids.isEmpty()){
String zbUser = String.join(",",zbUserSids);
userSids.append(zbUser).append(",");
}
userSids.deleteCharAt(userSids.length() - 1);
mfq.setUserSids(userSids.toString());
mfq.setOrgPath(createrOrgPath);
@ -284,11 +291,9 @@ public class FlowableRest implements FlowableFeign {
public ResultBean<UpdateFlowFieldVo> startProcess(BusinessVariables dto) {
log.info("startProcess.dto:{}", dto);
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(dto.getBusinessSid())) {
return rb.setMsg("businessSid 不能为空!");
}
if (dto.getFormVariables() == null)
dto.setFormVariables(new HashMap<String, Object>());
Map<String, Object> formVariables = dto.getFormVariables();
@ -296,20 +301,17 @@ public class FlowableRest implements FlowableFeign {
String orgPath = dto.getOrgSidPath();
formVariables.put("createrOrgPath", orgPath);//发起人的组织结构sid
}
dto.getFormVariables().put("businessSid", dto.getBusinessSid());
String nextNodeUserSids_ = dto.getNextNodeUserSids();
if (StringUtils.isBlank(nextNodeUserSids_)) {
ResultBean<UserAndOrgPath> nextNodeUserSidsOfCreate = getNextNodeUserSidsOfCreate(dto);
boolean success = nextNodeUserSidsOfCreate.getSuccess();
if (!success) {
// return rb.setMsg(nextNodeUserSidsOfCreate.getMsg());
nextNodeUserSids_ = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
} else {
nextNodeUserSids_ = nextNodeUserSidsOfCreate.getData().getUserSid();
dto.getFormVariables().put(BusinessVariables.ORGPATH, nextNodeUserSidsOfCreate.getData().getOrgPath());
}
}
dto.setNextNodeUserSids(nextNodeUserSids_);
ResultBean resultBean1 = flowableService.businessStart(dto);
@ -431,7 +433,7 @@ public class FlowableRest implements FlowableFeign {
//若下一环节用户与系统管理员一致,则自动审批
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) {
adminContains = true;
}else{
} else {
//下一环节不为空,查询下一环节用户是否有转办人
if (nextUserSid != null) {
List<String> nextUserList = Arrays.asList(nextUserSid.split(","));
@ -531,6 +533,7 @@ public class FlowableRest implements FlowableFeign {
dto.setTaskId(vo.getTaskId());
dto.setTaskDefKey(taskDefKey);
dto.setComment("系统自动跳过");
dto.setNextNodeUserSids("");
return handleProsess(dto, false);
}
List<FlowElement> flowElements = processService.calApprovePath(dto.getModelId(), dto.getModelId(),

14
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.java

@ -0,0 +1,14 @@
package com.yxt.anrui.flowable.biz.flow2;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yxt.anrui.flowable.api.flow.Flowable;
import org.apache.ibatis.annotations.Mapper;
/**
* @description:
* @author: dimengzhe
* @date: 2023/7/20
**/
@Mapper
public interface FlowMapper extends BaseMapper<Flowable> {
}

4
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowMapper.xml

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yxt.anrui.flowable.biz.flow2.FlowMapper">
</mapper>

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

@ -0,0 +1,104 @@
package com.yxt.anrui.flowable.biz.flow2;
import cn.hutool.core.bean.BeanUtil;
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.biz.process.ProcessService;
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.portal.api.sysflowcc.SysFlowccFeign;
import com.yxt.anrui.portal.api.sysflowcc.SysFlowccVo;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.anrui.portal.api.sysuser.UserByRolesAndOrgQuery;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.result.ResultBean;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.flowable.engine.HistoryService;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
/**
* @description:
* @author: dimengzhe
* @date: 2023/7/20
**/
@RestController
@RequestMapping("v2/flow")
public class FlowRest implements FlowFeign {
Logger log = LoggerFactory.getLogger(FlowRest.class);
@Autowired
private FlowService flowService;
@Autowired
private SysUserFeign sysUserFeign;
@Override
public ResultBean<UpdateFlowFieldVo> startProcess(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
//获取表单中的参数
Map<String, Object> formVariables = bv.getFormVariables();
formVariables = formVariables == null ? new HashMap<>() : formVariables;
//发起人的组织全路径
String orgPath = bv.getOrgSidPath();
formVariables.put("createrOrgPath", orgPath);
formVariables.put("businessSid", bv.getBusinessSid());
//获取下一环节待办人
ResultBean<String> userResultBean = flowService.getNextNodeUser(bv);
bv.setNextNodeUserSids(userResultBean.getData());
//启动流程实例
ResultBean<UpdateFlowFieldVo> startResultBean = flowService.businessStartProcessInstanceById(bv);
return startResultBean;
}
@Override
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
ResultBean<UpdateFlowFieldVo> updateFlowFieldVoResultBean = flowService.handleProsess(bv, true);
//添加抄送
log.info("流程返回:{}", JSONObject.toJSONString(updateFlowFieldVoResultBean));
//需要判断办结后再执行 TODO
if (updateFlowFieldVoResultBean.getSuccess()) {
log.info("流程返回:{}", JSONObject.toJSONString(updateFlowFieldVoResultBean));
if ("Event_end".equals(updateFlowFieldVoResultBean.getData().getTaskDefKey())) {
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());
Future future1 = pool.submit(() -> {
HashMap<String, Object> map = new HashMap<>();
map.put("bv", bv);
UpdateFlowFieldVo ufVo = updateFlowFieldVoResultBean.getData();
ufVo.setTaskId(bv.getTaskId());
map.put("uff", ufVo);
flowService.cc(map, bv.getTaskDefKey());
});
} catch (Exception e) {
e.printStackTrace();
return rb.setMsg("抄送失败");
}
}
}
return updateFlowFieldVoResultBean;
}
}

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

@ -0,0 +1,719 @@
package com.yxt.anrui.flowable.biz.flow2;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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.LatestTaskVo;
import com.yxt.anrui.flowable.api.processcomment.ProcessCommentDto;
import com.yxt.anrui.flowable.api.utils.ProcDefEnum;
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.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.portal.api.sysflowableconfig.SysFlowableConfigFeign;
import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigQuery;
import com.yxt.anrui.portal.api.sysflowableconfig.SysFlowableConfigVvo;
import com.yxt.anrui.portal.api.sysflowcc.SysFlowccFeign;
import com.yxt.anrui.portal.api.sysflowcc.SysFlowccVo;
import com.yxt.anrui.portal.api.sysuser.*;
import com.yxt.common.base.service.MybatisBaseService;
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.engine.*;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @description:
* @author: dimengzhe
* @date: 2023/7/20
**/
@Service
@Slf4j
public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
@Autowired
RepositoryService repositoryService;
@Autowired
RuntimeService runtimeService;
@Autowired
ManagementService managementService;
@Autowired
ProcessEngineConfigurationImpl processEngineConfiguration;
@Autowired
private SysUserFeign sysUserFeign;
@Autowired
protected IdentityService identityService;
@Autowired
protected TaskService taskService;
@Autowired
private SysFlowableConfigFeign sysFlowableConfigFeign;
@Autowired
private FlowTaskService flowTaskService;
@Autowired
private ProcessCommentService processCommentService;
@Autowired
protected HistoryService historyService;
@Autowired
private ProcessService processService;
@Autowired
private MessageFeign messageFeign;
@Autowired
private SysFlowccFeign sysFlowccFeign;
public ResultBean<String> getNextNodeUser(BusinessVariables bv) {
ResultBean<String> rb = ResultBean.fireFail();
//根据业务参数取流程流转的环节 信息
List<Map<String, Object>> list = (List<Map<String, Object>>) getProcessCirculationNodesByMap(bv).getData();
if (list == null || list.size() < 2) {
return rb.setMsg("流程设计问题");
}
//取第二个环节的配置角色
Object o = list.get(1).get("candidateGroups");
if (o == null) {
return rb.setMsg("流程设计问题");
}
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(o));
String roleSid = jsonArray.get(0).toString();
//根据组织架构、角色两个参数取相关符合条件的用户信息
UserQuery userQuery = new UserQuery();
userQuery.setRoleSid(roleSid);
userQuery.setOrgSidPath(bv.getOrgSidPath());
String nextNodeUserSids_ = "";
List<SysUserVo> sysUserVos = sysUserFeign.getUserByRole(userQuery).getData();
if (sysUserVos == null || sysUserVos.size() < 1) {
nextNodeUserSids_ = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
} else {
StringBuilder nextNodeUserSids = new StringBuilder();
for (SysUserVo su : sysUserVos) {
nextNodeUserSids.append(su.getSid()).append(",");
}
//符合条件的用户的sid,拼接的字符串
nextNodeUserSids_ = nextNodeUserSids.toString();
nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1);
}
return rb.success().setData(nextNodeUserSids_);
}
public ResultBean getProcessCirculationNodesByMap(BusinessVariables bv) {
ResultBean<List<Map<String, Object>>> rb = new ResultBean<List<Map<String, Object>>>();
String modelId = bv.getModelId();
List<FlowElement> flowElements = calApprovePath(modelId, bv.getFormVariables());
List<Map<String, Object>> list = new ArrayList<>();
for (FlowElement f : flowElements) {
Map<String, Object> map = new HashMap<>();
map.put("name", f.getName());
map.put("id", f.getId());
String s = JSON.toJSONString(f);
JSONObject jsonObject = JSONObject.parseObject(s);
log.info("item:{}", jsonObject);
Object candidateGroups = jsonObject.get("candidateGroups");
map.put("candidateGroups", candidateGroups);
list.add(map);
}
return rb.setData(list);
}
/**
* 1. 首先拿到BpmnModel所有流程定义信息都可以通过BpmnModel获取若流程尚未发起则用modelId查询最新部署的流程定义数据
* 若流程已经发起可以通过流程实例的processDefinitionId查询流程定义的历史数据
*
* @param variableMap 流程变量用于计算条件分支
*/
public List<FlowElement> calApprovePath(String modelId, Map<String, Object> variableMap) {
BpmnModel bpmnModel = repositoryService.getBpmnModel(modelId);
Collection<FlowElement> flowElements = new ArrayList<>();
Collection<FlowElement> flowElements2 = bpmnModel.getMainProcess().getFlowElements();
flowElements.addAll(flowElements2);
List<FlowElement> passElements = new ArrayList<>();
dueStartElement(passElements, flowElements, variableMap);
return passElements;
}
/**
* 2. 找到开始节点通过它的目标节点然后再不断往下找
*/
private void dueStartElement(List<FlowElement> passElements, Collection<FlowElement> flowElements, Map<String, Object> variableMap) {
Optional<FlowElement> startElementOpt = flowElements.stream().filter(flowElement -> flowElement instanceof StartEvent).findFirst();
startElementOpt.ifPresent(startElement -> {
flowElements.remove(startElement);
List<SequenceFlow> outgoingFlows = ((StartEvent) startElement).getOutgoingFlows();
String targetRef = outgoingFlows.get(0).getTargetRef();
// 根据ID找到FlowElement
FlowElement targetElementOfStartElement = getFlowElement(flowElements, targetRef);
if (targetElementOfStartElement instanceof UserTask) {
this.getPassElementList(passElements, flowElements, targetElementOfStartElement, variableMap);
}
});
}
/**
* 3. 我只用到了UserTaskExclusiveGatewayParallelGateway所以代码里只列举了这三种如果用到了其他的可以再自己补充
*/
private void getPassElementList(List<FlowElement> passElements, Collection<FlowElement> flowElements, FlowElement curFlowElement, Map<String, Object> variableMap) {
// 任务节点
if (curFlowElement instanceof UserTask) {
this.dueUserTaskElement(passElements, flowElements, curFlowElement, variableMap);
return;
}
// 排他网关
if (curFlowElement instanceof ExclusiveGateway) {
this.dueExclusiveGateway(passElements, flowElements, curFlowElement, variableMap);
return;
}
// 并行网关
if (curFlowElement instanceof ParallelGateway) {
this.dueParallelGateway(passElements, flowElements, curFlowElement, variableMap);
}
}
private void dueUserTaskElement(List<FlowElement> passElements, Collection<FlowElement> flowElements,
FlowElement curFlowElement, Map<String, Object> variableMap) {
passElements.add(curFlowElement);
List<SequenceFlow> outgoingFlows = ((UserTask) curFlowElement).getOutgoingFlows();
String targetRef = outgoingFlows.get(0).getTargetRef();
if (outgoingFlows.size() > 1) {
// 找到表达式成立的sequenceFlow
SequenceFlow sequenceFlow = getSequenceFlow(variableMap, outgoingFlows);
targetRef = sequenceFlow.getTargetRef();
}
// 根据ID找到FlowElement
FlowElement targetElement = getFlowElement(flowElements, targetRef);
this.getPassElementList(passElements, flowElements, targetElement, variableMap);
}
private void dueExclusiveGateway(List<FlowElement> passElements, Collection<FlowElement> flowElements, FlowElement curFlowElement, Map<String, Object> variableMap) {
// 获取符合条件的sequenceFlow的目标FlowElement
List<SequenceFlow> exclusiveGatewayOutgoingFlows = ((ExclusiveGateway) curFlowElement).getOutgoingFlows();
flowElements.remove(curFlowElement);
// 找到表达式成立的sequenceFlow
SequenceFlow sequenceFlow = getSequenceFlow(variableMap, exclusiveGatewayOutgoingFlows);
// 根据ID找到FlowElement
FlowElement targetElement = getFlowElement(flowElements, sequenceFlow.getTargetRef());
this.getPassElementList(passElements, flowElements, targetElement, variableMap);
}
private void dueParallelGateway(List<FlowElement> passElements, Collection<FlowElement> flowElements, FlowElement curFlowElement, Map<String, Object> variableMap) {
FlowElement targetElement;
List<SequenceFlow> parallelGatewayOutgoingFlows = ((ParallelGateway) curFlowElement).getOutgoingFlows();
for (SequenceFlow sequenceFlow : parallelGatewayOutgoingFlows) {
targetElement = getFlowElement(flowElements, sequenceFlow.getTargetRef());
this.getPassElementList(passElements, flowElements, targetElement, variableMap);
}
}
private FlowElement getFlowElement(Collection<FlowElement> flowElements, String targetRef) {
return flowElements.stream().filter(flowElement -> targetRef.equals(flowElement.getId())).findFirst().orElse(null);
}
/**
* 4. 根据传入的变量计算出表达式成立的那一条SequenceFlow
*
* @param variableMap
* @param outgoingFlows
* @return
*/
private SequenceFlow getSequenceFlow(Map<String, Object> variableMap, List<SequenceFlow> outgoingFlows) {
Optional<SequenceFlow> sequenceFlowOpt = outgoingFlows.stream().filter(item -> {
try {
return this.getElValue(item.getConditionExpression(), variableMap);
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
}).findFirst();
return sequenceFlowOpt.orElse(outgoingFlows.get(0));
}
private boolean getElValue(String exp, Map<String, Object> variableMap) {
return managementService.executeCommand(new ExpressionCmd(runtimeService, processEngineConfiguration, null, exp, variableMap));
}
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
String procDefId = bv.getModelId();
String userSid = bv.getUserSid();
String nextNodeUserSids = bv.getNextNodeUserSids();
Map<String, Object> variables = bv.getFormVariables();
Map<String, Object> variablesSeconds = bv.getFormVariables();
//根据流程定义id查询
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId)
.latestVersion().singleResult();
if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
return rb.setMsg("流程已被挂起,请先激活流程");
}
// 设置流程发起人Id到流程中
ResultBean<SysUserVo> sysUserVoResultBean = sysUserFeign.fetchBySid(userSid);
SysUserVo sysUser = sysUserVoResultBean.getData();
identityService.setAuthenticatedUserId(sysUser.getSid());
variables.put(ProcessConstants.PROCESS_INITIATOR, userSid);
variables.put(ProcessConstants.USER_TYPE_ASSIGNEE, userSid);
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
// 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题?
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
if (Objects.nonNull(task)) {
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.START.getType(),
sysUser.getName() + "发起流程申请");
taskService.setAssignee(task.getId(), userSid);
taskService.setVariablesLocal(task.getId(), variables);
taskService.complete(task.getId(), variables);
}
//根据流程实例的id查询最新的待办环节
ResultBean<List<LatestTaskVo>> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId());
List<LatestTaskVo> data = latestTasksNew.getData();
LatestTaskVo latestTaskVo = data.get(0);
String id_ = latestTaskVo.getId_();
String task_def_key_ = latestTaskVo.getTask_def_key_();
//查询下一环节是否有转办并添加评论
nextNodeUserSids = change(nextNodeUserSids, processInstance.getProcessInstanceId());
taskService.setAssignee(id_, nextNodeUserSids);
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) {
bv.setModelId(procDefId);
bv.setInstanceId(task.getProcessInstanceId());
bv.setTaskId(id_);
bv.setUserSid(nextNodeUserSids);
bv.setBusinessSid(bv.getBusinessSid());
bv.setTaskDefKey(task_def_key_);
bv.setFormVariables(variables);
bv.setOrgSidPath(bv.getOrgSidPath());
bv.setComment("系统自动跳过!");
bv.setFormVariables(variablesSeconds);
bv.setNextNodeUserSids("");
ResultBean<UpdateFlowFieldVo> updateFlowFieldVoResultBean = handleProsess(bv, false);
if (updateFlowFieldVoResultBean.getSuccess() && updateFlowFieldVoResultBean.getData() != null) {
UpdateFlowFieldVo vo = updateFlowFieldVoResultBean.getData();
updateFlowFieldVo.setProcInsId(vo.getProcInsId());
updateFlowFieldVo.setNodeState(vo.getNodeState());
updateFlowFieldVo.setTaskId(vo.getTaskId());
updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey());
updateFlowFieldVo.setProcDefId(bv.getModelId());
updateFlowFieldVo.setSid(bv.getBusinessSid());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
}
}
if (bv.getUserSid().equals(nextNodeUserSids)) {
//如果申请人与下一环节审批人相同,则自动审批
bv.setModelId(procDefId);
bv.setInstanceId(task.getProcessInstanceId());
bv.setTaskId(id_);
bv.setUserSid(nextNodeUserSids);
bv.setBusinessSid(bv.getBusinessSid());
bv.setTaskDefKey(task_def_key_);
bv.setFormVariables(variables);
bv.setOrgSidPath(bv.getOrgSidPath());
bv.setFormVariables(variablesSeconds);
bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!");
bv.setNextNodeUserSids("");
ResultBean<UpdateFlowFieldVo> updateFlowFieldVoResultBean = handleProsess(bv, false);
if (updateFlowFieldVoResultBean.getSuccess() && updateFlowFieldVoResultBean.getData() != null) {
UpdateFlowFieldVo vo = updateFlowFieldVoResultBean.getData();
updateFlowFieldVo.setProcInsId(vo.getProcInsId());
updateFlowFieldVo.setNodeState(vo.getNodeState());
updateFlowFieldVo.setTaskId(vo.getTaskId());
updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey());
updateFlowFieldVo.setProcDefId(bv.getModelId());
updateFlowFieldVo.setSid(bv.getBusinessSid());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
}
}
updateFlowFieldVo.setProcInsId(task.getProcessInstanceId());
updateFlowFieldVo.setNodeState(latestTaskVo.getName_());
updateFlowFieldVo.setTaskId(id_);
updateFlowFieldVo.setTaskDefKey(task_def_key_);
updateFlowFieldVo.setProcDefId(bv.getModelId());
updateFlowFieldVo.setSid(bv.getBusinessSid());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
}
/**
* 查询下一环节用户是否有转办用户若有转办用户则添加转办评论
*
* @param nextNodeUserSids 下一环节用户
* @param instanceId 实例id
* @return
*/
public String change(String nextNodeUserSids, String instanceId) {
//查询下一环节是否有转办
String firstSid = "";
String firstName = "";
//默认无转办
boolean isChange = false;
if (StringUtils.isNotBlank(nextNodeUserSids)) {
List<String> nextUserList = Arrays.asList(nextNodeUserSids.split(","));
if (nextUserList.size() == 1) {
firstSid = nextUserList.get(0);
ResultBean<SysUserVo> userVoResultBean = sysUserFeign.fetchBySid(firstSid);
if (userVoResultBean.getData() != null) {
firstName = userVoResultBean.getData().getName();
}
SysFlowableConfigQuery sysFlowableConfigQuery = new SysFlowableConfigQuery();
sysFlowableConfigQuery.setUserSid(firstSid);
sysFlowableConfigQuery.setNowDate(new Date());
ResultBean<SysFlowableConfigVvo> sysFlowableConfigVvoResultBean = sysFlowableConfigFeign.selectByUserSid(sysFlowableConfigQuery);
if (sysFlowableConfigVvoResultBean.getData() != null) {
if (StringUtils.isNotBlank(sysFlowableConfigVvoResultBean.getData().getChangeUserSid())) {
nextNodeUserSids = sysFlowableConfigVvoResultBean.getData().getChangeUserSid();
isChange = true;
}
}
}
}
if (isChange) {//添加评论
ResultBean<SysUserVo> userVoResultBean = sysUserFeign.fetchBySid(nextNodeUserSids);
ProcessCommentDto processCommentDto = new ProcessCommentDto();
processCommentDto.setReviewerSid(firstSid);
if (userVoResultBean.getData() != null) {
String changeName = userVoResultBean.getData().getName();
processCommentDto.setReviewer(firstName);
processCommentDto.setContent("交" + changeName + "转办");
}
processCommentDto.setTime(new Date());
processCommentDto.setProcessId(instanceId);
processCommentService.saveOrUpdateDto(processCommentDto);
}
return nextNodeUserSids;
}
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
//获取表单中的参数
Map<String, Object> formVariables = bv.getFormVariables();
formVariables = formVariables == null ? new HashMap<>() : formVariables;
formVariables.put("businessSid", bv.getBusinessSid());
String nextUserSid = bv.getNextNodeUserSids();
String taskId = bv.getTaskId();
String userSid = bv.getUserSid();
String instanceId = bv.getInstanceId();
String comment = bv.getComment();
String nodeState = "";
String taskDefKey = "";
String orgPath = bv.getOrgSidPath();
//设置下一环节审批人是否自动审批通过,默认否
boolean contains = false;
//设置是否是管理员自动审批,默认否
boolean adminContains = false;
if (StringUtils.isBlank(nextUserSid)) {
ResultBean<String> stringResultBean = getNextNodeUserSidsOfSubmit(bv);
if (!stringResultBean.getSuccess()) {
//下一环节用户为空的情况
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
} else {
nextUserSid = stringResultBean.getData();
}
} else {
//若下一环节用户与系统管理员一致,则自动审批
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) {
adminContains = true;
}
}
//查询任务id为taskId的任务是否存在
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (Objects.isNull(task)) {
return rb.setMsg("任务不存在");
}
String assignee = task.getAssignee();
if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) {
return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!");
}
if (DelegationState.PENDING.equals(task.getDelegationState())) {
//加签
taskService.addComment(taskId, instanceId,
FlowComment.DELEGATE.getType(), comment);
taskService.resolveTask(taskId, formVariables);
} else {
//当前环节办理通过,且将下一环节用户放入流程中
taskService.addComment(taskId, instanceId, FlowComment.NORMAL.getType(), comment);
log.error("taskid:{},userSid:{}", taskId, userSid);
log.error("formVariables:{}", JSON.toJSONString(formVariables));
taskService.setAssignee(taskId, userSid);
taskService.complete(taskId, formVariables);//当前用户办理通过
//根据流程实例的id取最新的待办环节,给环节设置上用户sid
ResultBean<List<LatestTaskVo>> ll = flowTaskService.getLatestTasksNew(instanceId);
if (ll.getData().size() > 0) {
LatestTaskVo latestTaskVo = ll.getData().get(0);
String id_ = latestTaskVo.getId_();
//查询下一环节用户是否有转办人
nextUserSid = change(nextUserSid, bv.getInstanceId());
taskService.setAssignee(id_, nextUserSid);//将下一环节用户放入流程中
vo.setTaskId(id_);
//在act_ru_variable表中增加环节上的业务参数的变量
taskService.setVariablesLocal(id_, formVariables);
nodeState = latestTaskVo.getName_();
taskDefKey = latestTaskVo.getTask_def_key_();
} else {
nodeState = FlowComment.SETTLE.getRemark();
taskDefKey = "Event_end";
vo.setNodeState(FlowComment.SETTLE.getRemark());
}
}
//设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批
if (adminContains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("系统自动跳过");
bv.setNextNodeUserSids("");
return handleProsess(bv, false);
}
//获取该流程所有要走的环节节点
List<FlowElement> flowElements = calApprovePath(bv.getModelId(),
bv.getFormVariables());
for (int i = 0; i < flowElements.size(); i++) {
FlowElement flowElement = flowElements.get(i);
String id = flowElement.getId();
if (taskDefKey.equals(id) && i + 1 < flowElements.size()) {
//获取下下一环节
FlowElement flowElement1 = flowElements.get(i + 1);
List<SysUserVo> sysUserVoLists2 = new ArrayList<>();
if (i + 2 < flowElements.size()) {
//获取下下下一环节用户
FlowElement flowElement2 = flowElements.get(i + 2);
if (flowElement2 instanceof UserTask) {
UserTask userTask = (UserTask) flowElement2;
List<String> candidateGroups = userTask.getCandidateGroups();
UserssQuery userssQuery = new UserssQuery();
userssQuery.setCandidateGroups(candidateGroups);
userssQuery.setOrgSidPath(orgPath);
sysUserVoLists2 = sysUserFeign.getUsersByRoles(userssQuery).getData();
if (sysUserVoLists2 == null) {
sysUserVoLists2 = new ArrayList<>();
}
}
}
if (flowElement1 instanceof UserTask) {
UserTask userTask = (UserTask) flowElement1;
List<String> candidateGroups = userTask.getCandidateGroups();
List<SysUserVo> sysUserVoLists = new ArrayList<>();
UserssQuery userssQuery = new UserssQuery();
userssQuery.setCandidateGroups(candidateGroups);
userssQuery.setOrgSidPath(orgPath);
sysUserVoLists = sysUserFeign.getUsersByRoles(userssQuery).getData();
if (sysUserVoLists == null) {
sysUserVoLists = new ArrayList<>();
}
//当前环节运营部总经理 刘丽艳 点击同意 下一环节 事业部副总经理 (nextUserSid) 和事业部总经理(sysUserVoLists.get(0).getSid())
//判断查询回来的用户的集合size是1 并且用户的sid和下一环节的用户的sid相同。
if (sysUserVoLists.size() == 1 && sysUserVoLists.get(0).getSid().equals(nextUserSid)) {
contains = true;
break;
}
//如果下下一环节无用户,下下下一环节用户与下一环节用户相同且只有一个,则下一环节用户自动审批。
if (sysUserVoLists.size() == 0 && sysUserVoLists2.size() == 1 && sysUserVoLists2.get(0).getSid().equals(nextUserSid)) {
contains = true;
break;
}
}
}
if (contains) {
break;
}
}
if (contains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("因与下一级审批人相同,系统自动处理,需以下一级审批人审批意见为准!");
return handleProsess(bv, false);
}
vo.setProcInsId(instanceId);
vo.setProcDefId(bv.getModelId());
vo.setNodeState(nodeState);
vo.setTaskDefKey(taskDefKey);
vo.setSid(bv.getBusinessSid());
return rb.success().setData(vo);
}
/**
* 获取下一环节用户
*
* @param bv
* @return
*/
public ResultBean<String> getNextNodeUserSidsOfSubmit(BusinessVariables bv) {
ResultBean<String> rb = ResultBean.fireFail();
String orgPath = bv.getOrgSidPath();
String taskDefKey = bv.getTaskDefKey();
//根据业务参数取流程流转的环节 信息
List<Map<String, Object>> list = (List<Map<String, Object>>) getProcessCirculationNodesByMap(bv).getData();
Map<String, Object> task_map = new HashMap<>();
boolean endTask = true;
for (int i = 0; i < list.size(); i++) {
String id = list.get(i).get("id").toString();
if (id.equals(taskDefKey) && i + 1 < list.size()) {
task_map = list.get(i + 1);
endTask = false;
}
}
if (endTask) {
task_map.put("name", "结束");
return rb.success();
} else {
Object o = task_map.get("candidateGroups");
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(o));
String roleSid = jsonArray.get(0).toString();
//根据组织架构、角色两个参数取相关符合条件的用户信息
UserQuery userQuery = new UserQuery();
userQuery.setRoleSid(roleSid);
userQuery.setOrgSidPath(orgPath);
String nextNodeUserSids_ = "";
List<SysUserVo> sysUserVos = sysUserFeign.getUserByRole(userQuery).getData();
if (sysUserVos == null || sysUserVos.size() < 1) {
return rb;
} else {
StringBuilder nextNodeUserSids = new StringBuilder();
for (SysUserVo su : sysUserVos) {
nextNodeUserSids.append(su.getSid()).append(",");
}
//符合条件的用户的sid,拼接的字符串
nextNodeUserSids_ = nextNodeUserSids.toString();
nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1);
}
return rb.success().setData(nextNodeUserSids_);
}
}
/**
* 流程抄送的功能
*
* @param map
* @return
*/
public ResultBean cc(Map<String, Object> map, String taskDefKey) {
ResultBean rb = ResultBean.fireFail();
log.info("FlowableRest-cc:{}", JSONObject.toJSONString(map));
Object bv1 = map.get("bv");
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(bv1, bv);
Object uff1 = map.get("uff");
UpdateFlowFieldVo uff = new UpdateFlowFieldVo();
BeanUtil.copyProperties(uff1, uff);
uff.setTaskDefKey(taskDefKey);
//流程定义的id
String modelId = bv.getModelId();
//将modelId根据冒号:分成三部分,取第一部分作为key
List<String> stringList = Arrays.asList(modelId.split(":"));
modelId = stringList.get(0);
//抄送的角色的sid
ResultBean<SysFlowccVo> roleSidByModelId = sysFlowccFeign.getRoleSidByModelId(modelId);
//组织机构sid
String orgSidPath = bv.getOrgSidPath();
if (roleSidByModelId.getData() == null) {
log.info("抄送失败,没有配置对应的角色!");
return rb.setMsg("抄送失败,没有配置对应的角色!");
}
SysFlowccVo data = roleSidByModelId.getData();
if (StringUtils.isBlank(data.getRoleSid())) {
log.info("抄送失败,没有配置对应的角色!");
return rb.setMsg("抄送失败,没有配置对应的角色!");
}
List<String> list = Arrays.asList(data.getRoleSid().split(","));
UserByRolesAndOrgQuery userQuery = new UserByRolesAndOrgQuery();
userQuery.setRoleSids(list);
userQuery.setOrgSidPath(orgSidPath);
List<SysUserVo> sysUserVos = sysUserFeign.getUserByRoles(userQuery).getData();
if (sysUserVos == null || sysUserVos.size() < 1) {
log.info("抄送失败,没有用户!");
return rb.setMsg("抄送失败,没有用户!");
}
StringBuilder userName = new StringBuilder();
StringBuilder userSids = new StringBuilder();
sysUserVos.forEach(f -> {
userName.append(f.getName()).append(",");
userSids.append(f.getSid()).append(",");
});
//抄送的业务逻辑
MessageFlowableQuery mfq = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(uff, messageFlowVo);
mfq.setUfVo(messageFlowVo);
//移动端的参数
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery()
.includeProcessVariables().taskId(bv.getTaskId()).singleResult();
if (historicTaskInstance == null) {
log.info("抄送失败:没有获取到业务参数!");
return rb.setMsg("抄送失败!");
}
Map<String, Object> processVariables = historicTaskInstance.getProcessVariables();
String createrOrgPath = (String) processVariables.get("createrOrgPath");
if (historicTaskInstance == null) {
log.info("抄送失败:没有获取到业务参数!");
return rb.setMsg("抄送失败!");
}
Map<String, Object> app = new HashMap<>();
if (processVariables.get("app") != null) {
app = (Map<String, Object>) processVariables.get("app");
}
log.info("抄送方法-historicTaskInstance:{}", JSONObject.toJSONString(historicTaskInstance));
mfq.setAppMap(app);
mfq.setBusinessSid(bv.getBusinessSid());
mfq.setMsgContent("系统抄送的流程审批,请查看");
// act_re_procdef
Map<String, String> process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId());
log.info("抄送成功-process:{}", process);
if (process == null) {
log.info("抄送失败,流程定义不存在!");
return rb.setMsg("抄送失败,流程定义不存在!");
}
mfq.setModuleName(process.get("NAME_"));
if (processVariables.containsKey("orderNames")) {
mfq.setMsgTitle(processVariables.get("orderNames").toString());
} else {
mfq.setMsgTitle(process.get("NAME_"));
}
if (processVariables.containsKey("sendRecommendSid")) {//增加的其他的抄送人
userSids.append(processVariables.get("sendRecommendSid").toString()).append(",");
}
//查询是否有设置转办的,抄送给设置转办人员
List<String> zbUserSids = processCommentService.selectByIdAndComment("转办",bv.getInstanceId());
zbUserSids.removeAll(Collections.singleton(null));
if(!zbUserSids.isEmpty()){
String zbUser = String.join(",",zbUserSids);
userSids.append(zbUser).append(",");
}
userSids.deleteCharAt(userSids.length() - 1);
mfq.setUserSids(userSids.toString());
mfq.setOrgPath(createrOrgPath);
ResultBean<String> resultBean = messageFeign.pushMessageCC(mfq);
log.info("抄送成功:{}", userName.toString());
log.info("抄送成功-resultBean:{}", resultBean);
if (!resultBean.getSuccess()) {
log.info("抄送失败,同送消息异常!:{}", JSONObject.toJSONString(resultBean));
return rb.setMsg("抄送失败,同送消息异常!");
}
return rb.success().setMsg("抄送" + userName.toString() + "成功!");
}
}

2
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.java

@ -69,4 +69,6 @@ public interface ProcessCommentMapper extends BaseMapper<ProcessComment> {
ProcessComment fetchBySid(@Param("sid")String sid);
void insertByDto(ProcessCommentDto dto);
List<String> selectByIdAndComment(@Param("comment") String comment, @Param("instanceId") String instanceId);
}

4
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentMapper.xml

@ -17,4 +17,8 @@
insert into `process_comment` ( `sid`, `reviewer`, `reviewerSid`, `time`, `content`, `processId`, `processInstSid`,processFile)
values(#{sid},#{reviewer},#{reviewerSid},#{time},#{content},#{processId},#{processInstSid},#{processFile});
</insert>
<select id="selectByIdAndComment" resultType="java.lang.String">
select reviewerSid from process_comment where content like concat('%',#{comment}) and processId = #{instanceId}
</select>
</mapper>

4
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/processcomment/ProcessCommentService.java

@ -135,4 +135,8 @@ public class ProcessCommentService extends MybatisBaseService<ProcessCommentMapp
}
return commentList;
}
public List<String> selectByIdAndComment(String comment, String instanceId) {
return baseMapper.selectByIdAndComment(comment, instanceId);
}
}

22
anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单1.docx

@ -0,0 +1,22 @@
金融方案预估报价单
车型:
${model!}
融资项目:
${templateName!}
总期数
${period!}
前${times!}期月还
${previousRepay!}
剩余期数月还
${monthlyRepay!}
预计首期还款日
${returnTime!}
名义(留购)价款:
${nominalPrice!}
注:结清时需交纳此费用
客户签章:
年 月 日

23
anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单2.docx

@ -0,0 +1,23 @@
金融方案预估报价单
车型:
${model!}
融资项目:
${templateName!}
预估应收合计
${amountTotal!}
总期数
${period!}
前${times!}期月还
${previousRepay!}
剩余期数月还
${monthlyRepay!}
名义(留购)价款:
${nominalPrice!}
预计首期还款日
${returnTime!}
客户签章:
年 月 日

29
anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单3.docx

@ -0,0 +1,29 @@
金融方案预估报价单
车型:
${model!}
融资项目:
${templateName!}
预估应收合计
${amountTotal!}
贷款保证金
¥${bondAmounts!}
落户保证金
¥${depositSettle!}
保险保证金
¥${depositPremium!}
总期数
${period!}
前${times!}期月还
${previousRepay!}
剩余期数月还
${monthlyRepay!}
名义(留购)价款:
¥${nominalPrice!}
预计首期还款日
${returnTime!}
客户签章:
年 月 日

42
anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/template_word/金融方案预估报价单4.docx

@ -0,0 +1,42 @@
金融方案预估报价单
车型:
${model!}
融资项目:
${templateName!}
预估应收合计:
${amountTotal!}
融资首付:
¥${downPayAmounts!}
贷款保证金:
¥${bondAmounts!}
服务费:
¥${serviceAmount!}
代收首年保险费:
¥${proxyPremium!}
落户保证金:
¥${depositSettle!}
补车价:
¥${vehOtherPrice!}
代收购置税:
¥${proxyPurchasetax!}
保险保证金:
¥${depositPremium!}
其他费用:
¥${otherAmount!}
代收意外险:
${proxyAccidentPremium!}
总期数:
${period!}
前${times!}期月还:
${previousRepay!}
剩余期数月还:
${monthlyRepay!}
名义(留购)价款:
¥${nominalPrice!}
预计首期还款日:
${returnTime!}
客户签章:
年 月 日
Loading…
Cancel
Save