Browse Source

Merge remote-tracking branch 'origin/master'

master
yunuo970428 1 year ago
parent
commit
a71628eab4
  1. 5
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/CommonContractFeign.java
  2. 5
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/CommonContractFeignFallback.java
  3. 7
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractRest.java
  4. 282
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java
  5. 2
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busbillapplication/BusBillApplication.java
  6. 21
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.java
  7. 27
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.xml
  8. 309
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationService.java
  9. 1545
      anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/carContract.ftl
  10. 2891
      anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl
  11. 1535
      anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/invoiceApply.ftl
  12. 23
      anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/BillFileVo.java
  13. 2
      anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/FinBillApplication.java
  14. 20
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.java
  15. 28
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.xml
  16. 327
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationService.java
  17. 1545
      anrui-fin/anrui-fin-biz/src/main/resources/ftl/carContract.ftl
  18. 2891
      anrui-fin/anrui-fin-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl
  19. 1535
      anrui-fin/anrui-fin-biz/src/main/resources/ftl/invoiceApply.ftl

5
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/CommonContractFeign.java

@ -263,4 +263,9 @@ public interface CommonContractFeign {
@PostMapping("/getApprovalContractList")
@ResponseBody
ResultBean<PagerVo<ContractPageVo>> getApprovalContractList(@RequestBody PagerQuery<ContractPageQuery> query);
@ApiOperation("获取合同中部分信息")
@PostMapping("/getModelMap")
@ResponseBody
ResultBean<Map<String, Object>> getModelMap(Map<String, Object> map);
}

5
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/CommonContractFeignFallback.java

@ -279,4 +279,9 @@ public class CommonContractFeignFallback implements CommonContractFeign {
public ResultBean<PagerVo<ContractPageVo>> getApprovalContractList(PagerQuery<ContractPageQuery> query) {
return null;
}
@Override
public ResultBean<Map<String, Object>> getModelMap(Map<String, Object> map) {
return null;
}
}

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

@ -659,4 +659,11 @@ public class CommonContractRest implements CommonContractFeign {
PagerVo<ContractPageVo> pagerVo = PagerUtil.pageToVo(iPage, page);
return new ResultBean<PagerVo<ContractPageVo>>().success().setData(pagerVo);
}
@Override
public ResultBean<Map<String, Object>> getModelMap(Map<String, Object> map) {
ResultBean<Map<String, Object>> rb = ResultBean.fireFail();
Map<String,Object> checkMap = commonContractService.getModelMap(map);
return rb.success().setData(checkMap);
}
}

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

@ -3175,6 +3175,288 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
return billNo;
}
public Map<String,Object> getModelMap(Map<String,Object> map){
String sid = map.get("busSid").toString();
//查询销售订单的信息
ResultBean<AppOrderDetailsVo> resultBean = busSalesOrderFeign.getSaleOrderDetails(sid);
AppOrderDetailsVo appOrderDetailsVo = resultBean.getData();
//甲方
String createOrgName = appOrderDetailsVo.getSalesOrg();
//乙方
String customerName = appOrderDetailsVo.getName();
//联系电话
String mobile = appOrderDetailsVo.getPhone();
//根据客户sid查询客户的身份证号
sid = appOrderDetailsVo.getCustomerSid();
//查询销售订单的车型信息
AppOrderModelInfoVo appOrderModelInfoVo = appOrderDetailsVo.getModelInfo();
//根据车型sid查询车型的全称
BaseVehicleModel baseVehicleModel = baseVehicleModelService.fetchBySid(appOrderModelInfoVo.getModelSid());
BaseModelConfig baseModelConfig = baseModelConfigService.fetchBySid(appOrderModelInfoVo.getConfigSid());
String modelName1 = baseVehicleModelService.appendModelName(baseVehicleModel);
String modelName = "车型:";
StringBuilder modeNameValue = new StringBuilder();
//车型名称(小名):系列+驱动+功能+空格+版本
if (StringUtils.isNotBlank(baseVehicleModel.getProductLineValue()) && !"-".equals(baseVehicleModel.getProductLineValue())) {
modeNameValue.append(baseVehicleModel.getProductLineValue());
}
//驱动
if (StringUtils.isNotBlank(baseVehicleModel.getDriveFormValue()) && !"-".equals(baseVehicleModel.getDriveFormValue())) {
modeNameValue.append(baseVehicleModel.getDriveFormValue());
}
//功能
if (StringUtils.isNotBlank(baseVehicleModel.getVehicleTypeValue()) && !"-".equals(baseVehicleModel.getVehicleTypeValue())) {
modeNameValue.append(baseVehicleModel.getVehicleTypeValue());
}
//版本
if (StringUtils.isNotBlank(baseVehicleModel.getVehicleVersionValue()) && !"-".equals(baseVehicleModel.getVehicleVersionValue())) {
modeNameValue.append(baseVehicleModel.getVehicleVersionValue());
}
modelName = modelName + modeNameValue.toString();
//车型全名称:发动机型号(空格)xxx马力+燃料+排放标准发动机、变速箱、缓速器、
// 后桥(若存在“桥”字样后不带“后桥”)、速比、轴距、悬架(若存在“悬架”字样后不带“悬架”)、
// 鞍座(若存在“鞍座”字样后不带“鞍座”)、燃料箱(若存在“油箱”字样后不带“燃料箱”)、轮胎(若存在“胎”字样后不带“轮胎”)、
// 轮毂材质、护轮罩。换行
//驾驶室+颜色驾驶室、导流罩、保险杠、后视镜、座椅、空调、独立热源、多媒体
StringBuilder modelAllName = new StringBuilder();
//发动机型号
if (StringUtils.isNotBlank(baseVehicleModel.getEngineTypeValue()) && !"-".equals(baseVehicleModel.getEngineTypeValue())) {
modelAllName.append(baseVehicleModel.getEngineTypeValue());
}
//马力
if (StringUtils.isNotBlank(baseVehicleModel.getPowerValue()) && !"-".equals(baseVehicleModel.getPowerValue())) {
modelAllName.append(" ").append(baseVehicleModel.getPowerValue()).append("马力");
}
//燃料
if (StringUtils.isNotBlank(baseVehicleModel.getFuelTypeValue()) && !"-".equals(baseVehicleModel.getFuelTypeValue())) {
modelAllName.append(baseVehicleModel.getFuelTypeValue());
}
//排放标准
if (StringUtils.isNotBlank(baseVehicleModel.getEmissionStandardValue()) && !"-".equals(baseVehicleModel.getEmissionStandardValue())) {
modelAllName.append(baseVehicleModel.getEmissionStandardValue());
}
modelAllName.append("发动机");
//变速箱
if (StringUtils.isNotBlank(baseVehicleModel.getGearboxTypeValue()) && !"-".equals(baseVehicleModel.getGearboxTypeValue())) {
modelAllName.append("、").append(baseVehicleModel.getGearboxTypeValue()).append("变速箱");
}
//缓速器
if (StringUtils.isNotBlank(baseModelConfig.getSlowMachine()) && !"-".equals(baseModelConfig.getSlowMachine())) {
modelAllName.append("、").append(baseModelConfig.getSlowMachine());
}
//后桥
if (StringUtils.isNotBlank(baseModelConfig.getRearAxleValue()) && !"-".equals(baseModelConfig.getRearAxleValue())) {
modelAllName.append("、").append(baseModelConfig.getRearAxleValue());
if (!baseModelConfig.getRearAxleValue().contains("桥")) {
modelAllName.append("后桥");
}
}
//速比
if (StringUtils.isNotBlank(baseModelConfig.getRearAxleRatio()) && !"-".equals(baseModelConfig.getRearAxleRatio())) {
modelAllName.append("、").append(baseModelConfig.getRearAxleRatio()).append("速比");
}
//轴距
if (StringUtils.isNotBlank(baseModelConfig.getWheelbase()) && !"-".equals(baseModelConfig.getWheelbase())) {
modelAllName.append("、").append(baseModelConfig.getWheelbase()).append("mm轴距");
}
//悬架
if (StringUtils.isNotBlank(baseModelConfig.getSuspension()) && !"-".equals(baseModelConfig.getSuspension())) {
modelAllName.append("、").append(baseModelConfig.getSuspension());
if (!baseModelConfig.getSuspension().contains("悬架")) {
modelAllName.append("悬架");
}
}
//鞍座
if (StringUtils.isNotBlank(baseModelConfig.getSaddle()) && !"-".equals(baseModelConfig.getSaddle())) {
modelAllName.append("、").append(baseModelConfig.getSaddle());
if (!baseModelConfig.getSaddle().contains("鞍座")) {
modelAllName.append("鞍座");
}
}
//燃料箱
if (StringUtils.isNotBlank(baseModelConfig.getFuelTank()) && !"-".equals(baseModelConfig.getFuelTank())) {
modelAllName.append("、").append(baseModelConfig.getFuelTank());
if (!baseModelConfig.getFuelTank().contains("油箱")) {
modelAllName.append("燃料箱");
}
}
//轮胎
if (StringUtils.isNotBlank(baseModelConfig.getTireSize()) && !"-".equals(baseModelConfig.getTireSize())) {
modelAllName.append("、").append(baseModelConfig.getTireSize());
if (!baseModelConfig.getTireSize().contains("胎")) {
modelAllName.append("轮胎");
}
}
//轮毂材质
if (StringUtils.isNotBlank(baseModelConfig.getHubMaterial()) && !"-".equals(baseModelConfig.getHubMaterial())) {
modelAllName.append("、").append(baseModelConfig.getHubMaterial());
}
//护轮罩
if (StringUtils.isNotBlank(baseModelConfig.getTireCover()) && !"-".equals(baseModelConfig.getTireCover())) {
modelAllName.append("、").append(baseModelConfig.getTireCover());
}
StringBuilder modelAllName2 = new StringBuilder();
modelAllName2.append("\t\t");
//驾驶室
if (StringUtils.isNotBlank(baseModelConfig.getSpecification()) && !"-".equals(baseModelConfig.getSpecification())) {
modelAllName2.append(baseModelConfig.getSpecification());
}
//颜色
if (StringUtils.isNotBlank(baseModelConfig.getCarColor()) && !"-".equals(baseModelConfig.getCarColor())) {
modelAllName2.append("/").append(baseModelConfig.getCarColor()).append("驾驶室");
}
//导流罩
if (StringUtils.isNotBlank(baseModelConfig.getBaffleModel()) && !"-".equals(baseModelConfig.getBaffleModel())) {
modelAllName2.append("、").append(baseModelConfig.getBaffleModel());
}
//保险杠
if (StringUtils.isNotBlank(baseModelConfig.getBumper()) && !"-".equals(baseModelConfig.getBumper())) {
modelAllName2.append("、").append(baseModelConfig.getBumper());
}
//后视镜
if (StringUtils.isNotBlank(baseModelConfig.getRearViewMirror()) && !"-".equals(baseModelConfig.getRearViewMirror())) {
modelAllName2.append("、").append(baseModelConfig.getRearViewMirror());
}
//座椅
if (StringUtils.isNotBlank(baseModelConfig.getSeat()) && !"-".equals(baseModelConfig.getSeat())) {
modelAllName2.append("、").append(baseModelConfig.getSeat());
if (!baseModelConfig.getSeat().contains("椅")) {
modelAllName2.append("座椅");
}
}
//空调
if (StringUtils.isNotBlank(baseModelConfig.getAirConditioner()) && !"-".equals(baseModelConfig.getAirConditioner())) {
modelAllName2.append("、").append(baseModelConfig.getAirConditioner());
}
//独立热源
if (StringUtils.isNotBlank(baseModelConfig.getIndependentSources()) && !"-".equals(baseModelConfig.getIndependentSources())) {
modelAllName2.append("、").append(baseModelConfig.getIndependentSources());
}
//多媒体
if (StringUtils.isNotBlank(baseModelConfig.getMultimedia()) && !"-".equals(baseModelConfig.getMultimedia())) {
modelAllName2.append("、").append(baseModelConfig.getMultimedia());
}
//特殊配置说明
if (StringUtils.isNotBlank(appOrderModelInfoVo.getSpecialInstructions())) {
modelAllName2.append("、").append("特殊配置说明:" + appOrderModelInfoVo.getSpecialInstructions());
}
modelAllName2.append("。");
String modelConfig = "配置:" + modelAllName.toString() + "。";
//上装:外廓尺寸+颜色+上装名称、板材厚度、板材材质、篷布滑道、冷藏冷机、自卸液压盖板、底板加热、更多配置
if (appOrderDetailsVo.getTopInfo() != null) {
AppOrderTopInfoVo topInfo = appOrderDetailsVo.getTopInfo();
String topName = appOrderDetailsVo.getTopMessage();
topName = "上装:制造尺寸与公告一致、" + topName + "。";
//只有为公司采购时才显示
if ("01".equals(topInfo.getBuyTypeKey())) {
map.put("topName", topName);
}
}
AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo();
//查询台数
String num = priceInfo.getNumber();
//单台成交价
String transactionPrice = priceInfo.getSingleFinalPrice();
//优惠说明
//ToDo:discountDetail
String discountDetail = "";
if (StringUtils.isNotBlank(appOrderDetailsVo.getTotaldiscount())) {
List<AppOrderDiscountListVo> discountList = appOrderDetailsVo.getDiscountList();
discountDetail = "优惠说明:赠送价值" + appOrderDetailsVo.getTotaldiscount() + "元优惠包。包括";
for (int iii = 0; iii < discountList.size(); iii++) {
AppOrderDiscountListVo vv = discountList.get(iii);
String discountName = vv.getDiscountName();
if (iii == discountList.size() - 1) {
discountDetail = discountDetail + "价值" + vv.getPrice() + "元" + discountName + vv.getNumber() + "份";
if (StringUtils.isNotBlank(vv.getDiscountExplain())) {
discountDetail = discountDetail + "(每份包含" + vv.getDiscountExplain() + ")。";
}
} else {
discountDetail = discountDetail + "价值" + vv.getPrice() + "元" + discountName + vv.getNumber() + "份";
if (StringUtils.isNotBlank(vv.getDiscountExplain())) {
discountDetail = discountDetail + "(每份包含" + vv.getDiscountExplain() + "),";
}
}
}
map.put("discountDetail", discountDetail);
}
//保险说明
String insuranceInfo = "保险说明:" + appOrderDetailsVo.getInsuranceInfoMessage() + "。";
//车价合计
String totalPrice = priceInfo.getTotalPrice();
String priceRemarks = "";
//车价合计大写
if (StringUtils.isNotBlank(totalPrice)) {
priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice).doubleValue()));
}
//交纳订金
AppOrderDepositInfoVo depositInfo = appOrderDetailsVo.getDepositInfo();
String depositTotal = depositInfo.getDepositTotal();
if ("02".equals(depositInfo.getDepositTypeKey())) {
ResultBean<List<BusDepositFictitiousDetailsVo>> listResultBean = busDepositFictitiousFeign.detailsList(depositInfo.getSid());
List<BusDepositFictitiousDetailsVo> listResultBeanData = listResultBean.getData();
listResultBeanData.removeAll(Collections.singleton(null));
if (!listResultBeanData.isEmpty()) {
String depositRemarks = "(其中";
for (int ii = 0; ii < listResultBeanData.size(); ii++) {
BusDepositFictitiousDetailsVo v = listResultBeanData.get(ii);
if (StringUtils.isNotBlank(v.getPayPath())) {
depositRemarks = depositRemarks + v.getDraweeName() + "在";
} else {
depositRemarks = depositRemarks + "乙方在";
}
if (ii == listResultBeanData.size() - 1) {
String b = v.getPaymentDate() + "转入甲方的" + v.getDeposit() + "元中的" + v.getPrice() + "元用于本次订金。";
depositRemarks = depositRemarks + b;
} else {
String b = v.getPaymentDate() + "转入甲方的" + v.getDeposit() + "元中的" + v.getPrice() + "元用于本次订金,";
depositRemarks = depositRemarks + b;
}
}
depositRemarks = depositRemarks + ")";
map.put("depositRemarks", depositRemarks);
}
}
//车辆交付地点
//根据存放地点查询
String address = "";
if (StringUtils.isNotBlank(priceInfo.getPlannedPickUpLocationKey())) {
ScmWarehouseVo scmWarehouseVo = scmWarehouseFeign.fetchBySid(priceInfo.getPlannedPickUpLocationKey()).getData();
if (scmWarehouseVo != null) {
address = scmWarehouseVo.getWarehouseAttribute();
}
}
map.put("modelConfigs", modelAllName2.toString());
map.put("modelName", modelName);
map.put("modelConfig", modelConfig);
map.put("totalPrice", totalPrice);
map.put("priceRemarks", priceRemarks);
if ("0".equals(depositTotal)) {
map.put("depositTotal", "/");
} else {
map.put("depositTotal", depositTotal);
}
map.put("address", address);
//查询是否有公告型号
String publics = "公告型号:";
String publicModel = appOrderModelInfoVo.getPublicModel();
String publicModelSon = appOrderModelInfoVo.getPublicModelSon();
if (StringUtils.isNotBlank(publicModel)) {
publics = publics + publicModel;
map.put("publicModel", publics + "。");
if (StringUtils.isNotBlank(publicModelSon)) {
map.put("publicModel", publics + "、" + publicModelSon + "。");
}
}
return map;
}
public ResultBean complete(BusinessVariables bv) {
ResultBean rb = ResultBean.fireFail();
String businessSid = bv.getBusinessSid();

2
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busbillapplication/BusBillApplication.java

@ -146,4 +146,6 @@ public class BusBillApplication extends BaseEntity {
private String qkkpBillNo;
@ApiModelProperty("出库申请sid")
private String ckSid;
private String fileUrl;
}

21
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.java

@ -30,10 +30,17 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.base.api.basetrailer.BaseTrailer;
import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel;
import com.yxt.anrui.base.api.basevehicle.BaseVehicle;
import com.yxt.anrui.buscenter.api.busbillapplication.BusBillApplication;
import com.yxt.anrui.buscenter.api.busbillapplication.BusBillApplicationDetailsVo;
import com.yxt.anrui.buscenter.api.busbillapplication.BusBillApplicationVo;
import com.yxt.anrui.buscenter.api.busbillapplication.*;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel;
import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp;
import com.yxt.anrui.fin.api.finbillapplication.FinBillApplication;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -80,4 +87,18 @@ public interface BusBillApplicationMapper extends BaseMapper<BusBillApplication>
BusBillApplication selectByContractNoAndSid(@Param("contractNo") String contractNo, @Param("vinSid") String vinSid);
FinBillApplication selectByNo(String billNo);
BusSalesOrder selectByContract(String contractNo);
BusSalesOrderModel selectByOrderSid(String sid);
BusSalesOrderPrice selectByPrices(String sid);
BaseTrailer selectByTrailerNo(String gcVinNo);
BaseTrailerModel selectByModelSid(String trailerModelSid);
BaseVehicle selectByVinSid(String vehSid);
CrmCustomerTemp selectByCustomerSid(String openTickSid);
}

27
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.xml

@ -102,4 +102,31 @@
<select id="selectByNo" resultType="com.yxt.anrui.fin.api.finbillapplication.FinBillApplication">
select bi.* from anrui_fin.fin_bill_application bi where bi.qkkpBillNo = #{billNo} order by id desc limit 1
</select>
<select id="selectByContract" resultType="com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder">
select * from anrui_buscenter.bus_sales_order where contractNo = #{contractNo}
</select>
<select id="selectByOrderSid" resultType="com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel">
select * from anrui_buscenter.bus_sales_order_model where salesOrderSid = #{sid}
</select>
<select id="selectByPrices" resultType="com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice">
select * from anrui_buscenter.bus_sales_order_price where salesOrderSid = #{sid}
</select>
<select id="selectByTrailerNo" resultType="com.yxt.anrui.base.api.basetrailer.BaseTrailer">
select * from anrui_base.base_trailer where vinNo = #{gcVinNo} order by id desc limit 1
</select>
<select id="selectByModelSid" resultType="com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel">
select * from anrui_base.base_trailer_model where sid = #{trailerModelSid}
</select>
<select id="selectByVinSid" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicle">
select * from anrui_base.base_vehicle where sid = #{vehSid}
</select>
<select id="selectByCustomerSid" resultType="com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp">
select * from anrui_crm.crm_customer_temp where sid = #{openTickSid}
</select>
</mapper>

309
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationService.java

@ -27,12 +27,16 @@ package com.yxt.anrui.buscenter.biz.busbillapplication;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.base.api.basetrailer.*;
import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel;
import com.yxt.anrui.base.api.basevehicle.BaseVehicle;
import com.yxt.anrui.base.api.basevehicleappendix.BaseVehicleAppendixFeign;
import com.yxt.anrui.base.api.basevehiclecertificate.BaseVehicleCertificateFeign;
import com.yxt.anrui.base.api.basevehiclecertificate.BaseVehicleCertificateVo;
import com.yxt.anrui.base.api.commonappendix.CommonAppendixFeign;
import com.yxt.anrui.base.api.commonappendix.CommonAppendixVo;
import com.yxt.anrui.base.api.commoncontract.CarContractListVo;
import com.yxt.anrui.base.api.commoncontract.CommonContractFeign;
import com.yxt.anrui.buscenter.api.busbillfile.BusAttachTypeEnum;
import com.yxt.anrui.buscenter.api.busbillfile.BusBillFileDto;
@ -47,6 +51,7 @@ import com.yxt.anrui.buscenter.api.busdeliveredapply.BusDeliveredApply;
import com.yxt.anrui.buscenter.api.busdeliveredapplydetails.BusDeliveredApplyDetails;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel;
import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice;
import com.yxt.anrui.buscenter.biz.busbillfile.BusBillFileService;
import com.yxt.anrui.buscenter.biz.busbilltrailer.BusBillTrailerService;
@ -57,19 +62,31 @@ import com.yxt.anrui.buscenter.api.busbilltrailer.BusBillTrailerVo;
import com.yxt.anrui.buscenter.biz.busdeliveredapply.BusDeliveredApplyService;
import com.yxt.anrui.buscenter.biz.busdeliveredapplydetails.BusDeliveredApplyDetailsService;
import com.yxt.anrui.buscenter.biz.bussalesorder.BusSalesOrderService;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp;
import com.yxt.anrui.fin.api.finbillapplication.BillFileVo;
import com.yxt.anrui.fin.api.finbillapplication.FinBillApplication;
import com.yxt.anrui.fin.api.finbillapplication.FinBillApplicationDto;
import com.yxt.anrui.fin.api.finbilltrailer.FinBillTrailerDto;
import com.yxt.anrui.fin.api.finbillvehicle.FinBillVehicleDto;
import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingDetailsVo;
import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingFeign;
import com.yxt.anrui.riskcenter.api.loansolutions.LoanSolutionsFeign;
import com.yxt.anrui.riskcenter.api.loansolutions.app.SolutionsDetailsVo;
import com.yxt.common.base.config.component.DocPdfComponent;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.WordConvertUtils;
import com.yxt.common.core.result.ResultBean;
import org.apache.commons.lang3.StringUtils;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.concurrent.*;
@Service
public class BusBillApplicationService extends MybatisBaseService<BusBillApplicationMapper, BusBillApplication> {
@ -98,6 +115,12 @@ public class BusBillApplicationService extends MybatisBaseService<BusBillApplica
private BusDeliveredApplyDetailsService busDeliveredApplyDetailsService;
@Autowired
private FinCompanyInvoicingFeign finCompanyInvoicingFeign;
@Autowired
private CommonContractFeign commonContractFeign;
@Autowired
private LoanSolutionsFeign loanSolutionsFeign;
@Autowired
private DocPdfComponent docPdfComponent;
public ResultBean<String> saveOrUpdateDto(BusBillApplicationDto dto) {
ResultBean rb = ResultBean.fireFail();
@ -112,6 +135,10 @@ public class BusBillApplicationService extends MybatisBaseService<BusBillApplica
BeanUtil.copyProperties(dto, busBillApplication, "sid");
busBillApplication.setNum(busBillVehicles.size());
busBillApplication.setArrearsMoney("0");
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
busBillApplication.setFileUrl(fileUrl);
}
save(busBillApplication);
//主车开票信息
for (BusBillVehicleDto busBillVehicleDto : busBillVehicles) {
@ -247,6 +274,10 @@ public class BusBillApplicationService extends MybatisBaseService<BusBillApplica
}
BusBillApplication entity = fetchBySid(dtoSid);
BeanUtil.copyProperties(dto, entity, "id", "sid");
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
entity.setFileUrl(fileUrl);
}
baseMapper.updateById(entity);
}
@ -491,4 +522,278 @@ public class BusBillApplicationService extends MybatisBaseService<BusBillApplica
public FinBillApplication selectByNo(String billNo) {
return baseMapper.selectByNo(billNo);
}
public String getFileUrl(BusBillApplicationDto dto) {
Map<String, Object> map = new HashMap<>();
Map<String, Object> carMap = new HashMap<>();
Map<String, Object> filemap = new HashMap<>();
Map<String,Object> checkMap = new HashMap<>();
String fileUrl = "";
String contractNo = dto.getContractNo();
//根据合同号查询销售订单数据
BusSalesOrder busSalesOrder = baseMapper.selectByContract(contractNo);
SolutionsDetailsVo loanSolutions = loanSolutionsFeign.selectDetailss(busSalesOrder.getSid()).getData();
List<BusBillVehicleDto> finBillVehicles = dto.getFinBillVehicles();
BusSalesOrderModel busSalesOrderModel = baseMapper.selectByOrderSid(busSalesOrder.getSid());
BusSalesOrderPrice busSalesOrderPrice = baseMapper.selectByPrices(busSalesOrder.getSid());
FinCompanyInvoicingDetailsVo finCompanyInvoicingDetailsVo = finCompanyInvoicingFeign.fetchDetailsVoBySid(dto.getOpenTickSid()).getData();
if (!dto.getOpenTickSid().equals(busSalesOrder.getAffiliatedCompanySid())) {
//生成开票申请书
if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
map.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
map.put("contractNo", busSalesOrder.getContractNo());
List<BillFileVo> list = new ArrayList<>();
BillFileVo billFileVo = new BillFileVo();
if (busSalesOrderModel != null) {
billFileVo.setCarName(busSalesOrderModel.getModelName());
billFileVo.setNum(String.valueOf(finBillVehicles.size()));
billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString());
}
if (loanSolutions != null) {
if (StringUtils.isNotBlank(loanSolutions.getMainVehicleAmount())) {
billFileVo.setOpenPrice(loanSolutions.getMainVehicleAmount());
}
}
billFileVo.setType(busSalesOrder.getBillingType());
list.add(billFileVo);
List<BusBillTrailerDto> finBillTrailers = dto.getFinBillTrailers();
finBillTrailers.removeAll(Collections.singleton(null));
Map<String, Object> carNameMap = new HashMap<>();
if (!finBillTrailers.isEmpty()) {
for (int i = 0; i < finBillTrailers.size(); i++) {
BusBillTrailerDto finBillTrailerDto = finBillTrailers.get(i);
billFileVo = new BillFileVo();
BaseTrailer baseTrailer = baseMapper.selectByTrailerNo(finBillTrailerDto.getGcVinNo());
if (baseTrailer != null) {
BaseTrailerModel baseTrailerModel = baseMapper.selectByModelSid(baseTrailer.getTrailerModelSid());
if (baseTrailerModel != null) {
String carName = "外廓-" + Integer.parseInt(baseTrailerModel.getAppearanceSizeLong()) / 1000 + "米" + "\t" + baseTrailerModel.getTrailerTypeValue();
if (carNameMap.containsKey(carName)) {
carNameMap.put(carName, Integer.parseInt(carNameMap.get(carName).toString()) + 1);
continue;
} else {
billFileVo.setType(busSalesOrder.getBillingType());
if (loanSolutions != null) {
if (StringUtils.isNotBlank(loanSolutions.getMainVehicleAmount())) {
billFileVo.setOpenPrice(loanSolutions.getMainVehicleAmount());
}
}
billFileVo.setCarName(carName);
if (busSalesOrderModel != null) {
billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString());
}
carNameMap.put(carName, 1);
list.add(billFileVo);
}
}
}
}
}
if (!list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
BillFileVo billFileVo1 = list.get(i);
String carName = billFileVo1.getCarName();
if (carNameMap.containsKey(carName)) {
billFileVo1.setNum(carNameMap.get(carName).toString());
}
}
}
map.put("list", list);
map.put("name",busSalesOrder.getAffiliatedCompany());
String date = DateUtil.today();
List<String> dateString = Arrays.asList(date.split("-"));
String year = dateString.get(0);
String month = dateString.get(1);
String day = dateString.get(2);
map.put("year", year);
map.put("month", month);
map.put("day", day);
if (!"02".equals(dto.getOpenTickTypeKey())) {
if (finCompanyInvoicingDetailsVo != null) {
//生成车辆登记合同
if (busSalesOrder != null) {
carMap.put("Yf", busSalesOrder.getCustomerName());
carMap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称
}
carMap.put("contractNo", "D" + map.get("contractNo"));
if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
carMap.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
carMap.put("date", date);
List<CarContractListVo> carContractListVos = new ArrayList<>();
for (BusBillVehicleDto salesOrderVehicle : finBillVehicles) {
CarContractListVo carContractListVo = new CarContractListVo();
BaseVehicle baseVehicle = baseMapper.selectByVinSid(salesOrderVehicle.getVehSid());
carContractListVo.setBrand(baseVehicle.getModelName());
carContractListVo.setVinNo(baseVehicle.getVinNo());
carContractListVo.setEnginNo(baseVehicle.getEngineNo());
carContractListVos.add(carContractListVo);
}
carMap.put("carLists", carContractListVos);
}
}
}
if (loanSolutions != null) {
if (!dto.getOneBillMoney().equals(loanSolutions.getMainVehicleAmount())) {
//生成新车空白合同
filemap.put("totalPrice", "");
filemap.put("priceRemarks", "");
filemap.put("depositTotal", "");
String remarks = "";
String date = DateUtil.today();
List<String> dateString = Arrays.asList(date.split("-"));
String year = dateString.get(0);
String month = dateString.get(1);
String day = dateString.get(2);
filemap.put("year", year);
filemap.put("month", month);
filemap.put("day", day);
if (finCompanyInvoicingDetailsVo != null) {
filemap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("customerName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("invoiceNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("idNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("adds", finCompanyInvoicingDetailsVo.getAddress());//户籍地址
}else{
CrmCustomerTemp crmCustomerTemp = baseMapper.selectByCustomerSid(dto.getOpenTickSid());
if (crmCustomerTemp != null) {
filemap.put("invoiceName", crmCustomerTemp.getName());//开票名称
filemap.put("customerName", crmCustomerTemp.getName());//开票名称
filemap.put("invoiceNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("idNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("adds", crmCustomerTemp.getCertificateAddress());//户籍地址
}
}
filemap.put("invoiceType", dto.getOpenTickTypeValue());//开票类型
filemap.put("createOrgName", "");
remarks = "数量" + finBillVehicles.size() + "台,单台成交价: 元。";
filemap.put("remarks", remarks);
filemap.put("busSid",busSalesOrder.getSid());
ResultBean<Map<String,Object>> mapResultBean = commonContractFeign.getModelMap(filemap);
checkMap = mapResultBean.getData();
}
}
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(1, 2,
1000, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
List<File> filesList = new ArrayList<>();
if(!map.isEmpty()){
Future<String> future1 = pool.submit(() -> {
return getInvoiceApplyFile(map);
});
if (StringUtils.isNotBlank(future1.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future1.get());
filesList.add(file);
}
}
if(!carMap.isEmpty()){
Future<String> future2 = pool.submit(() -> {
return getCarFile(carMap);
});
if (StringUtils.isNotBlank(future2.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future2.get());
filesList.add(file);
}
}
Map<String, Object> finalCheckMap = checkMap;
if(!finalCheckMap.isEmpty()){
Future<String> future3 = pool.submit(() -> {
return blackFile(finalCheckMap);
});
if (StringUtils.isNotBlank(future3.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future3.get());
filesList.add(file);
}
}
if (filesList.size() > 0) {
String typeName = contractNo + "开票附件.pdf";
File allFile = WordConvertUtils.mulFile2One(filesList, docPdfComponent.getUploadTemplateUrl() + typeName);
System.out.println("-========" + docPdfComponent.getUploadTemplateUrl() + typeName);
fileUrl =typeName;
}
} catch (Exception e) {
e.printStackTrace();
log.error("生成文件失败:==========================" + e.getMessage());
}
return fileUrl;
}
public String blackFile(Map<String, Object> map) {
String ftl = "dai_existingvehicles_black";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成合同文件名
String pdfName = map.get("contractNo").toString() + "贷款新车买卖空白合同_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public String getInvoiceApplyFile(Map<String, Object> map) {
String ftl = "invoiceApply";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成文件名
String pdfName = map.get("contractNo").toString() + "开票申请书_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public String getCarFile(Map<String, Object> map) {
String ftl = "carContract";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成合同文件名
String pdfName = map.get("contractNo").toString() + "车辆登记合同_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
}

1545
anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/carContract.ftl

File diff suppressed because it is too large

2891
anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl

File diff suppressed because it is too large

1535
anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/invoiceApply.ftl

File diff suppressed because it is too large

23
anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/BillFileVo.java

@ -0,0 +1,23 @@
package com.yxt.anrui.fin.api.finbillapplication;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2024/2/22
**/
@Data
public class BillFileVo {
@ApiModelProperty("车辆名称")
private String carName;
@ApiModelProperty("数量")
private String num;
@ApiModelProperty("合同单价")
private String price;
@ApiModelProperty("开票金额")
private String openPrice;
@ApiModelProperty("发票类型")
private String type;
}

2
anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/FinBillApplication.java

@ -146,4 +146,6 @@ public class FinBillApplication extends BaseEntity {
private String qkkpBillNo;
@ApiModelProperty("是否为单独新增")
private String showBtnStr;
private String fileUrl;
}

20
anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.java

@ -30,8 +30,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.base.api.basetrailer.BaseTrailer;
import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel;
import com.yxt.anrui.base.api.basevehicle.BaseVehicle;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel;
import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp;
import com.yxt.anrui.fin.api.finbillapplication.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -98,4 +104,18 @@ public interface FinBillApplicationMapper extends BaseMapper<FinBillApplication>
@Select("select * from fin_bill_application where contractNo = #{contractNo} limit 1")
FinBillApplicationDetailsVo selectByCon(String contractNo);
BusSalesOrder selectByContract(String contractNo);
BusSalesOrderModel selectByOrderSid(String sid);
BusSalesOrderPrice selectByPrices(String sid);
BaseTrailer selectByTrailerNo(String gcVinNo);
BaseTrailerModel selectByModelSid(String trailerModelSid);
BaseVehicle selectByVinSid(String vehSid);
CrmCustomerTemp selectByCustomerSid(String openTickSid);
}

28
anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.xml

@ -191,4 +191,32 @@
ON bv.`loanContractSid` = lr.`loanContractSid`
where bo.contractNo = #{contractNo} and bv.linkSid = #{vinSid}
</select>
<select id="selectByContract" resultType="com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder">
select * from anrui_buscenter.bus_sales_order where contractNo = #{contractNo}
</select>
<select id="selectByOrderSid" resultType="com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel">
select * from anrui_buscenter.bus_sales_order_model where salesOrderSid = #{sid}
</select>
<select id="selectByPrices" resultType="com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice">
select * from anrui_buscenter.bus_sales_order_price where salesOrderSid = #{sid}
</select>
<select id="selectByTrailerNo" resultType="com.yxt.anrui.base.api.basetrailer.BaseTrailer">
select * from anrui_base.base_trailer where vinNo = #{gcVinNo} order by id desc limit 1
</select>
<select id="selectByModelSid" resultType="com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel">
select * from anrui_base.base_trailer_model where sid = #{trailerModelSid}
</select>
<select id="selectByVinSid" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicle">
select * from anrui_base.base_vehicle where sid = #{vehSid}
</select>
<select id="selectByCustomerSid" resultType="com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp">
select * from anrui_crm.crm_customer_temp where sid = #{openTickSid}
</select>
</mapper>

327
anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationService.java

@ -31,12 +31,12 @@ 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.basedistributor.BaseDistributor;
import com.yxt.anrui.base.api.basedistributor.BaseDistributorFeign;
import com.yxt.anrui.base.api.baseinternalpurchase.flow.GetNodeVo;
import com.yxt.anrui.base.api.basetrailer.BaseTrailerDetailsVo;
import com.yxt.anrui.base.api.basetrailer.BaseTrailerFeign;
import com.yxt.anrui.base.api.basetrailer.TrailerVo;
import com.yxt.anrui.base.api.basetrailer.TraliveredVo;
import com.yxt.anrui.base.api.basetrailer.*;
import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel;
import com.yxt.anrui.base.api.basevehicle.BaseVehicle;
import com.yxt.anrui.base.api.basevehicle.BaseVehicleFeign;
import com.yxt.anrui.base.api.basevehicleappendix.BaseVehicleAppendixFeign;
import com.yxt.anrui.base.api.basevehiclecertificate.BaseVehicleCertificateFeign;
@ -45,12 +45,13 @@ import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleState;
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.commonappendix.CommonAppendix;
import com.yxt.anrui.base.api.commonappendix.CommonAppendixFeign;
import com.yxt.anrui.base.api.commonappendix.CommonAppendixVo;
import com.yxt.anrui.base.api.commonappendix.CommonAttachTypeEnum;
import com.yxt.anrui.base.api.commoncontract.CommonContract;
import com.yxt.anrui.base.api.commoncontract.CommonContractFeign;
import com.yxt.anrui.base.api.commoncontract.*;
import com.yxt.anrui.base.common.enums.BillTypeEnum;
import com.yxt.anrui.base.common.enums.CommonContractEnum;
import com.yxt.anrui.base.common.utils.Rule;
import com.yxt.anrui.base.common.utils.domain.BillNo;
import com.yxt.anrui.buscenter.api.busarrearscarryvehicleapply.BusArrearsCarryVehicleApplyFeign;
@ -58,11 +59,17 @@ import com.yxt.anrui.buscenter.api.busarrearscarryvehicleapply.BusArrearsCarryVe
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderFeign;
import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderContractNoDto;
import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderModelInfoVo;
import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderPriceInfoVo;
import com.yxt.anrui.buscenter.api.bussalesorder.app.vin.VinListsVo;
import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel;
import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicleFeign;
import com.yxt.anrui.buscenter.api.busvalcustfiling.BusValcustFilingDto;
import com.yxt.anrui.buscenter.api.busvalcustfiling.BusValcustFilingFeign;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempFeign;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempVo;
import com.yxt.anrui.fin.api.finbillapplication.*;
@ -104,12 +111,13 @@ import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign;
import com.yxt.anrui.portal.api.sysuser.*;
import com.yxt.anrui.riskcenter.api.loanparameter.LoanParameterFeign;
import com.yxt.anrui.riskcenter.api.loansolutions.LoanSolutionsFeign;
import com.yxt.anrui.riskcenter.api.loansolutions.app.SolutionsDetailsVo;
import com.yxt.common.base.config.component.DocPdfComponent;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.*;
import com.yxt.common.base.utils.Base64;
import com.yxt.common.base.utils.ConstantUtils;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.base.utils.WordUtils;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
@ -121,14 +129,12 @@ import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.text.MessageFormat;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@ -213,6 +219,10 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
private BusValcustFilingFeign busValcustFilingFeign;
@Autowired
private SysParameterFeign sysParameterFeign;
@Autowired
private LoanSolutionsFeign loanSolutionsFeign;
@Autowired
private DocPdfComponent docPdfComponent;
private QueryWrapper<FinBillApplication> createQueryWrapper(FinBillApplicationQuery query) {
// todo: 这里根据具体业务调整查询条件
@ -483,6 +493,10 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
finBillApplication.setBillNo(billNo);
finBillApplication.setNum(finBillVehicles.size());
finBillApplication.setArrearsMoney("0");
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
finBillApplication.setFileUrl(fileUrl);
}
save(finBillApplication);
//主车开票信息
for (FinBillVehicleDto finBillVehicleDto : finBillVehicles) {
@ -664,6 +678,285 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
return rb.success().setMsg("修改成功").setData(dtoSid);
}
public String getFileUrl(FinBillApplicationDto dto) {
Map<String, Object> map = new HashMap<>();
Map<String, Object> carMap = new HashMap<>();
Map<String, Object> filemap = new HashMap<>();
Map<String,Object> checkMap = new HashMap<>();
String fileUrl = "";
String contractNo = dto.getContractNo();
//根据合同号查询销售订单数据
BusSalesOrder busSalesOrder = baseMapper.selectByContract(contractNo);
SolutionsDetailsVo loanSolutions = loanSolutionsFeign.selectDetailss(busSalesOrder.getSid()).getData();
List<FinBillVehicleDto> finBillVehicles = dto.getFinBillVehicles();
BusSalesOrderModel busSalesOrderModel = baseMapper.selectByOrderSid(busSalesOrder.getSid());
BusSalesOrderPrice busSalesOrderPrice = baseMapper.selectByPrices(busSalesOrder.getSid());
FinCompanyInvoicingDetailsVo finCompanyInvoicingDetailsVo = finCompanyInvoicingService.fetchDetailsVoBySid(dto.getOpenTickSid());
if (!dto.getOpenTickSid().equals(busSalesOrder.getAffiliatedCompanySid())) {
//生成开票申请书
if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingService.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
map.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
map.put("contractNo", busSalesOrder.getContractNo());
List<BillFileVo> list = new ArrayList<>();
BillFileVo billFileVo = new BillFileVo();
if (busSalesOrderModel != null) {
billFileVo.setCarName(busSalesOrderModel.getModelName());
billFileVo.setNum(String.valueOf(finBillVehicles.size()));
billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString());
}
if (loanSolutions != null) {
if (StringUtils.isNotBlank(loanSolutions.getMainVehicleAmount())) {
billFileVo.setOpenPrice(loanSolutions.getMainVehicleAmount());
}
}
billFileVo.setType(busSalesOrder.getBillingType());
list.add(billFileVo);
List<FinBillTrailerDto> finBillTrailers = dto.getFinBillTrailers();
finBillTrailers.removeAll(Collections.singleton(null));
Map<String, Object> carNameMap = new HashMap<>();
if (!finBillTrailers.isEmpty()) {
for (int i = 0; i < finBillTrailers.size(); i++) {
FinBillTrailerDto finBillTrailerDto = finBillTrailers.get(i);
billFileVo = new BillFileVo();
BaseTrailer baseTrailer = baseMapper.selectByTrailerNo(finBillTrailerDto.getGcVinNo());
if (baseTrailer != null) {
BaseTrailerModel baseTrailerModel = baseMapper.selectByModelSid(baseTrailer.getTrailerModelSid());
if (baseTrailerModel != null) {
String carName = "外廓-" + Integer.parseInt(baseTrailerModel.getAppearanceSizeLong()) / 1000 + "米" + "\t" + baseTrailerModel.getTrailerTypeValue();
if (carNameMap.containsKey(carName)) {
carNameMap.put(carName, Integer.parseInt(carNameMap.get(carName).toString()) + 1);
continue;
} else {
billFileVo.setType(busSalesOrder.getBillingType());
if (loanSolutions != null) {
if (StringUtils.isNotBlank(loanSolutions.getMainVehicleAmount())) {
billFileVo.setOpenPrice(loanSolutions.getMainVehicleAmount());
}
}
billFileVo.setCarName(carName);
if (busSalesOrderModel != null) {
billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString());
}
carNameMap.put(carName, 1);
list.add(billFileVo);
}
}
}
}
}
if (!list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
BillFileVo billFileVo1 = list.get(i);
String carName = billFileVo1.getCarName();
if (carNameMap.containsKey(carName)) {
billFileVo1.setNum(carNameMap.get(carName).toString());
}
}
}
map.put("list", list);
map.put("name",busSalesOrder.getAffiliatedCompany());
String date = DateUtil.today();
List<String> dateString = Arrays.asList(date.split("-"));
String year = dateString.get(0);
String month = dateString.get(1);
String day = dateString.get(2);
map.put("year", year);
map.put("month", month);
map.put("day", day);
if (!"02".equals(dto.getOpenTickTypeKey())) {
if (finCompanyInvoicingDetailsVo != null) {
//生成车辆登记合同
if (busSalesOrder != null) {
carMap.put("Yf", busSalesOrder.getCustomerName());
carMap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称
}
carMap.put("contractNo", "D" + map.get("contractNo"));
if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingService.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
carMap.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
carMap.put("date", date);
List<CarContractListVo> carContractListVos = new ArrayList<>();
for (FinBillVehicleDto salesOrderVehicle : finBillVehicles) {
CarContractListVo carContractListVo = new CarContractListVo();
BaseVehicle baseVehicle = baseMapper.selectByVinSid(salesOrderVehicle.getVehSid());
carContractListVo.setBrand(baseVehicle.getModelName());
carContractListVo.setVinNo(baseVehicle.getVinNo());
carContractListVo.setEnginNo(baseVehicle.getEngineNo());
carContractListVos.add(carContractListVo);
}
carMap.put("carLists", carContractListVos);
}
}
}
if (loanSolutions != null) {
if (!dto.getOneBillMoney().equals(loanSolutions.getMainVehicleAmount())) {
//生成新车空白合同
filemap.put("totalPrice", "");
filemap.put("priceRemarks", "");
filemap.put("depositTotal", "");
String remarks = "";
String date = DateUtil.today();
List<String> dateString = Arrays.asList(date.split("-"));
String year = dateString.get(0);
String month = dateString.get(1);
String day = dateString.get(2);
filemap.put("year", year);
filemap.put("month", month);
filemap.put("day", day);
if (finCompanyInvoicingDetailsVo != null) {
filemap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("customerName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("invoiceNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("idNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("adds", finCompanyInvoicingDetailsVo.getAddress());//户籍地址
}else{
CrmCustomerTemp crmCustomerTemp = baseMapper.selectByCustomerSid(dto.getOpenTickSid());
if (crmCustomerTemp != null) {
filemap.put("invoiceName", crmCustomerTemp.getName());//开票名称
filemap.put("customerName", crmCustomerTemp.getName());//开票名称
filemap.put("invoiceNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("idNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("adds", crmCustomerTemp.getCertificateAddress());//户籍地址
}
}
filemap.put("invoiceType", dto.getOpenTickTypeValue());//开票类型
filemap.put("createOrgName", "");
remarks = "数量" + finBillVehicles.size() + "台,单台成交价: 元。";
filemap.put("remarks", remarks);
filemap.put("busSid",busSalesOrder.getSid());
ResultBean<Map<String,Object>> mapResultBean = commonContractFeign.getModelMap(filemap);
checkMap = mapResultBean.getData();
}
}
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(1, 2,
1000, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
List<File> filesList = new ArrayList<>();
if(!map.isEmpty()){
Future<String> future1 = pool.submit(() -> {
return getInvoiceApplyFile(map);
});
if (StringUtils.isNotBlank(future1.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future1.get());
filesList.add(file);
}
}
if(!carMap.isEmpty()){
Future<String> future2 = pool.submit(() -> {
return getCarFile(carMap);
});
if (StringUtils.isNotBlank(future2.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future2.get());
filesList.add(file);
}
}
Map<String, Object> finalCheckMap = checkMap;
if(!finalCheckMap.isEmpty()){
Future<String> future3 = pool.submit(() -> {
return blackFile(finalCheckMap);
});
if (StringUtils.isNotBlank(future3.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future3.get());
filesList.add(file);
}
}
if (filesList.size() > 0) {
String typeName = contractNo + "开票附件.pdf";
File allFile = WordConvertUtils.mulFile2One(filesList, docPdfComponent.getUploadTemplateUrl() + typeName);
System.out.println("-========" + docPdfComponent.getUploadTemplateUrl() + typeName);
fileUrl =typeName;
}
} catch (Exception e) {
e.printStackTrace();
log.error("生成文件失败:==========================" + e.getMessage());
}
return fileUrl;
}
public String blackFile(Map<String, Object> map) {
String ftl = "dai_existingvehicles_black";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成合同文件名
String pdfName = map.get("contractNo").toString() + "贷款新车买卖空白合同_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public String getInvoiceApplyFile(Map<String, Object> map) {
String ftl = "invoiceApply";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成文件名
String pdfName = map.get("contractNo").toString() + "开票申请书_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public String getCarFile(Map<String, Object> map) {
String ftl = "carContract";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成合同文件名
String pdfName = map.get("contractNo").toString() + "车辆登记合同_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public void insertByDto(FinBillApplicationDto dto) {
FinBillApplication entity = new FinBillApplication();
BeanUtil.copyProperties(dto, entity, "id", "sid");
@ -677,6 +970,10 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
}
FinBillApplication entity = fetchBySid(dtoSid);
BeanUtil.copyProperties(dto, entity, "id", "sid");
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
entity.setFileUrl(fileUrl);
}
baseMapper.updateById(entity);
}
@ -2001,6 +2298,10 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
//计算开票金额合计
BigDecimal totalBillMoney = oneBillMoney.multiply(new BigDecimal(finBillVehicles.size()));
finBillApplication.setTotalBillMoney(totalBillMoney);
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
finBillApplication.setFileUrl(fileUrl);
}
save(finBillApplication);
//主车开票信息
for (FinBillVehicleDto finBillVehicleDto : finBillVehicles) {

1545
anrui-fin/anrui-fin-biz/src/main/resources/ftl/carContract.ftl

File diff suppressed because it is too large

2891
anrui-fin/anrui-fin-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl

File diff suppressed because it is too large

1535
anrui-fin/anrui-fin-biz/src/main/resources/ftl/invoiceApply.ftl

File diff suppressed because it is too large
Loading…
Cancel
Save