diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basemodelconfig/BaseModelConfigFeign.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basemodelconfig/BaseModelConfigFeign.java index c7ea2edc2f..54674e17e2 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basemodelconfig/BaseModelConfigFeign.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basemodelconfig/BaseModelConfigFeign.java @@ -174,5 +174,7 @@ public interface BaseModelConfigFeign { @PostMapping("/getNowConfigList") public ResultBean getNowConfigList(@Valid @RequestBody PagerQuery pagerQuery); - + @ApiOperation("根据sid查询一条") + @GetMapping("/fetchBySid") + ResultBean fetchBySid(@RequestParam("configSid") String configSid); } \ No newline at end of file diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basemodelconfig/BaseModelConfigFeignFallback.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basemodelconfig/BaseModelConfigFeignFallback.java index 8bec12353c..da12fdf5cc 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basemodelconfig/BaseModelConfigFeignFallback.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basemodelconfig/BaseModelConfigFeignFallback.java @@ -129,4 +129,9 @@ public class BaseModelConfigFeignFallback implements BaseModelConfigFeign { public ResultBean getNowConfigList(PagerQuery pagerQuery) { return null; } + + @Override + public ResultBean fetchBySid(String configSid) { + return null; + } } \ No newline at end of file diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclemodel/BaseVehicleModelFeign.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclemodel/BaseVehicleModelFeign.java index 5a65623ece..76eeb6cf04 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclemodel/BaseVehicleModelFeign.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclemodel/BaseVehicleModelFeign.java @@ -224,4 +224,7 @@ public interface BaseVehicleModelFeign { @GetMapping("/getVehModelByCreateOrg") public ResultBean> getVehModelByCreateOrg(@RequestParam("createOrg") String createOrg); + @ApiOperation("根据sid查询一条") + @GetMapping("/fetchBySid") + ResultBean fetchBySid(@RequestParam("modelSid") String modelSid); } \ No newline at end of file diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclemodel/BaseVehicleModelFeignFallback.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclemodel/BaseVehicleModelFeignFallback.java index 815a781e1f..054d0dc97c 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclemodel/BaseVehicleModelFeignFallback.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehiclemodel/BaseVehicleModelFeignFallback.java @@ -130,6 +130,11 @@ public class BaseVehicleModelFeignFallback implements BaseVehicleModelFeign { return null; } + @Override + public ResultBean fetchBySid(String modelSid) { + return null; + } + /*@Override public ResultBean> selectPage(PagerQuery query) { diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basemodelconfig/BaseModelConfigRest.java b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basemodelconfig/BaseModelConfigRest.java index dbc1eb58c1..7369b9b64a 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basemodelconfig/BaseModelConfigRest.java +++ b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basemodelconfig/BaseModelConfigRest.java @@ -589,4 +589,11 @@ public class BaseModelConfigRest implements BaseModelConfigFeign { ModelConfigVo vo = baseModelConfigService.getNowConfigList(pagerQuery); return rb.success().setData(vo); } + + @Override + public ResultBean fetchBySid(String configSid) { + ResultBean rb = ResultBean.fireFail(); + BaseModelConfig baseModelConfig = baseModelConfigService.fetchBySid(configSid); + return rb.success().setData(baseModelConfig); + } } diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehiclemodel/BaseVehicleModelRest.java b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehiclemodel/BaseVehicleModelRest.java index 237a60e13f..962585e7b2 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehiclemodel/BaseVehicleModelRest.java +++ b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehiclemodel/BaseVehicleModelRest.java @@ -21,6 +21,7 @@ import com.yxt.common.core.result.FileUploadResult; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import io.swagger.annotations.Api; +import jdk.nashorn.internal.objects.AccessorPropertyDescriptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -340,6 +341,13 @@ public class BaseVehicleModelRest implements BaseVehicleModelFeign { return baseVehicleModelService.getVehModelByCreateOrg(createOrg); } + @Override + public ResultBean fetchBySid(String modelSid) { + ResultBean rb = ResultBean.fireFail(); + BaseVehicleModel baseVehicleModel = baseVehicleModelService.fetchBySid(modelSid); + return rb.success().setData(baseVehicleModel); + } + // @Override // public ResultBean> selectPage(PagerQuery query) { diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java index debeee63a8..74a0cb231b 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java +++ b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java @@ -921,7 +921,7 @@ public class CommonContractService extends MybatisBaseService selectByBusVinSid(@RequestParam("busVinSid") String busVinSid); + + @ApiOperation("根据销售订单车辆sid查询已审核订金总和") + @PostMapping("/selectDjByBusVinSid") + ResultBean selectDjByBusVinSid(@RequestParam("busVinSid") String busVinSid); } diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedFeignFallback.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedFeignFallback.java index 44cc3b5e43..152b299fd3 100644 --- a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedFeignFallback.java +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedFeignFallback.java @@ -151,4 +151,9 @@ public class FinUncollectedReceivablesDetailedFeignFallback implements FinUncoll return null; } + @Override + public ResultBean selectDjByBusVinSid(String busVinSid) { + return null; + } + } diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.java index 783983beb8..da2570e869 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.java @@ -124,4 +124,6 @@ public interface FinUncollectedReceivablesDetailedMapper extends BaseMapper selectPageVo2(IPage page, @Param(Constants.WRAPPER)QueryWrapper qw); List exportExcel( @Param(Constants.WRAPPER) QueryWrapper qw); + + String selectDjByBusVinSid(String busVinSid); } diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml index 0580f943cf..4b67e7da94 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedMapper.xml @@ -617,4 +617,15 @@ ${ew.sqlSegment} + + diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedRest.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedRest.java index 02e7bf04cf..200ab90240 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedRest.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedRest.java @@ -192,6 +192,11 @@ public class FinUncollectedReceivablesDetailedRest implements FinUncollectedRece return finUncollectedReceivablesDetailedService.selectOtherReceivableMoneyByBusVinSid(busVinSid); } + @Override + public ResultBean selectDjByBusVinSid(String busVinSid) { + return finUncollectedReceivablesDetailedService.selectDjByBusVinSid(busVinSid); + } + @Override public ResultBean> selectByContractNo(String contractNo) { diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedService.java index a708e0abdc..99d981b1d3 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedService.java @@ -1222,4 +1222,9 @@ public class FinUncollectedReceivablesDetailedService extends MybatisBaseService } + public ResultBean selectDjByBusVinSid(String busVinSid) { + ResultBean rb = ResultBean.fireFail(); + String djTotal = baseMapper.selectDjByBusVinSid(busVinSid); + return rb.success().setData(djTotal); + } } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java index b983c33238..b0ecaa0786 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java @@ -29,6 +29,8 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.yxt.anrui.base.api.basemodelconfig.BaseModelConfig; import com.yxt.anrui.base.api.basemodelconfig.BaseModelConfigFeign; import com.yxt.anrui.base.api.basemodelconfig.BaseModelConfigSelectVo; import com.yxt.anrui.base.api.basetrailer.BaseTrailer; @@ -38,14 +40,17 @@ import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModelDetailsVo; import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModelFeign; import com.yxt.anrui.base.api.basevehicle.BaseVehicle; import com.yxt.anrui.base.api.basevehicle.BaseVehicleFeign; +import com.yxt.anrui.base.api.basevehiclemodel.BaseVehicleModel; +import com.yxt.anrui.base.api.basevehiclemodel.BaseVehicleModelFeign; import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleStateDto; import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleStateEnum; import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleStateFeign; import com.yxt.anrui.base.api.commoncontract.*; +import com.yxt.anrui.buscenter.api.busdepositfictitious.BusDepositFictitiousDetailsVo; +import com.yxt.anrui.buscenter.api.busdepositfictitious.BusDepositFictitiousFeign; import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder; import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderFeign; -import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderDetailsVo; -import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderTopInfoVo; +import com.yxt.anrui.buscenter.api.bussalesorder.app.order.*; import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerDetailsVo; import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerFeign; import com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusSalesOrderLoancontract; @@ -59,14 +64,18 @@ import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModelFeign; import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice; import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPriceFeign; import com.yxt.anrui.buscenter.api.bussalesorderprice.app.AppBusSalesOrderPriceVo; +import com.yxt.anrui.buscenter.api.bussalesordertrailer.BusSalesOrderTrailerDetailsVo; +import com.yxt.anrui.buscenter.api.bussalesordertrailer.BusSalesOrderTrailerFeign; import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle; import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicleFeign; 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.FinBillApplicationDetailsVo; import com.yxt.anrui.fin.api.finbillapplication.FinBillApplicationFeign; import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingDetailsVo; import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingFeign; +import com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedFeign; import com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoice; import com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoiceFeign; import com.yxt.anrui.portal.api.sysuser.PrivilegeQuery; @@ -101,6 +110,7 @@ import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; +import org.apache.tomcat.util.threads.ThreadPoolExecutor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -109,6 +119,7 @@ import java.io.InputStream; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.*; +import java.util.concurrent.*; import static cn.hutool.json.XMLTokener.entity; @@ -161,9 +172,7 @@ public class LoanHomevisitPrepService extends MybatisBaseService listPageVo(PagerQuery pq) { LoanHomevisitPrepQuery query = pq.getParams(); @@ -456,19 +469,19 @@ public class LoanHomevisitPrepService extends MybatisBaseService filesList = new ArrayList<>(); //贷款车辆买卖合同 - List dkclmmhts = dkclmmht(printConfirmDto, conSetUpKey); + List dkclmmhts = clmmContract(printConfirmDto, conSetUpKey); //生成车辆融资协议 - List clrzxyUrls = generateCLRZXY(printConfirmDto, conSetUpKey); + /* List clrzxyUrls = generateCLRZXY(printConfirmDto, conSetUpKey); //生成还款协议 List hkxyUrls = hkxy(printConfirmDto, conSetUpKey); //代管车辆委托书 - List dgclwtsUrls = dgclwts(printConfirmDto, conSetUpKey); + List dgclwtsUrls = dgclwts(printConfirmDto, conSetUpKey);*/ //判断是否为高低开 BusSalesOrderPrice data = busSalesOrderFeign.selectByContractNoOne(printConfirmDto.getContractNo()).getData(); //查询金融方案 SolutionsDetailsVo solutionsDetailsVo = loanSolutionsService.selectDetails(busSalesOrder.getSid()).getData(); //判断是否为高低开,若是则生成开票申请书 - List kpsqsUrls = new ArrayList<>(); + /*List kpsqsUrls = new ArrayList<>(); if (!data.getSingleFinalPrice().equals(solutionsDetailsVo.getMainVehicleAmount())) { //开票申请书 kpsqsUrls = kpsqs(printConfirmDto, conSetUpKey); @@ -495,14 +508,14 @@ public class LoanHomevisitPrepService extends MybatisBaseService 0) { for (String dkclmmht : dkclmmhts) { File file = new File(docPdfComponent.getUploadTemplateUrl() + dkclmmht); filesList.add(file); } } - if (clrzxyUrls != null && clrzxyUrls.size() > 0) { + /*if (clrzxyUrls != null && clrzxyUrls.size() > 0) { for (String clrzxyUrl : clrzxyUrls) { File file = new File(docPdfComponent.getUploadTemplateUrl() + clrzxyUrl); filesList.add(file); @@ -555,7 +568,7 @@ public class LoanHomevisitPrepService extends MybatisBaseService 0) { String dateStr = DateUtil.format(new Date(), "yyyyMMdd"); @@ -1201,6 +1214,421 @@ public class LoanHomevisitPrepService extends MybatisBaseService clmmContract(PrintConfirmDto dto, String conSetUpKey) { + Map map = new HashMap<>(); + //查询销售订单的信息 + ResultBean resultBean = busSalesOrderFeign.getSaleOrderDetails(dto.getBusSid()); + AppOrderDetailsVo appOrderDetailsVo = resultBean.getData(); + //获取车辆信息 + List salesOrderVehicles = dto.getSalesOrderVehicles(); + //获取采购系统、分公司对应的开票信息 + FinCompanyInvoicingDetailsVo finCompanyInvoicingDetailsVo = finCompanyInvoicingFeign.getDetailsBySystem(appOrderDetailsVo.getPurchaseSystemSid()).getData(); + //甲方 + map.put("jf", finCompanyInvoicingDetailsVo.getName()); + //乙方 + map.put("yf", salesOrderVehicles.get(0).getBorrowName()); + //获取贷款人信息 + BusSalesOrderBorrowerDetailsVo busSalesOrderBorrowerDetailsVo = busSalesOrderBorrowerFeign.fetchDetailsBySid(salesOrderVehicles.get(0).getBorrowerSid()).getData(); + //获取贷款人客户信息 + CrmCustomerTemp crmCustomerTemp = crmCustomerTempFeign.fetchEntity(busSalesOrderBorrowerDetailsVo.getCustomSid()).getData(); + //乙方身份证号 + map.put("yfID", crmCustomerTemp.getIDNumber()); + //地址 + LoanHomevisitInvestigateCustomerDetailsVo loanHomevisitInvestigateCustomerDetailsVo = loanHomevisitInvestigateCustomerService.fetchByBorrowerSid(salesOrderVehicles.get(0).getBorrowerSid()); + map.put("qdAddress", loanHomevisitInvestigateCustomerDetailsVo.getBorrowerDomAddress()); + //电话 + map.put("phone", crmCustomerTemp.getMobile()); + //查询销售订单的车型信息 + AppOrderModelInfoVo appOrderModelInfoVo = appOrderDetailsVo.getModelInfo(); + //根据车型sid查询车型的全称 + BaseVehicleModel baseVehicleModel = baseVehicleModelFeign.fetchBySid(appOrderModelInfoVo.getModelSid()).getData(); + BaseModelConfig baseModelConfig = baseModelConfigFeign.fetchBySid(appOrderModelInfoVo.getConfigSid()).getData(); + 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").append(" "); + //驾驶室 + 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 + "。"; + //上装:外廓尺寸+颜色+上装名称、板材厚度、板材材质、篷布滑道、冷藏冷机、自卸液压盖板、底板加热、更多配置 + if (appOrderDetailsVo.getTopInfo() != null) { + AppOrderTopInfoVo topInfo = appOrderDetailsVo.getTopInfo(); + String topName = appOrderDetailsVo.getTopMessage(); + topName = "上装:制造尺寸与公告一致、" + topName + "。"; + map.put("topName", topName); + } + map.put("modelConfigs", modelAllName2.toString()); + map.put("modelName", modelName); + map.put("modelConfig", modelConfig); + if ("1".equals(appOrderDetailsVo.getIsInsurance())) { + //保险说明 + String insuranceInfo = "保险说明:" + appOrderDetailsVo.getInsuranceInfoMessage() + "。"; + map.put("insuranceInfo", insuranceInfo); + } + //查询是否有公告型号 + 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 + "。"); + } + } + //查询销售订单价格信息 + AppBusSalesOrderPriceVo appBusSalesOrderPriceVo = busSalesOrderPriceFeign.getPriceInfo(dto.getBusSid()).getData(); + //车辆交付地点 + if (StringUtils.isNotBlank(appBusSalesOrderPriceVo.getAddressKey())) { + ScmWarehouseVo scmWarehouseVo = scmWarehouseFeign.fetchBySid(appBusSalesOrderPriceVo.getAddressKey()).getData(); + if (StringUtils.isNotBlank(scmWarehouseVo.getCity()) && StringUtils.isNotBlank(scmWarehouseVo.getCounty())) { + map.put("address", scmWarehouseVo.getCity() + scmWarehouseVo.getCounty()); + } else { + map.put("address", "暂无市、区/县"); + } + } else { + map.put("address", "暂无预计交付地点"); + } + //合同生成日期 + String date = DateUtil.today(); + List 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); + List urls = new ArrayList<>(); + if (conSetUpKey.equals("001")) {//一车一合同 + for (SalesOrderVehicle salesOrderVehicle : salesOrderVehicles) { + //获取消贷合同信息 + BusSalesOrderLoancontractDetailsVo busSalesOrderLoancontractDetailsVo = busSalesOrderLoancontractFeign.fetchDetailsBySid(salesOrderVehicle.getLoanContractSid()).getData(); + //消贷合同编号 + map.put("loanContractNo", busSalesOrderLoancontractDetailsVo.getLoanContractNo()); + //单台成交价 + String transactionPrice = appBusSalesOrderPriceVo.getTransactionPrice(); + //车辆数量及单台成交价 + String remarks = "数量:1台,单台成交价:" + transactionPrice + "元。"; + map.put("remarks", remarks); + //车架号 + map.put("vinNo", "车架号:" + salesOrderVehicle.getLinkNo()); + // 挂车信息 + List data = busSalesOrderTrailerFeign.fetchDetailsByOrderSid(dto.getBusSid()).getData(); + if (data.size() == 1) { + map.put("trailerName1", "挂车:外廓尺寸-长" + data.get(0).getAppearanceSizeLong() + "m," + data.get(0).getTrailerTypeValue() + "。"); + map.put("trailerNumAndPrice1", "数量:" + data.get(0).getTrailerCount() + "台,单台成交价:" + data.get(0).getSingleFinalPrice() + "元。"); + //单台主车对应挂车总价 + BigDecimal gcPrice = data.get(0).getSingleFinalPrice().multiply(new BigDecimal(data.get(0).getTrailerCount())); + //单台主车加挂车总价 + BigDecimal zcPrice = new BigDecimal(appBusSalesOrderPriceVo.getTransactionPrice()).add(gcPrice); + //主车总价 + BigDecimal totalPrice = zcPrice.multiply(new BigDecimal(appBusSalesOrderPriceVo.getNumber())); + //车价合计 + map.put("totalPrice", totalPrice.toString()); + //车价合计大写 + String priceRemarks = ""; + if (StringUtils.isNotBlank(totalPrice.toString())) { + priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice.toString()).doubleValue())); + } + map.put("priceRemarks", priceRemarks); + } else if (data.size() == 2) { + map.put("trailerName1", "挂车1:外廓尺寸-长" + data.get(0).getAppearanceSizeLong() + "m," + data.get(0).getTrailerTypeValue() + "。"); + map.put("trailerNumAndPrice1", "数量:" + data.get(0).getTrailerCount() + "台,单台成交价:" + data.get(0).getSingleFinalPrice() + "元。"); + map.put("trailerName2", "挂车2:外廓尺寸-长" + data.get(1).getAppearanceSizeLong() + "m," + data.get(1).getTrailerTypeValue() + "。"); + map.put("trailerNumAndPrice2", "数量:" + data.get(1).getTrailerCount() + "台,单台成交价:" + data.get(1).getSingleFinalPrice() + "元。"); + //单台主车对应挂车1总价 + BigDecimal gc1Price = data.get(0).getSingleFinalPrice().multiply(new BigDecimal(data.get(0).getTrailerCount())); + //单台主车对应挂车2总价 + BigDecimal gc2Price = data.get(1).getSingleFinalPrice().multiply(new BigDecimal(data.get(1).getTrailerCount())); + //单台主车加挂车总价 + BigDecimal zcPrice = new BigDecimal(appBusSalesOrderPriceVo.getTransactionPrice()).add(gc1Price).add(gc2Price); + //主车总价 + BigDecimal totalPrice = zcPrice.multiply(new BigDecimal(appBusSalesOrderPriceVo.getNumber())); + //车价合计 + map.put("totalPrice", totalPrice.toString()); + //车价合计大写 + String priceRemarks = ""; + if (StringUtils.isNotBlank(totalPrice.toString())) { + priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice.toString()).doubleValue())); + } + map.put("priceRemarks", priceRemarks); + } else { + //主车总价 + BigDecimal totalPrice = new BigDecimal(appBusSalesOrderPriceVo.getTransactionPrice()).multiply(new BigDecimal(appBusSalesOrderPriceVo.getNumber())); + //车价合计 + map.put("totalPrice", totalPrice.toString()); + //车价合计大写 + String priceRemarks = ""; + if (StringUtils.isNotBlank(totalPrice.toString())) { + priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice.toString()).doubleValue())); + } + map.put("priceRemarks", priceRemarks); + } + //订金 + BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.selectByNoAndVinSid(appOrderDetailsVo.getContractId(), salesOrderVehicle.getLinkSid()).getData(); + String djTotal = finUncollectedReceivablesDetailedFeign.selectDjByBusVinSid(busSalesOrderVehicle.getSid()).getData(); + map.put("depositTotal", djTotal); + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + "clmmht" + ".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 + "clmmht" + 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("loanContractNo").toString() + "车辆买卖合同_" + dateStr + seconds + ".pdf"; + WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName); + urls.add(pdfName); + } + } else if (conSetUpKey.equals("002")) {//一人一合同 + //获取消贷合同信息 + BusSalesOrderLoancontractDetailsVo busSalesOrderLoancontractDetailsVo = busSalesOrderLoancontractFeign.fetchDetailsBySid(salesOrderVehicles.get(0).getLoanContractSid()).getData(); + //消贷合同编号 + map.put("loanContractNo", busSalesOrderLoancontractDetailsVo.getLoanContractNo()); + //车辆总数 + BigDecimal num = new BigDecimal(salesOrderVehicles.size()); + //单台成交价 + String transactionPrice = appBusSalesOrderPriceVo.getTransactionPrice(); + //车辆数量及单台成交价 + String remarks = "数量:" + num + "台,单台成交价:" + transactionPrice + "元。"; + map.put("remarks", remarks); + //车架号 + String vinNo = ""; + //订金 + BigDecimal djTotal = new BigDecimal("0"); + for (SalesOrderVehicle salesOrderVehicle : salesOrderVehicles) { + vinNo = vinNo + salesOrderVehicle.getLinkNo() + "、"; + BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.selectByNoAndVinSid(appOrderDetailsVo.getContractId(), salesOrderVehicle.getLinkSid()).getData(); + String dtdjTotal = finUncollectedReceivablesDetailedFeign.selectDjByBusVinSid(busSalesOrderVehicle.getSid()).getData(); + djTotal = djTotal.add(new BigDecimal(dtdjTotal)); + } + map.put("vinNo", "车架号:" + vinNo.substring(0, vinNo.length() - 1)); + map.put("depositTotal", djTotal.toString()); + // 挂车信息 + List data = busSalesOrderTrailerFeign.fetchDetailsByOrderSid(dto.getBusSid()).getData(); + if (data.size() == 1) { + map.put("trailerName1", "挂车:外廓尺寸-长" + data.get(0).getAppearanceSizeLong() + "m," + data.get(0).getTrailerTypeValue() + "。"); + map.put("trailerNumAndPrice1", "数量:" + new BigDecimal(data.get(0).getTrailerCount()).multiply(num) + "台,单台成交价:" + data.get(0).getSingleFinalPrice() + "元。"); + //单台主车对应挂车总价 + BigDecimal gcPrice = data.get(0).getSingleFinalPrice().multiply(new BigDecimal(data.get(0).getTrailerCount())); + //单台主车加挂车总价 + BigDecimal zcPrice = new BigDecimal(appBusSalesOrderPriceVo.getTransactionPrice()).add(gcPrice); + //单台主车总价 + BigDecimal dtTotalPrice = zcPrice.multiply(new BigDecimal(appBusSalesOrderPriceVo.getNumber())); + //总数合计 + BigDecimal totalPrice = dtTotalPrice.multiply(num); + //车价总数合计 + map.put("totalPrice", totalPrice.toString()); + //车价合计大写 + String priceRemarks = ""; + if (StringUtils.isNotBlank(totalPrice.toString())) { + priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice.toString()).doubleValue())); + } + map.put("priceRemarks", priceRemarks); + } else if (data.size() == 2) { + map.put("trailerName1", "挂车1:外廓尺寸-长" + data.get(0).getAppearanceSizeLong() + "m," + data.get(0).getTrailerTypeValue() + "。"); + map.put("trailerNumAndPrice1", "数量:" + new BigDecimal(data.get(0).getTrailerCount()).multiply(num) + "台,单台成交价:" + data.get(0).getSingleFinalPrice() + "元。"); + map.put("trailerName2", "挂车2:外廓尺寸-长" + data.get(1).getAppearanceSizeLong() + "m," + data.get(1).getTrailerTypeValue() + "。"); + map.put("trailerNumAndPrice2", "数量:" + new BigDecimal(data.get(1).getTrailerCount()).multiply(num) + "台,单台成交价:" + data.get(1).getSingleFinalPrice() + "元。"); + //单台主车对应挂车1总价 + BigDecimal gc1Price = data.get(0).getSingleFinalPrice().multiply(new BigDecimal(data.get(0).getTrailerCount())); + //单台主车对应挂车2总价 + BigDecimal gc2Price = data.get(1).getSingleFinalPrice().multiply(new BigDecimal(data.get(1).getTrailerCount())); + //单台主车加挂车总价 + BigDecimal zcPrice = new BigDecimal(appBusSalesOrderPriceVo.getTransactionPrice()).add(gc1Price).add(gc2Price); + //单台主车总价 + BigDecimal dtTotalPrice = zcPrice.multiply(new BigDecimal(appBusSalesOrderPriceVo.getNumber())); + //总数合计 + BigDecimal totalPrice = dtTotalPrice.multiply(num); + //车价合计 + map.put("totalPrice", totalPrice.toString()); + //车价合计大写 + String priceRemarks = ""; + if (StringUtils.isNotBlank(totalPrice.toString())) { + priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice.toString()).doubleValue())); + } + map.put("priceRemarks", priceRemarks); + } else { + //主车总价 + BigDecimal dtTotalPrice = new BigDecimal(appBusSalesOrderPriceVo.getTransactionPrice()).multiply(new BigDecimal(appBusSalesOrderPriceVo.getNumber())); + //总数合计 + BigDecimal totalPrice = dtTotalPrice.multiply(num); + //车价合计 + map.put("totalPrice", totalPrice.toString()); + //车价合计大写 + String priceRemarks = ""; + if (StringUtils.isNotBlank(totalPrice.toString())) { + priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice.toString()).doubleValue())); + } + map.put("priceRemarks", priceRemarks); + } + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + "clmmht" + ".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 + "clmmht" + 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("loanContractNo").toString() + "车辆买卖合同_" + dateStr + seconds + ".pdf"; + WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName); + urls.add(pdfName); + } + return urls; + } + public List generateCLRZXY(PrintConfirmDto printConfirmDto, String conSetUpKey) { Map map = new HashMap<>(); List salesOrderVehicles = printConfirmDto.getSalesOrderVehicles(); diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/clmmht.ftl b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/clmmht.ftl index 36bf56284e..fd98f5aeb2 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/clmmht.ftl +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/clmmht.ftl @@ -1,3690 +1,2738 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 车辆买卖合同 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 甲方: - - - - - - - - - - ${jf!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 乙方: - - - - - - - - - - ${yf!} - - - - - - - - 身份证号: - - - - - - - - - - ${yfID!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 签订日期: - - - - - - - - - - ${qdDate!} - - - - - - - - - - - - - - - - - 签订地点: - - - - - - - - - - ${qdAddress!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 乙方购买甲方车辆。本合同双方当事人本着自愿、平等原则,经充分协商,签订本合同,以共同遵守。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 第一条 - - - - - - - - - - - - - - - - 车辆价款及支付 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1、车辆价款 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 品牌/名称 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 数量(辆) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 单价(元) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${modelName!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${num!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${money!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 总价款 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${moneyTotal!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 大 写 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${moneyTotalDx!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2、车辆价款支付 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 乙方应予本合同签订后3日内向甲方支付 - - - - - - - - - - ${zf!} - - - - - - - - 元,剩余 - - - - - - - - - - ${sy!} - - - - - - - - 元乙方通过办理车辆融资支付。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3、乙方选择车辆融资方式支付车辆价款,无论何种原因,自标的车辆交付之日起六十日内甲方未能收到乙方融资款,视为乙方不再办理融资,乙方全款购买标的车辆,支付全部车辆价款。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 第二条 标的物 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标的物具体信息见《接收车辆确认书》。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 第三条 标的车辆交付与验收 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1、乙方自行到甲方指定地点接收车辆。乙方收到车辆时,乙方应签署《接收车辆确认书》。 - - - - - - - - - 《接收车辆确认书》系乙方收到标的车辆的凭证。甲方特别提醒乙方注意:如未收到车辆请勿签署。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2、如乙方委托第三人接收车辆,乙方应出具《接收车辆委托书》。受托人持身份证接收车辆,并签署《接收车辆确认书》。乙方承担受托人接收标的车辆及对标的车辆进行验收的法律后果。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3、 - - - - - - - - 标的车辆质量标准按厂家标准执行。标的车辆保修按照国家规定执行。乙方在收到车辆后应对车辆的质量进行验收,如有异议当场提出,并在《接收车辆确认书》予以记载或拒收标的车辆。其他隐蔽质量问题,乙方在收到车辆后四十八小时内或者在办理车辆牌照前(以先到者为准)向甲方书面提出,否则视为乙方无异议。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 第四条 风险承担 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 乙方接收车辆后,标的车辆毁损或造成第三人损失的责任由乙方承担。标的车辆在使用过程中出现故障,乙方应通过合法途径对车辆故障进行检测,根据检测结果进行处理。乙方不得以车辆质量或故障问题干扰甲方的正常经营。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 第五条 所有权保留 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 乙方付清全部车辆价款前,标的车辆所有权归甲方所有。乙方付清全部车辆价款后,所有权转移至乙方。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 第六条 车辆登记 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 乙方选择将标的车辆登记在挂靠公司名下,乙方同意甲方将车辆发票开至挂靠公司名下。标的车辆登记在挂靠公司名下,系准予上路行驶的登记,不是所有权登记。乙方与挂靠公司之间权利义务由其双方自行约定,但不得损害甲方的利益。乙方与挂靠公司签订的挂靠合同内容与本合同不一致的,以本合同约定为准。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 第七条 争议解决 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 本合同项下发生的争议双方协商解决。如果协商不成,双方均可向合同载明的签订地人民法院提起诉讼解决。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 第八条 合同生效 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 本合同自各方当事人签字或盖章完毕之日起生效。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 特别提示:本合同系各方当事人协商确定 - - - - - - - - - ,甲方提请 - - - - - - - - - 各方当事人 - - - - - - - - - 详细阅读所有条款并充分理解其含义及其法律后果,尤其是关于双方权利义务和管辖条款的约定 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 如有不明条款或其他约定可在下列补充条款中予以补充约定。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 补充条款: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 如对所有条款的含义及相应的法律后果 - - - - - - - - - 全部知晓并充分理解 - - - - - - - - - 后签署本合同。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 甲方(盖章): 乙方(签名按手印): - - - - - - - - - - - - - - - - - - - CHINA - 1 - 244 - 1391 - 11 - 3 - 16 - false - false - 1632 - WPS Office_12.1.0.16250_F1E327BC-269C-435d-A152-05C5408002CA - 0 - - - - - - - 2020-07-29T01:36:00Z - Administrator - WPS_1599826008 - 2020-07-29T01:54:00Z - 2024-02-01T09:28:32Z - 20 - - - - - - - - 2052-12.1.0.16250 - - - 18A28FFC9C6B45C896D5348B7E1585A9_13 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + tianlong ma + 孟哲 底 + 2 + 0 + 2024-02-21T03:50:00Z + 2024-02-21T03:50:00Z + 1 + 176 + 1009 + 8 + 2 + 1183 + 16 + + + 2052-12.1.0.16250 + 6F572EF574EC404788BBCC6BAF8548AB_12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 车辆买卖合同 + + + + + + + + + + + + + + + + + + 合同编号: + + + + + + + + ${loanContractNo!} + + + + + + + + + + + + + + + + + + + + + + + 甲方(出卖方): + + + + + + + + + + + ${jf!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 乙方(买受方): + + + + + + + + + + + ${yf!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 证件号码: + + + + + + + + + + ${yfID!} + + + + + + + + + + + + + + + + + + + + + + + 地址: + + + + + + + + + + + ${qdAddress!} + + + + + + + + + + 联系电话: + + + + + + + + + + ${phone!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 乙方从甲方购买车辆,现将双方权利和义务约定如下: + + + + + + + + + + + + + + + + + + + + + + + 一、 标的车辆基本信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <#if modelName??> + + + + + + + + + + + + + + + + + + + + + ${modelName!} + + + + <#if modelConfig??> + + + + + + + + + + + + + + + + + + + + + ${modelConfig!} + + + + <#if modelConfigs??> + + + + + + + + + + + + + + + + + + + + + ${modelConfigs!} + + + + <#if publicModel??> + + + + + + + + + + + + + + + + + + + + + ${publicModel!} + + + + <#if topName??> + + + + + + + + + + + + + + + + + + + + + ${topName!} + + + + <#if remarks??> + + + + + + + + + + + + + + + + + + + + + ${remarks!} + + + + <#if vinNo??> + + + + + + + + + + + + + + + + + + + + + ${vinNo!} + + + + <#if trailerName1??> + + + + + + + + + + + + + + + + + + + + + ${trailerName1!} + + + + + + + + + + + + + + + + + + + + + + + ${trailerNumAndPrice1!} + + + + <#if trailerName2??> + + + + + + + + + + + + + + + + + + + + + ${trailerName2!} + + + + + + + + + + + + + + + + + + + + + + + ${trailerNumAndPrice2!} + + + + <#if discountDetail??> + + + + + + + + + + + + + + + + + + + + + ${discountDetail!} + + + + - - - - - - - - PAGE \* MERGEFORMAT - - - - - - - - - 2 - - + + - + + + + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 编号: - - - - - - - - - - ${loanContractNo!} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + 二、车辆总价款为 + + + + + + + + + + + + + + + + + + + + + + ${totalPrice!} + + + + + + + + + + + + + + + + + + + + + 元(大写 + + + + + + + + + + + ${priceRemarks!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + )。 + + + + + + + + + + + + + + + + + + + + + + 三、乙方在签订合同当日向甲方交纳订金 + + + + + + + + + + + ${depositTotal!} + + + + + + + + + + + + + + + + + + + + + 元,乙方提车时交清全部车款。甲方未收到全款前,车辆所有 + + + + + + + + + + 权归甲方所有 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 四、车辆交 + + + + + + + + + + 付地点 + + + + + + + + + + + + + + + + + + + + + + ${address!} + + + + + + + + + + + + + + + + + + + + + ,乙方自提。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 乙方或乙方授权的提车人提车时需按照合同约定的车辆信息对车况及随车工具进行验 收,验 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 异议的, + + + + + + + + + + 乙方接收车辆 + + + + + + + + + + ,自此,车辆毁损、灭失的风险以及对第三人的侵权责任由乙方 + + + + + + + + + + 承担。乙 + + + + + + + + + + + + + + + + + + + + 提车上路时必须办理车辆临牌和保险,未办理临牌和保险产生的后果全部由乙方承担。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 甲方负责提供车辆合格证及发票 + + + + + + + + + + + ,甲方所提供的发票,不作为乙方支付款项的依据 + + + + + + + + + + + 。由于车 + + + + + + + + + + 辆自身问题等甲方原因导致车辆不能登记上牌的, + + + + + + + + + + + + + + + + + + + 由甲方负 + + + + + + + + + + + + + + + + + + + + 解决;由于乙方未按有关规定时限及时办理车辆登记上牌手续或车辆注册登记所在公司的 + + + + + + + + + + + + + + + + + + + 问题 + + + + + + + + + + + + + + + + + + + + 非甲方原因导致不能办理车辆登记上牌手续的,由乙方自行解决。 + + + + + + + + + + + + + + + + + + + + + + 七、乙方交纳订金后在10日内不提车的,视为乙方单方放 + + + + + + + + + + 弃购车,甲方有权将车辆另行处置,订 + + + + + + + + + + + + + + + + + + + 金不退。 + + + + + + + + + + + + + + + + + + + + 果甲方同意乙方继续履行合同的,有权要求乙方每日按合同总价款的千分之一承担违约金。 + + + + + + + + + + + + + + + + + + + + + + 乙方交纳订金后,因甲方原因导致乙方不能提车的,甲方退还乙方订金,合同终止不再履行 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 八、 + + + + + + + + + + + + + + + + + + + + 合同发生争议协商解决,协商不成向甲方住所地人民法院起诉解决。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 、本协议自双方签字或盖章完毕之日起生效。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 甲方: + + + + + + + + + + + + + + + + + + + + 乙方: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${year!} + + + + + + + + + + + + + + + + + + + + ${month!} + + + + + + + + + + + + + + + + + + + + ${day!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${year!} + + + + + + + + + + + + + + + + + + + + ${month!} + + + + + + + + + + + + + + + + + + + + ${day!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBill.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBill.java index a167218dcf..cecb641c56 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBill.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBill.java @@ -107,4 +107,6 @@ public class AsBusrepairBill extends BaseEntity { private BigDecimal addAmount; @ApiModelProperty("税额") private BigDecimal taxAmount; + @ApiModelProperty("是否外出(1是,2否)") + private String isGoOut; } diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillDetailsVo.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillDetailsVo.java index 59894fe542..228c51dc60 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillDetailsVo.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillDetailsVo.java @@ -30,6 +30,8 @@ public class AsBusrepairBillDetailsVo implements Vo { private String addAmount; @ApiModelProperty("税额") private String taxAmount; + @ApiModelProperty("是否外出(1是,2否)") + private String isGoOut; @ApiModelProperty("厂家补助") private String subsidyAmount; @ApiModelProperty("其他费用") diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillDto.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillDto.java index ed438b89f3..364ea20551 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillDto.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillDto.java @@ -18,6 +18,8 @@ import java.util.List; public class AsBusrepairBillDto implements Dto { private String sid; private String orgPath; + @ApiModelProperty("是否外出(1是,2否)") + private String isGoOut; @ApiModelProperty("应收金额") private String receivableAmount; @ApiModelProperty("工时费") diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillVo.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillVo.java index a3401ec07d..c090986d70 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillVo.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/AsBusrepairBillVo.java @@ -61,7 +61,8 @@ public class AsBusrepairBillVo implements Vo { private String remarks; //备注 @ApiModelProperty("是否需要开发票(是1,否0)") private String isInvoicing; - + @ApiModelProperty("是否外出(1是,2否)") + private String isGoOut; } diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillMapper.xml b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillMapper.xml index 01d09ec9de..42ab1271c1 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillMapper.xml +++ b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillMapper.xml @@ -55,7 +55,8 @@ b.groupName, b.mainRepairers, b.remarks, - i.isInvoicing + i.isInvoicing, + IF(b.isGoOut = 1, '是', '否') as isGoOut FROM as_busrepair_bill AS b LEFT JOIN as_busrepair_bill_vech AS v ON b.sid = v.billSid LEFT JOIN as_busrepair_bill_invoice AS i ON b.sid = i.billSid