puzhibing
2024-10-31 fd35f223b7f40ee9ee4a9307384b54a96d7956a2
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -1,27 +1,62 @@
package com.ruoyi.order.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.ruoyi.account.api.feignClient.AppUserCarClient;
import com.ruoyi.account.api.feignClient.AppUserClient;
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.chargingPile.api.model.TChargingGun;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils;
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.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.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.api.model.ChargingListQuery;
import com.ruoyi.order.service.*;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
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.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * <p>
@@ -38,59 +73,192 @@
    @Resource
    private TChargingOrderService chargingOrderService;
    @Autowired
    private TokenService tokenService;
    @Autowired
    private TOrderEvaluateService orderEvaluateService;
    @Resource
    private WxPaymentClient wxPaymentClient;
    @Resource
    private RedisService redisService;
    @Resource
    private AliPaymentClient aliPaymentClient;
    @Resource
    private TShoppingOrderService shoppingOrderService;
    @Resource
    private AppUserClient appUserClient;
    @Resource
    private TVipOrderService vipOrderService;
    @Resource
    private ParkingLotClient parkingLotClient;
    @Resource
    private TChargingOrderRefundService chargingOrderRefundService;
    @Resource
    private TShoppingOrderRefundService shoppingOrderRefundService;
    @Resource
    private TVipOrderRefundService vipOrderRefundService;
    @Resource
    private SiteClient siteClient;
    @Resource
    private ChargingPileClient chargingPileClient;
    @Resource
    private ChargingGunClient chargingGunClient;
    @Resource
    private AppUserCarClient appUserCarClient;
    @Resource
    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
    @ResponseBody
    private TSettlementConfirmService tSettlementConfirmService;
    @PostMapping(value = "/chargingList")
    @ApiOperation(value = "充电时段统计列表", tags = {"管理后台-财务结算"})
    public AjaxResult<ChargingOrderTimeVO> chargingList(@RequestBody ChargingListQuery dto) {
        ChargingOrderTimeVO res = chargingOrderService.chargingList(dto);
        return AjaxResult.success(res);
    }
    @ResponseBody
    @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;
    @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.getList().getRecords();
        int i = 0;
        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());
                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();
                if (data2!=null){
                    tChargingOrderExport.setPartner(data2.getName());
                }
            }
            tChargingOrderExport.setSaleType("1");
            tChargingOrderExport.setBusinessCategory("1");
            tChargingOrderExport.setId(i);
            tChargingOrderExport.setCode(chargingOrderListVO.getCode());
            tChargingOrderExport.setTerminalName(chargingOrderListVO.getTerminalName());
//            tChargingOrderExport.setName();
            tChargingOrderExport.setOrderClassification("1");
            tChargingOrderExport.setStartType("扫码");
            tChargingOrderExport.setOne("小程序");
            tChargingOrderExport.setTwo("小程序");
            tChargingOrderExport.setCreateTime(chargingOrderListVO.getCreateTime()+"");
            tChargingOrderExport.setStartTime(chargingOrderListVO.getStartTime()+"");
            tChargingOrderExport.setEndTime(chargingOrderListVO.getEndTime()+"");
            tChargingOrderExport.setRechargePaymentStatus(chargingOrderListVO.getRechargePaymentStatus()+"");
            tChargingOrderExport.setType("充电订单");
            tChargingOrderExport.setChargingType("单桩双充");
            tChargingOrderExport.setEndmode(chargingOrderListVO.getEndMode()+"");
            tChargingOrderExport.setChargingEndAccount("平台");
            tChargingOrderExport.setIsFree("否");
            tChargingOrderExport.setElectrovalence(chargingOrderListVO.getElectrovalence()+"");
            tChargingOrderExport.setServiceCharge(chargingOrderListVO.getServiceCharge()+"");
            tChargingOrderExport.setTotal(chargingOrderListVO.getPaymentAmount()+"");
            tChargingOrderExport.setChargingCapacity(chargingOrderListVO.getElectricity()+"");
//            tChargingOrderExport.setElectrovalencePrice();
//            tChargingOrderExport.setServiceChargePrice();
//            tChargingOrderExport.setServiceChargePriceLook();
//            tChargingOrderExport.setCumulativeChargingTime();
            tChargingOrderExport.setStartSoc(chargingOrderListVO.getStartSoc());
            tChargingOrderExport.setEndtSoc(chargingOrderListVO.getEndSoc());
            tChargingOrderExport.setIsSoc("否");
            tChargingOrderExport.setIsSocType("");
            tChargingOrderExport.setIsSocNum("0");
            tChargingOrderExport.setUserType("普通个人用户");
//            tChargingOrderExport.setVipType();
            tChargingOrderExport.setIsPlus(chargingOrderListVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0?"是":"否");
            if (data3!=null){
                tChargingOrderExport.setRealName(data3.getName());
                tChargingOrderExport.setPhone(data3.getPhone());
                tChargingOrderExport.setNickName(data3.getName());
            }
            if (data4!=null){
                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());
            }
            tChargingOrderExport.setOrderCode(chargingOrderListVO.getCode());
            tChargingOrderExport.setIsSingle("是");
            tChargingOrderExport.setPayTime(chargingOrderListVO.getPayTime()+"");
            tChargingOrderExport.setElectrovalenceSiteName("四川明星新能源科技有限公司");
            tChargingOrderExport.setCompanyNameAdmin("四川明星新能源科技有限公司");
            tChargingOrderExport.setMoneyType("线上计费");
            tChargingOrderExport.setDeviceType("设备直连(自由集控)");
            tChargingOrderExport.setSettlementCompanyName("四川明星新能源科技有限公司");
            tChargingOrderExport.setPrePaymentType("先付后退");
            tChargingOrderExport.setIsSecurity("是");
            tChargingOrderExports.add(tChargingOrderExport);
            i++;
        }
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TChargingOrderExport.class, tChargingOrderExports);
        HttpServletResponse response = WebUtils.response();
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        ServletOutputStream outputStream = null;
        try {
            String fileName = URLEncoder.encode("充电时段统计导出.xls", "utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            outputStream = response.getOutputStream();
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    @GetMapping(value = "/settlementTotal")
    @ApiOperation(value = "结算汇总-列表查询", tags = {"管理后台-财务结算"})
    @ApiParam(name = "time", value = "汇报时间2024-01")
    public AjaxResult<SettlementTotalVO> settlementTotal(String time) {
        time = time+"-01 00:00:00";
        SettlementTotalVO res = chargingOrderService.settlementTotal(time);
        return AjaxResult.success(res);
    }
    @GetMapping(value = "/settlementTotalR")
    public R<SettlementTotalVO> settlementTotalR(String time) {
        time = time+"-01 00:00:00";
        SettlementTotalVO res = chargingOrderService.settlementTotal(time);
        return R.ok(res);
    }
    @PostMapping(value = "/settlementAdd")
    @ApiOperation(value = "结算确认表-生成/保存结算确认表", tags = {"管理后台-财务结算"})
    public R<TSettlementConfirm> settlementAdd(@RequestBody SettlementConfirmAdd dto) {
        TSettlementConfirm res = chargingOrderService.settlementAdd(dto);
        return R.ok(res);
    }
    @PostMapping(value = "/settlementList")
    @ApiOperation(value = "结算表记录-列表查询", tags = {"管理后台-财务结算"})
    public R<PageInfo<TSettlementConfirm>> settlementList(@RequestBody SettlementListQuery dto) {
        PageInfo<TSettlementConfirm> res = chargingOrderService.settlementList(dto);
        return R.ok(res);
    }
    @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);
        if (byId!=null){
            List<TChargingOrder> list = chargingOrderService.lambdaQuery().eq(TChargingOrder::getSiteId, byId.getSiteId())
                    .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"));
            byId.setTime(format+"至"+format1);
        }
        return R.ok(byId);
    }
}