| | |
| | | import com.ruoyi.account.api.model.TAppUser; |
| | | import com.ruoyi.account.api.model.TAppUserCar; |
| | | import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; |
| | | import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; |
| | | import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; |
| | | import com.ruoyi.chargingPile.api.feignClient.SiteClient; |
| | | import com.ruoyi.chargingPile.api.model.Partner; |
| | | import com.ruoyi.chargingPile.api.model.Site; |
| | |
| | | import com.ruoyi.common.core.utils.WebUtils; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.common.log.annotation.Log; |
| | | import com.ruoyi.common.log.enums.BusinessType; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.common.security.annotation.Logical; |
| | | import com.ruoyi.common.security.annotation.RequiresPermissions; |
| | | import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; |
| | | import com.ruoyi.order.api.dto.SettlementConfirmAdd; |
| | | import com.ruoyi.order.api.model.ChargingListQuery; |
| | | import com.ruoyi.order.api.model.TChargingOrder; |
| | | import com.ruoyi.order.api.model.TSettlementConfirm; |
| | | import com.ruoyi.order.api.model.*; |
| | | import com.ruoyi.order.api.query.SettlementListQuery; |
| | | import com.ruoyi.order.api.query.TOrderInvoiceQuery; |
| | | import com.ruoyi.order.api.vo.ChargingOrderListVO; |
| | | import com.ruoyi.order.api.vo.SettlementTotalVO; |
| | | import com.ruoyi.order.api.vo.TOrderInvoiceVO; |
| | | import com.ruoyi.order.export.OrderInvoiceExport; |
| | | import com.ruoyi.order.export.TChargingOrderExport; |
| | | import com.ruoyi.order.vo.ChargingOrderListInfoVO; |
| | | import com.ruoyi.order.api.vo.ChargingOrderTimeVO; |
| | | import com.ruoyi.order.service.*; |
| | | import com.ruoyi.payment.api.feignClient.AliPaymentClient; |
| | | import com.ruoyi.payment.api.feignClient.WxPaymentClient; |
| | | import com.ruoyi.order.api.vo.SettlementTotalVO; |
| | | import com.ruoyi.order.export.TChargingOrderExport; |
| | | import com.ruoyi.order.service.AccountingStrategyOrderService; |
| | | import com.ruoyi.order.service.TChargingOrderAccountingStrategyService; |
| | | import com.ruoyi.order.service.TChargingOrderService; |
| | | import com.ruoyi.order.service.TSettlementConfirmService; |
| | | import com.ruoyi.order.vo.ChargingOrderListInfoVO; |
| | | import com.ruoyi.other.api.domain.TVip; |
| | | import com.ruoyi.other.api.feignClient.VipClient; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import org.apache.poi.ss.usermodel.Workbook; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.net.URLEncoder; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.time.temporal.ChronoUnit; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | private TChargingOrderService chargingOrderService; |
| | | @Resource |
| | | private TSettlementConfirmService tSettlementConfirmService; |
| | | @Resource |
| | | private VipClient vipClient; |
| | | @Resource |
| | | private SiteClient siteClient; |
| | | @Resource |
| | | private AppUserClient appUserClient; |
| | | @Resource |
| | | private ChargingGunClient chargingGunClient; |
| | | @Resource |
| | | private AppUserCarClient appUserCarClient; |
| | | @Resource |
| | | private AccountingStrategyOrderService accountingStrategyOrderService; |
| | | @Resource |
| | | private TChargingOrderAccountingStrategyService tChargingOrderAccountingStrategyService; |
| | | @Resource |
| | | private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient; |
| | | |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/chargingPeriodStatistics"}, logical = Logical.OR) |
| | | @PostMapping(value = "/chargingList") |
| | | @ApiOperation(value = "充电时段统计列表", tags = {"管理后台-财务结算"}) |
| | | public AjaxResult<ChargingOrderTimeVO> chargingList(@RequestBody ChargingListQuery dto) { |
| | | ChargingOrderTimeVO res = chargingOrderService.chargingList(dto); |
| | | return AjaxResult.success(res); |
| | | } |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/chargingPeriodStatistics/order_info", "/chargingPeriodStatistics/charging_curve"}, logical = Logical.OR) |
| | | @GetMapping(value = "/chargingInfo") |
| | | @ApiOperation(value = "充电时段统计列表-查看详情", tags = {"管理后台-财务结算"}) |
| | | public AjaxResult<ChargingOrderListInfoVO> chargingInfo(String uid) { |
| | | ChargingOrderListInfoVO res = chargingOrderService.chargingInfo(uid); |
| | | return AjaxResult.success(res); |
| | | } |
| | | @Autowired |
| | | private SiteClient siteClient; |
| | | @Autowired |
| | | private AppUserClient appUserClient; |
| | | @Autowired |
| | | private ChargingGunClient chargingGunClient; |
| | | @Autowired |
| | | private AppUserCarClient appUserCarClient; |
| | | |
| | | @RequiresPermissions(value = {"/chargingPeriodStatistics/export"}, logical = Logical.OR) |
| | | @ApiOperation(value = "充电时段统计-导出", tags = {"管理后台-财务结算"}) |
| | | @PutMapping("/export") |
| | | public void export(@RequestBody ChargingListQuery dto) { |
| | | ChargingOrderTimeVO res = chargingOrderService.chargingList(dto); |
| | | List<TChargingOrderExport> tChargingOrderExports = new ArrayList<>(); |
| | | List<ChargingOrderListVO> exportList = res.getExportList(); |
| | | int i = 0; |
| | | int i = 1; |
| | | List<TChargingGun> data = chargingGunClient.getAllGun().getData(); |
| | | List<Site> data9 = siteClient.getSiteAll().getData(); |
| | | List<TAppUser> data6 = appUserClient.getAllUser().getData(); |
| | | List<Partner> data7 = siteClient.getAllPartner().getData(); |
| | | List<AccountingStrategyOrder> listAll = accountingStrategyOrderService.lambdaQuery() |
| | | .list(); |
| | | List<TChargingOrderAccountingStrategy> stageCostAll = tChargingOrderAccountingStrategyService.list( |
| | | ); |
| | | List<TVip> data5 = vipClient.getAllVip().getData(); |
| | | List<TAppUserCar> data8 = appUserCarClient.getAllCar().getData(); |
| | | for (ChargingOrderListVO chargingOrderListVO : exportList) { |
| | | TChargingOrderExport tChargingOrderExport = new TChargingOrderExport(); |
| | | |
| | | List<Site> data = siteClient.getSiteByIds(Arrays.asList(chargingOrderListVO.getSiteId())).getData(); |
| | | TAppUser data3 = appUserClient.getUserById(chargingOrderListVO.getAppUserId()).getData(); |
| | | TChargingGun data4 = chargingGunClient.getChargingGunById(chargingOrderListVO.getChargingGunId()).getData(); |
| | | if (data!=null&&(!data.isEmpty())){ |
| | | tChargingOrderExport.setSiteCode(data.get(0).getCode()); |
| | | Site site = data9.stream().filter(e -> e.getId().equals(chargingOrderListVO.getSiteId())).findFirst().orElse(null); |
| | | TAppUser data3 = data6.stream().filter(e->e.getId().equals(chargingOrderListVO.getAppUserId())).findFirst().orElse(null); |
| | | TChargingGun data4 = data.stream().filter(e->e.getId().equals(chargingOrderListVO.getChargingGunId())).findFirst().orElse(null); |
| | | if (site!=null){ |
| | | tChargingOrderExport.setSiteCode(site.getCode()); |
| | | tChargingOrderExport.setSiteName(chargingOrderListVO.getSiteName()); |
| | | tChargingOrderExport.setCity(data.get(0).getCity()); |
| | | tChargingOrderExport.setCityName(data.get(0).getDistricts()); |
| | | tChargingOrderExport.setSiteType(data.get(0).getSiteType()); |
| | | tChargingOrderExport.setStatus(data.get(0).getStatus()+""); |
| | | Partner data2 = siteClient.getPartnerR(data.get(0).getPartnerId()).getData(); |
| | | tChargingOrderExport.setCity(site.getCity()); |
| | | tChargingOrderExport.setCityName(site.getDistricts()); |
| | | tChargingOrderExport.setSiteType(site.getSiteType()); |
| | | tChargingOrderExport.setStatus(site.getStatus()+""); |
| | | Partner data2 = data7.stream().filter(e->e.getId().equals(site.getPartnerId())).findFirst().orElse(null); |
| | | if (data2!=null){ |
| | | tChargingOrderExport.setPartner(data2.getName()); |
| | | } |
| | |
| | | tChargingOrderExport.setId(i); |
| | | tChargingOrderExport.setCode(chargingOrderListVO.getCode()); |
| | | tChargingOrderExport.setTerminalName(chargingOrderListVO.getTerminalName()); |
| | | // tChargingOrderExport.setName(); |
| | | // 查询这笔订单的计费策略名称 |
| | | List<AccountingStrategyOrder> list = listAll.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList()); |
| | | |
| | | |
| | | if (!list.isEmpty()){ |
| | | tChargingOrderExport.setName(list.get(0).getName()); |
| | | } |
| | | tChargingOrderExport.setOrderClassification("1"); |
| | | tChargingOrderExport.setStartType("扫码"); |
| | | tChargingOrderExport.setOne("小程序"); |
| | | tChargingOrderExport.setTwo("小程序"); |
| | | tChargingOrderExport.setCreateTime(chargingOrderListVO.getCreateTime()+""); |
| | | tChargingOrderExport.setStartTime(chargingOrderListVO.getStartTime()+""); |
| | | tChargingOrderExport.setEndTime(chargingOrderListVO.getEndTime()+""); |
| | | if (chargingOrderListVO.getRechargePaymentType()!=null){ |
| | | if (chargingOrderListVO.getOrderSource()!=null&&chargingOrderListVO.getOrderSource().equals(2)){ |
| | | if (chargingOrderListVO.getTripartitePlatformName().equals("XinDianTu")){ |
| | | tChargingOrderExport.setTwo("新电途"); |
| | | tChargingOrderExport.setOne("互联互通"); |
| | | |
| | | } |
| | | if (chargingOrderListVO.getTripartitePlatformName().equals("KuaiDian")){ |
| | | tChargingOrderExport.setTwo("快电"); |
| | | tChargingOrderExport.setOne("互联互通"); |
| | | |
| | | } |
| | | }else{ |
| | | switch (chargingOrderListVO.getRechargePaymentType()){ |
| | | case 1: |
| | | tChargingOrderExport.setTwo("微信小程序"); |
| | | break; |
| | | case 2: |
| | | tChargingOrderExport.setTwo("支付宝小程序"); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | if (chargingOrderListVO.getCreateTime()!=null){ |
| | | String s1 = DateUtils.localDateTimeToString(chargingOrderListVO.getCreateTime()); |
| | | tChargingOrderExport.setCreateTime(s1); |
| | | } |
| | | if (chargingOrderListVO.getStartTime()!=null){ |
| | | String s2 = DateUtils.localDateTimeToString(chargingOrderListVO.getStartTime()); |
| | | tChargingOrderExport.setStartTime(s2); |
| | | } |
| | | if (chargingOrderListVO.getEndTime()!=null){ |
| | | String s3 = DateUtils.localDateTimeToString(chargingOrderListVO.getEndTime()); |
| | | tChargingOrderExport.setEndTime(s3); |
| | | } |
| | | tChargingOrderExport.setRechargePaymentStatus(chargingOrderListVO.getRechargePaymentStatus()+""); |
| | | tChargingOrderExport.setType("充电订单"); |
| | | tChargingOrderExport.setChargingType("单桩双充"); |
| | |
| | | tChargingOrderExport.setServiceCharge(chargingOrderListVO.getServiceCharge()+""); |
| | | tChargingOrderExport.setTotal(chargingOrderListVO.getPaymentAmount()+""); |
| | | tChargingOrderExport.setChargingCapacity(chargingOrderListVO.getElectricity()+""); |
| | | // tChargingOrderExport.setElectrovalencePrice(); |
| | | // tChargingOrderExport.setServiceChargePrice(); |
| | | // tChargingOrderExport.setServiceChargePriceLook(); |
| | | // tChargingOrderExport.setCumulativeChargingTime(); |
| | | List<TChargingOrderAccountingStrategy> stageCost = stageCostAll.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList()); |
| | | if (!stageCost.isEmpty()){ |
| | | // 累加时段电费单价 取平均值 |
| | | BigDecimal bigDecimal1 = new BigDecimal("0"); |
| | | BigDecimal bigDecimal2 = new BigDecimal("0"); |
| | | BigDecimal bigDecimal3 = new BigDecimal("0"); |
| | | BigDecimal size = new BigDecimal(stageCost.size()); |
| | | |
| | | for (TChargingOrderAccountingStrategy tChargingOrderAccountingStrategy : stageCost) { |
| | | bigDecimal1 = bigDecimal1.add(tChargingOrderAccountingStrategy.getPeriodElectricPrice()); |
| | | bigDecimal2 = bigDecimal2.add(tChargingOrderAccountingStrategy.getPeriodServicePrice()); |
| | | bigDecimal3 = bigDecimal3.add(tChargingOrderAccountingStrategy.getPeriodOriginalServicePrice()); |
| | | } |
| | | BigDecimal divide1 = bigDecimal1.divide(size, 2, RoundingMode.HALF_DOWN); |
| | | BigDecimal divide2 = bigDecimal2.divide(size, 2, RoundingMode.HALF_DOWN); |
| | | BigDecimal divide3 = bigDecimal3.divide(size, 2, RoundingMode.HALF_DOWN); |
| | | tChargingOrderExport.setElectrovalencePrice(divide1+""); |
| | | tChargingOrderExport.setServiceChargePrice(divide2+""); |
| | | tChargingOrderExport.setServiceChargePriceLook(divide3+""); |
| | | } |
| | | if (chargingOrderListVO.getStartTime()!=null && chargingOrderListVO.getEndTime()!=null){ |
| | | LocalDateTime startTime = chargingOrderListVO.getStartTime(); |
| | | LocalDateTime endTime = chargingOrderListVO.getEndTime(); |
| | | // 计算时间差 单位秒 |
| | | long between = ChronoUnit.SECONDS.between(startTime, endTime); |
| | | tChargingOrderExport.setCumulativeChargingTime((between*60)+""); |
| | | } |
| | | tChargingOrderExport.setStartSoc(chargingOrderListVO.getStartSoc()); |
| | | tChargingOrderExport.setEndtSoc(chargingOrderListVO.getEndSoc()); |
| | | tChargingOrderExport.setIsSoc("否"); |
| | | tChargingOrderExport.setIsSocType(""); |
| | | tChargingOrderExport.setIsSocNum("0"); |
| | | tChargingOrderExport.setUserType("普通个人用户"); |
| | | // tChargingOrderExport.setVipType(); |
| | | if (data3!=null&&data3.getVipId()!=null){ |
| | | TVip data1 = data5.stream().filter(e->e.getId().equals(data3.getVipId())).findFirst().orElse(null); |
| | | if (data1!=null){ |
| | | tChargingOrderExport.setVipType(data1.getName()); |
| | | } |
| | | } |
| | | tChargingOrderExport.setIsPlus(chargingOrderListVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0?"是":"否"); |
| | | if (data3!=null){ |
| | | tChargingOrderExport.setRealName(data3.getName()); |
| | |
| | | tChargingOrderExport.setDeviceCode(data4.getCode()); |
| | | } |
| | | tChargingOrderExport.setAccountType("个人"); |
| | | List<TAppUserCar> data1 = appUserCarClient.getCarByIds(Arrays.asList(chargingOrderListVO.getAppUserCarId())).getData(); |
| | | if (data1!=null&&(!data1.isEmpty())){ |
| | | tChargingOrderExport.setCarNumber(data1.get(0).getLicensePlate()); |
| | | tChargingOrderExport.setCarType(data1.get(0).getVehicleModel()); |
| | | tChargingOrderExport.setCarBrand(data1.get(0).getVehicleBrand()); |
| | | |
| | | |
| | | TAppUserCar tAppUserCar = data8.stream().filter(e -> e.getId().equals(chargingOrderListVO.getAppUserId())).findFirst().orElse(null); |
| | | if (tAppUserCar!=null){ |
| | | tChargingOrderExport.setCarNumber(tAppUserCar.getLicensePlate()); |
| | | tChargingOrderExport.setCarType(tAppUserCar.getVehicleModel()); |
| | | tChargingOrderExport.setCarBrand(tAppUserCar.getVehicleBrand()); |
| | | } |
| | | tChargingOrderExport.setOrderCode(chargingOrderListVO.getCode()); |
| | | tChargingOrderExport.setOrderCode(chargingOrderListVO.getStartChargeSeq()); |
| | | tChargingOrderExport.setIsSingle("是"); |
| | | tChargingOrderExport.setPayTime(chargingOrderListVO.getPayTime()+""); |
| | | tChargingOrderExport.setElectrovalenceSiteName("四川明星新能源科技有限公司"); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/summarySettlement"}, logical = Logical.OR) |
| | | @GetMapping(value = "/settlementTotal") |
| | | @ApiOperation(value = "结算汇总-列表查询", tags = {"管理后台-财务结算"}) |
| | | @ApiParam(name = "time", value = "汇报时间2024-01") |
| | |
| | | SettlementTotalVO res = chargingOrderService.settlementTotal(time); |
| | | return AjaxResult.success(res); |
| | | } |
| | | @GetMapping(value = "/settlementTotalR") |
| | | public R<SettlementTotalVO> settlementTotalR(String time) { |
| | | |
| | | |
| | | |
| | | @GetMapping(value = "/settlementTotalR/{time}/{userId}") |
| | | public R<SettlementTotalVO> settlementTotalR(@PathVariable("time")String time,@PathVariable("userId")Long userId) { |
| | | time = time+"-01 00:00:00"; |
| | | SettlementTotalVO res = chargingOrderService.settlementTotal(time); |
| | | SettlementTotalVO res = chargingOrderService.settlementTotalR(time,userId); |
| | | return R.ok(res); |
| | | } |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/generateStatement"}, logical = Logical.OR) |
| | | @PostMapping(value = "/settlementAdd") |
| | | @ApiOperation(value = "结算确认表-生成/保存结算确认表", tags = {"管理后台-财务结算"}) |
| | | public R<TSettlementConfirm> settlementAdd(@RequestBody SettlementConfirmAdd dto) { |
| | | TSettlementConfirm res = chargingOrderService.settlementAdd(dto); |
| | | return R.ok(res); |
| | | } |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/balanceSheetRecord"}, logical = Logical.OR) |
| | | @PostMapping(value = "/settlementList") |
| | | @ApiOperation(value = "结算表记录-列表查询", tags = {"管理后台-财务结算"}) |
| | | public R<PageInfo<TSettlementConfirm>> settlementList(@RequestBody SettlementListQuery dto) { |
| | | PageInfo<TSettlementConfirm> res = chargingOrderService.settlementList(dto); |
| | | return R.ok(res); |
| | | } |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/balanceSheetRecord/del"}, logical = Logical.OR) |
| | | @GetMapping(value = "/deleteSettlement") |
| | | @ApiOperation(value = "结算表记录-删除", tags = {"管理后台-财务结算"}) |
| | | public R deleteSettlement(String uid) { |
| | | tSettlementConfirmService.removeById(uid); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | @GetMapping(value = "/downloadSettlement/{uid}") |
| | | public R<TSettlementConfirm> downloadSettlement(@PathVariable("uid") String uid) { |
| | | TSettlementConfirm byId = tSettlementConfirmService.getById(uid); |
| | |
| | | .between(TChargingOrder::getStartTime, byId.getStartTime(), byId.getEndTime()) |
| | | .eq(TChargingOrder::getStatus, 5) |
| | | .eq(TChargingOrder::getRechargePaymentStatus, 2).list(); |
| | | int i = 1; |
| | | for (TChargingOrder chargingOrder : list) { |
| | | |
| | | } |
| | | byId.setList(list); |
| | | String format = byId.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); |
| | | String format1 = byId.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); |