diff --git a/anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesordervehicle/BusSalesOrderVehicle.java b/anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesordervehicle/BusSalesOrderVehicle.java index 98bce4bece..19c2adde51 100644 --- a/anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesordervehicle/BusSalesOrderVehicle.java +++ b/anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesordervehicle/BusSalesOrderVehicle.java @@ -93,7 +93,7 @@ public class BusSalesOrderVehicle extends BaseEntity { private String vehMark; @ApiModelProperty("结清申请提交时间") private Date settleApplyDate; - //风控状态(0正常,1交回,2赎回,3转租,4不追偿,5处置损失,6亏损立案,7亏损执行,8亏损结案) + //风控状态(0正常,1交回,2赎回,3转租,4不追偿,5处置损失,6亏损立案,7亏损执行,8亏损结案、9赎回中,10 二次销售中、11转租中) @ApiModelProperty("风控状态") private Integer riskState; //是否生成资金占用费(1生成,0不生成.默认生成,交回后改为不生成,若赎回改为生成) diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java index cd93978036..55a2f2694c 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java @@ -4789,19 +4789,21 @@ public class FinCollectionConfirmationService extends MybatisBaseService> list(@RequestBody PagerQuery pagerQuery); +} diff --git a/anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/carsSoldProfit/CarsSoldProfitFeignFallback.java b/anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/carsSoldProfit/CarsSoldProfitFeignFallback.java new file mode 100644 index 0000000000..50b6278410 --- /dev/null +++ b/anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/carsSoldProfit/CarsSoldProfitFeignFallback.java @@ -0,0 +1,12 @@ +package com.yxt.anrui.reportcenter.api.carsSoldProfit; + +import org.springframework.stereotype.Component; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/5/9 + **/ +@Component +public class CarsSoldProfitFeignFallback { +} diff --git a/anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/carsSoldProfit/CarsSoldProfitQuery.java b/anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/carsSoldProfit/CarsSoldProfitQuery.java new file mode 100644 index 0000000000..8b559bfa3a --- /dev/null +++ b/anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/carsSoldProfit/CarsSoldProfitQuery.java @@ -0,0 +1,25 @@ +package com.yxt.anrui.reportcenter.api.carsSoldProfit; + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/5/9 + **/ +@Data +public class CarsSoldProfitQuery implements Query { + private static final long serialVersionUID = -2577600843922228724L; + @ApiModelProperty("菜单sid") + private String menuSid; + @ApiModelProperty("机构组织全路径") + private String orgSidPath; + @ApiModelProperty("搜索分公司、车架号、车型、排产订单、销售专员") + private String names; + + private String date; + + private String userSid; +} diff --git a/anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/carsSoldProfit/CarsSoldProfitVo.java b/anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/carsSoldProfit/CarsSoldProfitVo.java new file mode 100644 index 0000000000..a31ed77a1d --- /dev/null +++ b/anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/carsSoldProfit/CarsSoldProfitVo.java @@ -0,0 +1,71 @@ +package com.yxt.anrui.reportcenter.api.carsSoldProfit; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/5/9 + **/ +@Data +public class CarsSoldProfitVo { + + @ApiModelProperty("销售专员") + @JsonProperty("seller") + private String staffName; + @ApiModelProperty("客户名称") + @JsonProperty("customer") + private String customerName; + @ApiModelProperty("销售日期") + @JsonProperty("saleTime") + private String saleDate; + @ApiModelProperty("分公司") + @JsonProperty("branch") + private String useOrgName; + @ApiModelProperty("事业部") + private String division; + @ApiModelProperty("车型") + private String model; + + @ApiModelProperty("采购系统") + @JsonProperty("buySystem") + private String purchaseSystemName; + @ApiModelProperty("车架号") + @JsonProperty("vin") + private String vinNo; + + @ApiModelProperty("出库价") + private String exStockPrice; + @ApiModelProperty("预计毛利") + private String expectedMaori; + @ApiModelProperty("返利调整") + private String rebatesAdjust; + @ApiModelProperty("调整后毛利") + private String adjustedMaori; + @ApiModelProperty("厂家结算价") + private String makersSettlementPrice; + @ApiModelProperty("返利合计") + private String rebatesTotal; + @ApiModelProperty("车辆成本") + private String carCost; + @ApiModelProperty("金融服务费") + private String financeServiceCharge; + @ApiModelProperty("中介返利费") + private String mediatorRebatePrice; + @ApiModelProperty("调车费") + private String moveCarPrice; + + @ApiModelProperty("变速箱") + private String gearbox; + @ApiModelProperty("排产订单编号") + private String schedulingId; + + @ApiModelProperty("数据日期") + private String dataTime; + @ApiModelProperty("更新日期") + private String updateTime; + + private String sid; +} diff --git a/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitMapper.java b/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitMapper.java new file mode 100644 index 0000000000..1f43132832 --- /dev/null +++ b/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitMapper.java @@ -0,0 +1,22 @@ +package com.yxt.anrui.reportcenter.biz.carsSoldProfit; + +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.reportcenter.api.carsSoldProfit.CarsSoldProfit; +import com.yxt.anrui.reportcenter.api.carsSoldProfit.CarsSoldProfitVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/5/9 + **/ +@Mapper +public interface CarsSoldProfitMapper extends BaseMapper { + CarsSoldProfit selectByVinSid(String vinSid); + + IPage listPage(IPage page, @Param(Constants.WRAPPER)QueryWrapper qw); +} diff --git a/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitMapper.xml b/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitMapper.xml new file mode 100644 index 0000000000..43fa6c1961 --- /dev/null +++ b/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitMapper.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitRest.java b/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitRest.java new file mode 100644 index 0000000000..64f519a85c --- /dev/null +++ b/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitRest.java @@ -0,0 +1,40 @@ +package com.yxt.anrui.reportcenter.biz.carsSoldProfit; + +import com.yxt.anrui.reportcenter.api.carsSoldProfit.CarsSoldProfitDto; +import com.yxt.anrui.reportcenter.api.carsSoldProfit.CarsSoldProfitFeign; +import com.yxt.anrui.reportcenter.api.carsSoldProfit.CarsSoldProfitQuery; +import com.yxt.anrui.reportcenter.api.carsSoldProfit.CarsSoldProfitVo; +import com.yxt.anrui.reportcenter.api.dailyreport.DailyReportVo; +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/5/9 + **/ +@Api(tags = "车辆利润报表") +@RestController +@RequestMapping("v1/carsSoldProfit") +public class CarsSoldProfitRest implements CarsSoldProfitFeign { + + @Autowired + private CarsSoldProfitService carsSoldProfitService; + + @Override + public ResultBean saveOrUpdate(CarsSoldProfitDto dto) { + return carsSoldProfitService.saveProfit(dto); + } + + @Override + public ResultBean> list(PagerQuery pagerQuery) { + ResultBean rb = ResultBean.fireFail(); + PagerVo pv = carsSoldProfitService.listPage(pagerQuery); + return rb.success().setData(pv); + } +} diff --git a/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitService.java b/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitService.java new file mode 100644 index 0000000000..20c2ac625f --- /dev/null +++ b/anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/carsSoldProfit/CarsSoldProfitService.java @@ -0,0 +1,138 @@ +package com.yxt.anrui.reportcenter.biz.carsSoldProfit; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.yxt.anrui.portal.api.sysuser.PrivilegeQuery; +import com.yxt.anrui.portal.api.sysuser.SysUserFeign; +import com.yxt.anrui.reportcenter.api.carsSoldProfit.CarsSoldProfit; +import com.yxt.anrui.reportcenter.api.carsSoldProfit.CarsSoldProfitDto; +import com.yxt.anrui.reportcenter.api.carsSoldProfit.CarsSoldProfitQuery; +import com.yxt.anrui.reportcenter.api.carsSoldProfit.CarsSoldProfitVo; +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.base.utils.PagerUtil; +import com.yxt.common.base.utils.StringUtils; +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/5/9 + **/ +@Service +public class CarsSoldProfitService extends MybatisBaseService { + + @Autowired + private SysUserFeign sysUserFeign; + + public ResultBean saveProfit(CarsSoldProfitDto dto) { + ResultBean rb = ResultBean.fireFail(); + CarsSoldProfit carsSoldProfit = baseMapper.selectByVinSid(dto.getVinSid()); + if (carsSoldProfit != null) { + //预计毛利 + if (StringUtils.isNotBlank(dto.getExpectedMaori())) { + carsSoldProfit.setExpectedMaori(new BigDecimal(dto.getExpectedMaori())); + } + //返利调整 + if (StringUtils.isNotBlank(dto.getRebatesAdjust())) { + carsSoldProfit.setRebatesAdjust(new BigDecimal(dto.getRebatesAdjust())); + } + //调整后毛利 + if (StringUtils.isNotBlank(dto.getAdjustedMaori())) { + carsSoldProfit.setAdjustedMaori(new BigDecimal(dto.getAdjustedMaori())); + } + // + carsSoldProfit.setUpdateDate(new Date()); + baseMapper.updateById(carsSoldProfit); + + + } else { + carsSoldProfit = new CarsSoldProfit(); + BeanUtil.copyProperties(dto, carsSoldProfit); + baseMapper.insert(carsSoldProfit); + } + return rb.success(); + } + + public PagerVo listPage(PagerQuery pagerQuery) { + CarsSoldProfitQuery query = pagerQuery.getParams(); + QueryWrapper qw = new QueryWrapper<>(); + if (query != null) { + if (StringUtils.isNotBlank(query.getMenuSid())) { + //======================= + PrivilegeQuery privilegeQuery = new PrivilegeQuery(); + privilegeQuery.setOrgPath(query.getOrgSidPath()); + privilegeQuery.setMenuSid(query.getMenuSid()); + privilegeQuery.setUserSid(query.getUserSid()); + ResultBean defaultIdReltBean = sysUserFeign.selectPrivilegeLevel(privilegeQuery); + if (org.apache.commons.lang3.StringUtils.isNotBlank(defaultIdReltBean.getData())) { + //数据权限ID(1集团、2事业部、3分公司、4部门、5个人) + String orgSidPath = query.getOrgSidPath(); + orgSidPath = orgSidPath + "/"; + int i1 = orgSidPath.indexOf("/"); + int i2 = orgSidPath.indexOf("/", i1 + 1); + int i3 = orgSidPath.indexOf("/", i2 + 1); + int i4 = orgSidPath.indexOf("/", i3 + 1); + String orgLevelKey = defaultIdReltBean.getData(); + if ("1".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i1); + qw.like("bd.orgSidPath", orgSidPath); + } else if ("2".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i2); + qw.like("bd.orgSidPath", orgSidPath); + } else if ("3".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i3); + qw.like("bd.orgSidPath", orgSidPath); + } else if ("4".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i4); + qw.like("bd.orgSidPath", orgSidPath); + } else { + PagerVo p = new PagerVo<>(); + return p; + } + } else { + PagerVo p = new PagerVo<>(); + return p; + } + } + String date = query.getDate(); + if (StringUtils.isNotBlank(date)) { + String[] s = date.split("至"); + String startDate = s[0]; + if (StringUtils.isNotBlank(startDate)) { + qw.ge("saleDate", startDate); + } + String endDate = s[1]; + if (StringUtils.isNotBlank(endDate)) { + qw.le("saleDate", endDate); + } + } + String names = query.getNames(); + // 多字段模糊查询 + if (StringUtils.isNotBlank(names)) { + qw.and(wrapper -> wrapper.like("useOrgName", names) + .or().like("vinNo", names) + .or().like("model", names) + .or().like("schedulingId", names) + .or().like("staffName", names)); + + + } + } + IPage page = PagerUtil.queryToPage(pagerQuery); + IPage pagging = baseMapper.listPage(page, qw); + List recordList = pagging.getRecords(); + recordList.removeAll(Collections.singleton(null)); + PagerVo p = PagerUtil.pageToVo(pagging, null); + return p; + } +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/FileQuery.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/FileQuery.java new file mode 100644 index 0000000000..409d5916a4 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/FileQuery.java @@ -0,0 +1,14 @@ +package com.yxt.anrui.riskcenter.api.loansecondarysalescustomer; + +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/5/13 + **/ +@Data +public class FileQuery { + + private String url; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/LoanSecondarySalesCustomer.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/LoanSecondarySalesCustomer.java index e56790cedf..79de9cc1d9 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/LoanSecondarySalesCustomer.java +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/LoanSecondarySalesCustomer.java @@ -4,6 +4,8 @@ import com.yxt.common.core.domain.BaseEntity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @description: * @author: dimengzhe @@ -32,4 +34,9 @@ public class LoanSecondarySalesCustomer extends BaseEntity { private String endDate; @ApiModelProperty("证件地址") private String certificateAddress; + + @ApiModelProperty("二次销售合同") + private String contractFiles; + @ApiModelProperty("其他证件") + private String otherFiles; } diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/LoanSecondarySalesCustomerDto.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/LoanSecondarySalesCustomerDto.java index 9f6e5fef88..b192cc10c8 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/LoanSecondarySalesCustomerDto.java +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/LoanSecondarySalesCustomerDto.java @@ -5,6 +5,8 @@ import com.yxt.common.core.dto.Dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @description: * @author: dimengzhe @@ -35,4 +37,8 @@ public class LoanSecondarySalesCustomerDto implements Dto { private String endDate; @ApiModelProperty("证件地址") private String certificateAddress; + @ApiModelProperty("二次销售合同") + private List contractFiles; + @ApiModelProperty("其他证件") + private List otherFiles; } diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/SalesInitVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/SalesInitVo.java index 22472739e4..6ccb325917 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/SalesInitVo.java +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loansecondarysalescustomer/SalesInitVo.java @@ -45,4 +45,8 @@ public class SalesInitVo { private String certificateAddress; @ApiModelProperty("车辆列表") private List loanSecondarySalesVehVoList = new ArrayList<>(); + @ApiModelProperty("二次销售合同") + private List contractFiles; + @ApiModelProperty("其他证件") + private List otherFiles; } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoutboundapply/LoanOutboundApplyService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoutboundapply/LoanOutboundApplyService.java index 10f3f0579c..ffbe2fb269 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoutboundapply/LoanOutboundApplyService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoutboundapply/LoanOutboundApplyService.java @@ -640,16 +640,37 @@ public class LoanOutboundApplyService extends MybatisBaseService { //推送财务凭证 //TOdO: - pushRiskToFin(finalLoanOutboundApply,busVinSidList); + pushRiskToFinSh(finalLoanOutboundApply,busVinSidList); }); } catch (Exception e) { e.printStackTrace(); } - }/*else if("二次转租".equals(loanOutboundApply.getDisposal())){ + }else if("二次转租".equals(loanOutboundApply.getDisposal())){ busVinStateSetQuery.setState(3); ResultBean resultBean1 = busSalesOrderVehicleFeign.setRiskState(busVinStateSetQuery); - }*/else if("二次销售".equals(loanOutboundApply.getDisposal())){ + //推送金蝶财务其他出库单--二次转租推送的凭证与赎回推送的凭证一样 + try { + ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() + .setNameFormat("demo-pool-%d").build(); + ExecutorService pool = new org.apache.tomcat.util.threads.ThreadPoolExecutor(2, 100, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue(1024), namedThreadFactory, new org.apache.tomcat.util.threads.ThreadPoolExecutor.AbortPolicy()); + LoanOutboundApply finalLoanOutboundApply = loanOutboundApply; + Future future1 = pool.submit(() -> { + //推送其他出库单 + //TOdO: + pushStkOut(finalLoanOutboundApply,busVinSidList); + }); + Future future2 = pool.submit(() -> { + //推送财务凭证 + //TOdO: + pushRiskToFinZz(finalLoanOutboundApply,busVinSidList); + }); + } catch (Exception e) { + e.printStackTrace(); + } + }else if("二次销售".equals(loanOutboundApply.getDisposal())){ //ToDo: //推送金蝶财务其他出库单 try { @@ -715,6 +736,140 @@ public class LoanOutboundApplyService extends MybatisBaseService busVinSidList) { + Voucher voucher = new Voucher(); + SysOrganizationVo organizationVo = sysOrganizationFeign.fetchBySid(loanOutboundApply.getUseOrgSid()).getData(); + if (null != organizationVo) { + voucher.setAccountBook(organizationVo.getOrgCode()); + voucher.setVoucherNo(organizationVo.getOrgCode()); + } + List voucherResultDetailDtos = new ArrayList<>(); + SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(loanOutboundApply.getDeptSid()).getData(); + for (int i = 0; i < busVinSidList.size(); i++) { + String busVinSid = busVinSidList.get(i); + //ToDo: + BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.details(busVinSid).getData(); + String customerNumber = ""; + BusSalesOrder salesOrder = busSalesOrderFeign.fetchBySid(busSalesOrderVehicle.getSalesOrderSid()).getData(); + if (salesOrder != null && busSalesOrderVehicle != null) { + //判断财务系统是否有客户 + Boolean aBoolean = finKingDeeFeign.customerExistState(busSalesOrderVehicle.getTemporaryNo()).getData(); + String linkNo = ""; + BusSalesOrderBorrowerDetailsVo borrowerDetailsVo = busSalesOrderBorrowerFeign.fetchDetailsBySid(busSalesOrderVehicle.getBorrowerSid()).getData(); + if (!aBoolean) { + // List bdCustomers = new ArrayList<>(); + BdCustomer bdCustomer = new BdCustomer(); + bdCustomer.setFNumber(busSalesOrderVehicle.getTemporaryNo()); + bdCustomer.setFShortName(salesOrder.getContractNo()); + if (StringUtils.isNotBlank(salesOrder.getPurchaseSystemSid())) { + BasePurchaseSystemDetailsVo data = basePurchaseSystemFeign.fetchDetailsByDeptSid(salesOrder.getPurchaseSystemSid()).getData(); + bdCustomer.setTOrgIds(data.getOrgCode()); + } + bdCustomer.setTOrgIds(deptVo.getOrgCode()); + if (org.apache.commons.lang3.StringUtils.isNotBlank(busSalesOrderVehicle.getLinkNo())) { + String vinNo = busSalesOrderVehicle.getLinkNo(); + if (vinNo.length() > 8) { + linkNo = vinNo.substring(vinNo.length() - 8); + } else { + linkNo = busSalesOrderVehicle.getLinkNo(); + } + if (null != borrowerDetailsVo) { + bdCustomer.setFName(borrowerDetailsVo.getBorrowerName() + linkNo); + } + } else { + if (null != borrowerDetailsVo) { + bdCustomer.setFName(borrowerDetailsVo.getBorrowerName() + busSalesOrderVehicle.getTemporaryNo()); + } + } + // bdCustomers.add(bdCustomer); + ResultBean resultBean = finKingDeeFeign.draftBdCustomer(bdCustomer); + if (resultBean.getSuccess()) { + customerNumber = bdCustomer.getFNumber(); + } + } else { + customerNumber = busSalesOrderVehicle.getTemporaryNo(); + } + } + AlrepaidAndArrVo alrepaidAndArrVo = loanRestoreReportApplyService.getAlrepaidAndArr2(busVinSid); + //应收贷款车欠款_待处理欠款_扣回车辆 + BigDecimal all = BigDecimal.ZERO; + //应收贷款车欠款_到期欠款_累欠 + BigDecimal lqMoney = BigDecimal.ZERO; + //应收贷款车欠款_未到期欠款_未到期欠款 + BigDecimal wdqMoney = BigDecimal.ZERO; + //应收贷款车欠款_到期欠款_本金 + BigDecimal bjMoney = BigDecimal.ZERO; + + String lq = loanRepaymentPlanDetailsService.getYqLq(busVinSid); + lqMoney = lqMoney.add(new BigDecimal(StringUtils.isBlank(lq) ? "0" : lq)); + //未到期欠款 + String wdq = alrepaidAndArrVo.getUnexpiredMoney(); + wdqMoney = wdqMoney.add(new BigDecimal(StringUtils.isBlank(wdq) ? "0" : wdq)); + String bj = loanRepaymentPlanDetailsService.getBj(busVinSid); + bjMoney = bjMoney.add(new BigDecimal(StringUtils.isBlank(bj) ? "0" : bj)); + all = lqMoney.add(wdqMoney).add(bjMoney); + + //贷方 + Voucher.VoucherResultDetailDto voucherResultDetailDtoDf = new Voucher.VoucherResultDetailDto(); + //借方 + Voucher.VoucherResultDetailDto voucherResultDetailDtoJf = new Voucher.VoucherResultDetailDto(); + Voucher.VoucherResultDetailDto voucherResultDetailDtoJf2 = new Voucher.VoucherResultDetailDto(); + Voucher.VoucherResultDetailDto voucherResultDetailDtoJf3 = new Voucher.VoucherResultDetailDto(); + //-------------------------------------------应收贷款车欠款_待处理欠款_扣回车辆 + if (all.compareTo(BigDecimal.ZERO) > 0) { + voucherResultDetailDtoDf.setSummary("**扣回车辆转租结转"); + voucherResultDetailDtoDf.setSubjectNo("1201.03.01"); + //核算部门 + voucherResultDetailDtoDf.setDimensionDept(deptVo.getOrgCode()); + //核算客户 + voucherResultDetailDtoDf.setDimensionCustom(customerNumber); + voucherResultDetailDtoDf.setCredit(all.toString()); + voucherResultDetailDtos.add(voucherResultDetailDtoDf); + } + + //---------------------------------------------应收贷款车欠款_到期欠款_累欠 + if (lqMoney.compareTo(BigDecimal.ZERO) > 0) { + voucherResultDetailDtoJf.setSummary("**扣回车辆转租结转"); + voucherResultDetailDtoJf.setSubjectNo("1201.02.03"); + //核算部门 + voucherResultDetailDtoJf.setDimensionDept(deptVo.getOrgCode()); + //核算客户 + voucherResultDetailDtoJf.setDimensionCustom(customerNumber); + voucherResultDetailDtoJf.setDebit(lqMoney.toString()); + voucherResultDetailDtos.add(voucherResultDetailDtoJf); + } + + //--------------------------------------------应收贷款车欠款_未到期欠款_未到期欠款 + if (wdqMoney.compareTo(BigDecimal.ZERO) > 0) { + voucherResultDetailDtoJf2.setSummary("**扣回车辆转租结转"); + voucherResultDetailDtoJf2.setSubjectNo("1201.01.00"); + //核算部门 + voucherResultDetailDtoJf2.setDimensionDept(deptVo.getOrgCode()); + //核算客户 + voucherResultDetailDtoJf2.setDimensionCustom(customerNumber); + voucherResultDetailDtoJf2.setDebit(wdqMoney.toString()); + voucherResultDetailDtos.add(voucherResultDetailDtoJf2); + } + + //-------------------------------------------应收贷款车欠款_到期欠款_本金 + if (bjMoney.compareTo(BigDecimal.ZERO) > 0) { + voucherResultDetailDtoJf3.setSummary("**扣回车辆转租结转"); + voucherResultDetailDtoJf3.setSubjectNo("1201.02.01"); + //核算部门 + voucherResultDetailDtoJf3.setDimensionDept(deptVo.getOrgCode()); + //核算客户 + voucherResultDetailDtoJf3.setDimensionCustom(customerNumber); + voucherResultDetailDtoJf3.setDebit(bjMoney.toString()); + voucherResultDetailDtos.add(voucherResultDetailDtoJf3); + } + } + + if (!voucherResultDetailDtos.isEmpty()) { + voucher.setResultDetails(voucherResultDetailDtos); + finKingDeeFeign.saveVoucher(voucher); + } + } private void pushRiskToFin2(LoanOutboundApply loanOutboundApply, List busVinSidList) { LoanSecondarySalesApply loanSecondarySalesApply = loanSecondarySalesApplyService.fetchBySid(loanOutboundApply.getApplySid()); @@ -905,7 +1060,7 @@ public class LoanOutboundApplyService extends MybatisBaseService busVinSidList) { + public void pushRiskToFinSh(LoanOutboundApply loanOutboundApply,List busVinSidList) { Voucher voucher = new Voucher(); SysOrganizationVo organizationVo = sysOrganizationFeign.fetchBySid(loanOutboundApply.getUseOrgSid()).getData(); if (null != organizationVo) { diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalescustomer/LoanSecondarySalesCustomerService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalescustomer/LoanSecondarySalesCustomerService.java index 045654022b..1b61edf4af 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalescustomer/LoanSecondarySalesCustomerService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansecondarysalescustomer/LoanSecondarySalesCustomerService.java @@ -7,6 +7,7 @@ import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempFeign; import com.yxt.anrui.crm.api.crmcustomertemp.CustomerSecondSalesDto; import com.yxt.anrui.riskcenter.api.loansecondarysalesapply.LoanSecondarySalesApply; import com.yxt.anrui.riskcenter.api.loansecondarysalescost.LoanSecondarySalesCost; +import com.yxt.anrui.riskcenter.api.loansecondarysalescustomer.FileQuery; import com.yxt.anrui.riskcenter.api.loansecondarysalescustomer.LoanSecondarySalesCustomer; import com.yxt.anrui.riskcenter.api.loansecondarysalescustomer.LoanSecondarySalesCustomerDto; import com.yxt.anrui.riskcenter.api.loansecondarysalescustomer.SalesInitVo; @@ -15,14 +16,15 @@ import com.yxt.anrui.riskcenter.biz.loansecondarysalesapply.LoanSecondarySalesAp import com.yxt.anrui.riskcenter.biz.loansecondarysalescost.LoanSecondarySalesCostMapper; import com.yxt.anrui.riskcenter.biz.loansecondarysalescost.LoanSecondarySalesCostService; import com.yxt.anrui.riskcenter.biz.loansecondarysalesveh.LoanSecondarySalesVehService; +import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.StringUtils; import com.yxt.common.core.result.ResultBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @description: @@ -40,6 +42,8 @@ public class LoanSecondarySalesCustomerService extends MybatisBaseService contractFileList = dto.getContractFiles(); + List otherFileList = dto.getOtherFiles(); + if(!contractFileList.isEmpty()){ + String contractFiles = String.join(",",contractFileList.stream().map(v->v.replaceAll(fileUploadComponent.getUrlPrefix(),"")).collect(Collectors.toList())); + loanSecondarySalesCustomer.setContractFiles(contractFiles); + } + if(!otherFileList.isEmpty()){ + String otherFiles = String.join(",",otherFileList.stream().map(v->v.replaceAll(fileUploadComponent.getUrlPrefix(),"")).collect(Collectors.toList())); + loanSecondarySalesCustomer.setOtherFiles(otherFiles); + } baseMapper.insert(loanSecondarySalesCustomer); } else { //新增客户 @@ -76,6 +90,20 @@ public class LoanSecondarySalesCustomerService extends MybatisBaseService contractFileList = dto.getContractFiles(); + List otherFileList = dto.getOtherFiles(); + if(!contractFileList.isEmpty()){ + String contractFiles = String.join(",",contractFileList.stream().map(v->v.replaceAll(fileUploadComponent.getUrlPrefix(),"")).collect(Collectors.toList())); + loanSecondarySalesCustomer.setContractFiles(contractFiles); + }else{ + loanSecondarySalesCustomer.setContractFiles(""); + } + if(!otherFileList.isEmpty()){ + String otherFiles = String.join(",",otherFileList.stream().map(v->v.replaceAll(fileUploadComponent.getUrlPrefix(),"")).collect(Collectors.toList())); + loanSecondarySalesCustomer.setOtherFiles(otherFiles); + }else{ + loanSecondarySalesCustomer.setOtherFiles(""); + } baseMapper.updateById(loanSecondarySalesCustomer); } return rb.success(); @@ -104,6 +132,30 @@ public class LoanSecondarySalesCustomerService extends MybatisBaseService contractFilesList = Arrays.stream(contractFiles.split(",")) + .map(c -> { + FileQuery f = new FileQuery(); + f.setUrl(fileUploadComponent.getUrlPrefix() + c); + return f; + }) + .collect(Collectors.toList()); + + salesInitVo.setContractFiles(contractFilesList); + } + if(StringUtils.isNotBlank(otherFiles)){ + List otherFileList = Arrays.stream(otherFiles.split(",")) + .map(c -> { + FileQuery f = new FileQuery(); + f.setUrl(fileUploadComponent.getUrlPrefix() + c); + return f; + }) + .collect(Collectors.toList()); + + salesInitVo.setOtherFiles(otherFileList); + } return rb.success().setData(salesInitVo); } } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansubletapply/LoanSubletApplyService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansubletapply/LoanSubletApplyService.java index db5cb762b2..06b6d43625 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansubletapply/LoanSubletApplyService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loansubletapply/LoanSubletApplyService.java @@ -10,6 +10,7 @@ import com.yxt.anrui.base.api.basepurchasesystem.BasePurchaseSystemFeign; import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderFeign; import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerFeign; import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicleFeign; +import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusVinStateSetQuery; import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp; import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempFeign; import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempVo; @@ -104,6 +105,8 @@ public class LoanSubletApplyService extends MybatisBaseService listPage(PagerQuery pq) { IPage page = PagerUtil.queryToPage(pq); @@ -696,6 +699,11 @@ public class LoanSubletApplyService extends MybatisBaseService busVinSidList = subletVinLists.stream().map(v->v.getBusVinSid()).collect(Collectors.toList()); + busVinStateSetQuery.setState(11);//二次转租中 + ResultBean resultBeanss = busSalesOrderVehicleFeign.setRiskState(busVinStateSetQuery); try { ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() .setNameFormat("demo-pool-%d").build(); diff --git a/doc/databases/统计报表/车辆利润报表.sql b/doc/databases/统计报表/车辆利润报表.sql new file mode 100644 index 0000000000..96d889cbae --- /dev/null +++ b/doc/databases/统计报表/车辆利润报表.sql @@ -0,0 +1,50 @@ +DROP TABLE IF EXISTS `car_sold_profit`; +CREATE TABLE `car_sold_profit` +( + `id` int(32) NOT NULL AUTO_INCREMENT COMMENT 'id', + `sid` varchar(64) NOT NULL COMMENT 'sid', + `lockVersion` int(32) DEFAULT '0' COMMENT '版本锁', + `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `modifyTime` timestamp NULL DEFAULT NULL COMMENT '修改时间', + `isEnable` int(32) DEFAULT '1' COMMENT '是否可用:1可用,0不可用', + `state` int(32) DEFAULT '1' COMMENT '状态', + `isDelete` int(32) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除', + `remarks` varchar(255) DEFAULT NULL COMMENT '备注', + `createBySid` varchar(64) DEFAULT NULL COMMENT '创建人sid', + `updateBySid` varchar(64) DEFAULT NULL COMMENT '修改人sid', + `orgSidPath` varchar(500) DEFAULT NULL COMMENT '组织机构', + `staffSid` varchar(64) DEFAULT NULL COMMENT '销售专员sid', + `staffName` varchar(64) DEFAULT NULL COMMENT '销售专员名称', + `customerSid` varchar(500) DEFAULT NULL COMMENT '客户sid', + `customerName` varchar(500) DEFAULT NULL COMMENT '客户名称', + `saleDate` varchar(64) DEFAULT NULL COMMENT '销售日期', + `useOrgSid` varchar(64) DEFAULT NULL COMMENT '分公司sid', + `useOrgName` varchar(64) DEFAULT NULL COMMENT '分公司名称', + `vehModelSid` varchar(64) DEFAULT NULL COMMENT '车型sid', + `vehModel` varchar(64) DEFAULT NULL COMMENT '车型', + `vehMConfigSid` varchar(64) DEFAULT NULL COMMENT '车型配置sid', + `purchaseSystemSid` varchar(64) DEFAULT NULL COMMENT '采购系统sid', + `purchaseSystemName` varchar(64) DEFAULT NULL COMMENT '采购系统名称', + `vinNo` varchar(64) DEFAULT NULL COMMENT '车架号', + `vinSid` varchar(200) DEFAULT NULL COMMENT '车辆sid', + `locationSid` varchar(200) DEFAULT NULL COMMENT '存放地点sid', + `locationName` varchar(200) DEFAULT NULL COMMENT '存放地点', + `type` varchar(200) DEFAULT NULL COMMENT '类型', + `exStockPrice` decimal(10, 2) DEFAULT NULL COMMENT '出库价', + `expectedMaori` decimal(10, 2) DEFAULT NULL COMMENT '预计毛利', + `rebatesAdjust` decimal(10, 2) DEFAULT NULL COMMENT '返利调整', + `adjustedMaori` decimal(10, 2) DEFAULT NULL COMMENT '调整后毛利', + `makersSettlementPrice` decimal(10, 2) DEFAULT NULL COMMENT '厂家结算价', + `rebatesTotal` decimal(10, 2) DEFAULT NULL COMMENT '返利合计', + `carCost` decimal(10, 2) DEFAULT NULL COMMENT '车辆成本', + `financeServiceCharge` decimal(10, 2) DEFAULT NULL COMMENT '金融服务费', + `mediatorRebatePrice` decimal(10, 2) DEFAULT NULL COMMENT '中介返利费', + `moveCarPrice` decimal(10, 2) DEFAULT NULL COMMENT '调车费', + `schedulingId` varchar(500) DEFAULT NULL COMMENT '排产订单编号', + `gearbox` varchar(500) DEFAULT NULL COMMENT '变速箱', + `createDate` date DEFAULT NULL COMMENT '数据日期', + `updateDate` date DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`id`), + KEY `id` (`id`) +) ENGINE = INNODB + DEFAULT CHARSET = utf8 COMMENT ='车辆销售利润报表'; \ No newline at end of file