diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppVerifyController.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppVerifyController.java index cd9cd49..4f7cae4 100644 --- a/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppVerifyController.java +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppVerifyController.java @@ -17,6 +17,7 @@ import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.pay.tm.TmPayService; import com.ruoyi.common.utils.CommonUtil; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; @@ -120,6 +121,12 @@ public class AppVerifyController extends BaseController @Resource private SysDeptMapper deptMapper; + @Autowired + private EtChannelService etChannelService; + + @Autowired + private TmPayService tmPayService; + /** * 故障上报 @@ -295,6 +302,13 @@ public class AppVerifyController extends BaseController if(!ServiceConstants.ORDER_STATUS_RIDING_END.equals(etOrder1.getStatus()) && !ServiceConstants.ORDER_STATUS_CANCEL_APPOINTMENT.equals(etOrder1.getStatus())){ throw new ServiceException("改价失败,订单未结束,订单状态:"+etOrder1.getStatus()); } + String outTradeNo = etOrder1.getOutTradeNo(); + ChannelVO channelVO = etChannelService.selectSmChannelByChannelId(etOrder1.getPayChannel()); + if(StrUtil.isNotBlank(outTradeNo)){ + // 如果有outtradeno,则关闭订单 + tmPayService.closeOrder(channelVO,outTradeNo); + logger.info("【订单改价】订单【{}】,有outTradeNo = 【{}】,查询订单未支付,关闭订单:{}", etOrder1.getOrderNo(),outTradeNo); + } BigDecimal payFee = BigDecimal.ZERO; if(ObjectUtil.isNotNull(etOrder.getDispatchFee())){ payFee = payFee.add(etOrder.getDispatchFee()); @@ -735,6 +749,17 @@ public class AppVerifyController extends BaseController return success(operatingDataVo); } + /** + * 平台对账 + */ + @GetMapping(value = "/selfReconciliation") + public AjaxResult selfReconciliation(String timeStart,String timeEnd,String areaId) + { + logger.info("【平台对账】请求参数:timeStart={},timeEnd={},areaId={}", timeStart,timeEnd,areaId); + List selfReconciliation = etOrderService.selfReconciliation(timeStart,timeEnd,areaId); + return success(selfReconciliation); + } + /** * 收入对账 diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/system/EtReconciliationController.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/EtReconciliationController.java new file mode 100644 index 0000000..aa7d2f4 --- /dev/null +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/EtReconciliationController.java @@ -0,0 +1,104 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.EtReconciliation; +import com.ruoyi.system.service.IEtReconciliationService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 平台对账Controller + * + * @author qzz + * @date 2024-10-03 + */ +@RestController +@RequestMapping("/system/reconciliation2") +public class EtReconciliationController extends BaseController +{ + @Autowired + private IEtReconciliationService etReconciliationService; + + /** + * 查询平台对账列表 + */ + @PreAuthorize("@ss.hasPermi('system:reconciliation2:list')") + @GetMapping("/list") + public TableDataInfo list(EtReconciliation etReconciliation) + { + startPage(); + List list = etReconciliationService.selectEtReconciliationList(etReconciliation); + return getDataTable(list); + } + + /** + * 导出平台对账列表 + */ + @PreAuthorize("@ss.hasPermi('system:reconciliation2:export')") + @Log(title = "平台对账", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, EtReconciliation etReconciliation) + { + List list = etReconciliationService.selectEtReconciliationList(etReconciliation); + ExcelUtil util = new ExcelUtil(EtReconciliation.class); + util.exportExcel(response, list, "平台对账数据"); + } + + /** + * 获取平台对账详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:reconciliation2:query')") + @GetMapping(value = "/{reconciliationId}") + public AjaxResult getInfo(@PathVariable("reconciliationId") Long reconciliationId) + { + return success(etReconciliationService.selectEtReconciliationByReconciliationId(reconciliationId)); + } + + /** + * 新增平台对账 + */ + @PreAuthorize("@ss.hasPermi('system:reconciliation2:add')") + @Log(title = "平台对账", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody EtReconciliation etReconciliation) + { + return toAjax(etReconciliationService.insertEtReconciliation(etReconciliation)); + } + + /** + * 修改平台对账 + */ + @PreAuthorize("@ss.hasPermi('system:reconciliation2:edit')") + @Log(title = "平台对账", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody EtReconciliation etReconciliation) + { + return toAjax(etReconciliationService.updateEtReconciliation(etReconciliation)); + } + + /** + * 删除平台对账 + */ + @PreAuthorize("@ss.hasPermi('system:reconciliation2:remove')") + @Log(title = "平台对账", businessType = BusinessType.DELETE) + @DeleteMapping("/{reconciliationIds}") + public AjaxResult remove(@PathVariable Long[] reconciliationIds) + { + return toAjax(etReconciliationService.deleteEtReconciliationByReconciliationIds(reconciliationIds)); + } +} diff --git a/electripper-system/src/main/java/com/ruoyi/system/domain/EtReconciliation.java b/electripper-system/src/main/java/com/ruoyi/system/domain/EtReconciliation.java new file mode 100644 index 0000000..302b806 --- /dev/null +++ b/electripper-system/src/main/java/com/ruoyi/system/domain/EtReconciliation.java @@ -0,0 +1,67 @@ +package com.ruoyi.system.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 平台对账对象 et_reconciliation + * + * @author qzz + * @date 2024-10-03 + */ +@Data +public class EtReconciliation extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 对账id */ + private Long reconciliationId; + + /** 总收入 */ + @Excel(name = "总收入") + private BigDecimal totalAmount; + + /** 订单支付 */ + @Excel(name = "订单支付") + private BigDecimal orderPaid; + + /** 押金支付 */ + @Excel(name = "押金支付") + private BigDecimal depositPaid; + + /** 支付渠道id */ + @Excel(name = "支付渠道id") + private Long payChannel; + + /** 对账日期 */ + @Excel(name = "对账日期") + private String day; + + /** 押金退款 */ + @Excel(name = "押金退款") + private BigDecimal depositRefund; + + /** 押金抵扣金额 */ + @Excel(name = "押金抵扣金额") + private BigDecimal deductionAmount; + + /** 手续费 */ + @Excel(name = "手续费") + private BigDecimal handlingCharge; + + /** 用户账变 */ + @Excel(name = "用户账变") + private BigDecimal userReceipts; + + /** 结算金额 */ + @Excel(name = "结算金额") + private BigDecimal settlementAmount; + + /** 平台服务费 */ + @Excel(name = "平台服务费") + private BigDecimal platformServiceFee; + +} diff --git a/electripper-system/src/main/java/com/ruoyi/system/domain/vo/SelfReconciliationVO.java b/electripper-system/src/main/java/com/ruoyi/system/domain/vo/SelfReconciliationVO.java new file mode 100644 index 0000000..0c05581 --- /dev/null +++ b/electripper-system/src/main/java/com/ruoyi/system/domain/vo/SelfReconciliationVO.java @@ -0,0 +1,57 @@ +package com.ruoyi.system.domain.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 平台对账 + * + * @author 邱贞招 + * @date 2024-10-02 + */ +@Data +public class SelfReconciliationVO { + + //日期 格式:yyyy-MM-dd + private String day; + + //押金余额 + private BigDecimal depositBalance= BigDecimal.ZERO; + + //总流水 + private BigDecimal totalFlowAmount= BigDecimal.ZERO; + + //订单支付 包含押金抵扣 + private BigDecimal orderPaid= BigDecimal.ZERO; + + //押金充值 + private BigDecimal depositPaid= BigDecimal.ZERO; + + //押金抵扣金额 + private BigDecimal deductionAmount= BigDecimal.ZERO; + + //总支出 + private BigDecimal totalExpenditure= BigDecimal.ZERO; + + //订单退款 + private BigDecimal orderRefund= BigDecimal.ZERO; + + //押金退款 + private BigDecimal depositRefund= BigDecimal.ZERO; + + //押金变化 + private BigDecimal depositChange= BigDecimal.ZERO; + + //用户账变收入 + private BigDecimal userReceipts= BigDecimal.ZERO; + + //手续费 + private BigDecimal handlingCharge= BigDecimal.ZERO; + + // 平台服务费 + private BigDecimal platformServiceFee= BigDecimal.ZERO; + + //结算金额 + private BigDecimal settlementAmount= BigDecimal.ZERO; +} diff --git a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtCapitalFlowMapper.java b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtCapitalFlowMapper.java index 252d2c9..bd8420e 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtCapitalFlowMapper.java +++ b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtCapitalFlowMapper.java @@ -81,6 +81,14 @@ public interface EtCapitalFlowMapper */ BigDecimal getHandlingFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("sn") String sn, @Param("areaId") Long areaId); + /** + * 手续费 + * + * @param areaId 运营区id + * @return + */ + BigDecimal getHandlingFee2(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("sn") String sn, @Param("areaId") Long areaId,@Param("channelId") Long channelId); + /** * 平台服务费 * @@ -88,6 +96,13 @@ public interface EtCapitalFlowMapper * @return */ BigDecimal getServiceFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("sn") String sn, @Param("areaId") Long areaId); + /** + * 平台服务费 + * + * @param areaId 运营区id + * @return + */ + BigDecimal getServiceFee2(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("sn") String sn, @Param("areaId") Long areaId,@Param("channelId") Long channelId); /** * 骑行订单收入 @@ -104,4 +119,20 @@ public interface EtCapitalFlowMapper * @return */ BigDecimal getDeductionAmount(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("sn") String sn, @Param("areaId") Long areaId); + + /** + * 已支付骑行订单 + * + * @param areaId 运营区id + * @return + */ + BigDecimal getOrderPaidAmount(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") Long areaId,@Param("channelId") Long channelId); + + /** + * 统计所有用户今日账变 + * + * @param areaId 运营区id + * @return + */ + BigDecimal getAllUserReceipts(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") Long areaId,@Param("channelId") Long channelId); } diff --git a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtModelRuleMapper.java b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtModelRuleMapper.java index 886b077..ab04ecf 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtModelRuleMapper.java +++ b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtModelRuleMapper.java @@ -1,6 +1,8 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.domain.EtModelRule; /** @@ -16,14 +18,15 @@ public interface EtModelRuleMapper extends BaseMapper * @param areaId 运营区id * @return 结果 */ + @Log(title = "mapper中,根据车型id删除车型与收费方式关系", businessType = BusinessType.DELETE) public int deleteModelRuleByModelId(Long areaId); - /** - * 通过用ruleId删除区域与收费方式关联 - * - * @param ruleId 运营区id - * @return 结果 - */ - public int deleteModelRuleByRuleId(Long ruleId); +// /** +// * 通过用ruleId删除区域与收费方式关联 +// * +// * @param ruleId 运营区id +// * @return 结果 +// */ +// public int deleteModelRuleByRuleId(Long ruleId); } diff --git a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOrderMapper.java b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOrderMapper.java index f94c774..a46f0e2 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOrderMapper.java +++ b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOrderMapper.java @@ -252,10 +252,15 @@ public interface EtOrderMapper */ BigDecimal getRefundFee(@Param("startDateStr") String startDateStr , @Param("endDateStr") String endDateStr, @Param("sn") String sn, @Param("areaId") Long areaId); + /** + * 已退款 + */ + BigDecimal getRefundFee2(@Param("startDateStr") String startDateStr , @Param("endDateStr") String endDateStr, @Param("sn") String sn, @Param("areaId") Long areaId,@Param("channelId") Long channelId); + /** * 押金退款 */ - BigDecimal getDepositRefundFee(@Param("startDateStr") String startDateStr , @Param("endDateStr") String endDateStr, @Param("sn") String sn, @Param("areaId") Long areaId); + BigDecimal getDepositRefundFee(@Param("startDateStr") String startDateStr , @Param("endDateStr") String endDateStr, @Param("sn") String sn, @Param("areaId") Long areaId,@Param("channelId") Long channelId); /** * 收入 @@ -313,7 +318,7 @@ public interface EtOrderMapper /** * 押金订单收入 */ - BigDecimal getDepositAmount(@Param("startDateStr") String startDateStr , @Param("endDateStr") String endDateStr, @Param("areaId") Long areaId); + BigDecimal getDepositAmount(@Param("startDateStr") String startDateStr , @Param("endDateStr") String endDateStr, @Param("areaId") Long areaId,@Param("channelId") Long channelId); // /** // * 平台服务费 @@ -344,4 +349,15 @@ public interface EtOrderMapper * 押金抵扣不成功的修复 */ List deductionErrorOrderList(); + + /** + * 平台对账--总支付流水(包含订单+押金) + */ + BigDecimal getTotalPaidFee(@Param("startDateStr") String startDateStr , @Param("endDateStr") String endDateStr ,@Param("areaId") Long areaId,@Param("channelId") Long channelId); + + /** + * 平台对账--押金抵扣金额 + */ + BigDecimal getDepositDeductionAmount(@Param("startDateStr") String startDateStr , @Param("endDateStr") String endDateStr ,@Param("areaId") Long areaId,@Param("channelId") Long channelId); + } diff --git a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtReconciliationMapper.java b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtReconciliationMapper.java new file mode 100644 index 0000000..57cb6f0 --- /dev/null +++ b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtReconciliationMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.EtReconciliation; + +/** + * 平台对账Mapper接口 + * + * @author qzz + * @date 2024-10-03 + */ +public interface EtReconciliationMapper +{ + /** + * 查询平台对账 + * + * @param reconciliationId 平台对账主键 + * @return 平台对账 + */ + public EtReconciliation selectEtReconciliationByReconciliationId(Long reconciliationId); + + /** + * 查询平台对账列表 + * + * @param etReconciliation 平台对账 + * @return 平台对账集合 + */ + public List selectEtReconciliationList(EtReconciliation etReconciliation); + + /** + * 新增平台对账 + * + * @param etReconciliation 平台对账 + * @return 结果 + */ + public int insertEtReconciliation(EtReconciliation etReconciliation); + + /** + * 修改平台对账 + * + * @param etReconciliation 平台对账 + * @return 结果 + */ + public int updateEtReconciliation(EtReconciliation etReconciliation); + + /** + * 删除平台对账 + * + * @param reconciliationId 平台对账主键 + * @return 结果 + */ + public int deleteEtReconciliationByReconciliationId(Long reconciliationId); + + /** + * 批量删除平台对账 + * + * @param reconciliationIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteEtReconciliationByReconciliationIds(Long[] reconciliationIds); +} diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/IEtOrderService.java b/electripper-system/src/main/java/com/ruoyi/system/service/IEtOrderService.java index 6c193cf..9aa1163 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/IEtOrderService.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/IEtOrderService.java @@ -154,6 +154,12 @@ public interface IEtOrderService */ ReconciliationVo reconciliation(String timeStart, String timeEnd, String type,String sn,String areaId); + + /** + * 平台对账 + */ + List selfReconciliation(String timeStart, String timeEnd, String areaId); + /** * 最近一笔订单 */ diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/IEtReconciliationService.java b/electripper-system/src/main/java/com/ruoyi/system/service/IEtReconciliationService.java new file mode 100644 index 0000000..b4546c8 --- /dev/null +++ b/electripper-system/src/main/java/com/ruoyi/system/service/IEtReconciliationService.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.EtReconciliation; + +/** + * 平台对账Service接口 + * + * @author qzz + * @date 2024-10-03 + */ +public interface IEtReconciliationService +{ + /** + * 查询平台对账 + * + * @param reconciliationId 平台对账主键 + * @return 平台对账 + */ + public EtReconciliation selectEtReconciliationByReconciliationId(Long reconciliationId); + + /** + * 查询平台对账列表 + * + * @param etReconciliation 平台对账 + * @return 平台对账集合 + */ + public List selectEtReconciliationList(EtReconciliation etReconciliation); + + /** + * 新增平台对账 + * + * @param etReconciliation 平台对账 + * @return 结果 + */ + public int insertEtReconciliation(EtReconciliation etReconciliation); + + /** + * 修改平台对账 + * + * @param etReconciliation 平台对账 + * @return 结果 + */ + public int updateEtReconciliation(EtReconciliation etReconciliation); + + /** + * 批量删除平台对账 + * + * @param reconciliationIds 需要删除的平台对账主键集合 + * @return 结果 + */ + public int deleteEtReconciliationByReconciliationIds(Long[] reconciliationIds); + + /** + * 删除平台对账信息 + * + * @param reconciliationId 平台对账主键 + * @return 结果 + */ + public int deleteEtReconciliationByReconciliationId(Long reconciliationId); +} diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtFeeRuleServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtFeeRuleServiceImpl.java index 7258176..07494bb 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtFeeRuleServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtFeeRuleServiceImpl.java @@ -167,10 +167,10 @@ public class EtFeeRuleServiceImpl implements IEtFeeRuleService @Override public int updateEtFeeRule(EtFeeRule etFeeRule) { - int i = etModelRuleMapper.deleteModelRuleByModelId(etFeeRule.getRuleId()); - if(ObjectUtil.isNotNull(etFeeRule.getModelId()) && etFeeRule.getModelId() != 0){ - etModelRuleMapper.insert(EtModelRule.builder().modelId(etFeeRule.getModelId()).ruleId(etFeeRule.getRuleId()).build()); - } +// int i = etModelRuleMapper.deleteModelRuleByModelId(etFeeRule.getRuleId()); +// if(ObjectUtil.isNotNull(etFeeRule.getModelId()) && etFeeRule.getModelId() != 0){ +// etModelRuleMapper.insert(EtModelRule.builder().modelId(etFeeRule.getModelId()).ruleId(etFeeRule.getRuleId()).build()); +// } return etFeeRuleMapper.updateEtFeeRule(etFeeRule); } diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java index f37b97d..fa50a2e 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java @@ -1406,7 +1406,10 @@ public class EtOrderServiceImpl implements IEtOrderService */ @Override public OperatingDataVo2 getOperatingData2(String timeStart,String timeEnd,String areaId) { - long aLong = Long.parseLong(areaId); + long aLong = 0; + if(StrUtil.isNotBlank(areaId)){ + aLong = Long.parseLong(areaId); + } OperatingDataVo2 operatingDataVo = new OperatingDataVo2(); if(StrUtil.isNotBlank(timeStart) && StrUtil.isNotBlank(timeEnd)){ /*收入相关*/ @@ -1414,7 +1417,7 @@ public class EtOrderServiceImpl implements IEtOrderService /** 总收入*/ BigDecimal totalAmount = defaultIfNull(etCapitalFlowMapper.getTotalAmount(timeStart, timeEnd, null, aLong),BigDecimal.ZERO);// 骑行订单收入 BigDecimal deductionAmount = defaultIfNull(etCapitalFlowMapper.getDeductionAmount(timeStart, timeEnd, null, aLong),BigDecimal.ZERO);// 押金抵扣金额 - BigDecimal depositAmount = defaultIfNull(etOrderMapper.getDepositAmount(timeStart, timeEnd, aLong),BigDecimal.ZERO);// 押金收入 + BigDecimal depositAmount = defaultIfNull(etOrderMapper.getDepositAmount(timeStart, timeEnd, aLong,null),BigDecimal.ZERO);// 押金收入 25123 BigDecimal totalFlowAmount = totalAmount.add(depositAmount).add(deductionAmount);// 总流水 income.setTotalFlowAmount(totalFlowAmount); income.setDeductionAmount(deductionAmount); @@ -1423,9 +1426,9 @@ public class EtOrderServiceImpl implements IEtOrderService /** 总支出*/ BigDecimal refundFee = defaultIfNull(etOrderMapper.getRefundFee(timeStart, timeEnd, null, aLong), BigDecimal.ZERO);//订单退款 - BigDecimal depositRefundFee = defaultIfNull(etOrderMapper.getDepositRefundFee(timeStart, timeEnd, null, aLong), BigDecimal.ZERO);//押金退款 - BigDecimal serviceFee = defaultIfNull(etCapitalFlowMapper.getHandlingFee(timeStart, timeEnd, null, Long.parseLong(areaId)),BigDecimal.ZERO);//手续费,扣除掉退款部分的 - BigDecimal platformServiceFee = defaultIfNull(etCapitalFlowMapper.getServiceFee(timeStart, timeEnd, null,Long.parseLong(areaId)),BigDecimal.ZERO);//平台服务费 ,扣除掉退款部分的 + BigDecimal depositRefundFee = defaultIfNull(etOrderMapper.getDepositRefundFee(timeStart, timeEnd, null, aLong,null), BigDecimal.ZERO);//押金退款 24795 + BigDecimal serviceFee = defaultIfNull(etCapitalFlowMapper.getHandlingFee(timeStart, timeEnd, null, aLong),BigDecimal.ZERO);//手续费,扣除掉退款部分的 + BigDecimal platformServiceFee = defaultIfNull(etCapitalFlowMapper.getServiceFee(timeStart, timeEnd, null,aLong),BigDecimal.ZERO);//平台服务费 ,扣除掉退款部分的 BigDecimal totalExpenditure = defaultIfNull(refundFee.add(depositRefundFee).add(serviceFee).add(platformServiceFee), BigDecimal.ZERO); income.setOrderRefund(refundFee); @@ -1605,6 +1608,72 @@ public class EtOrderServiceImpl implements IEtOrderService return reconciliationVo; } + /** + * 平台对账 + * */ + @SneakyThrows + @Override + public List selfReconciliation(String timeStart, String timeEnd, String areaId) { + long aLong = 0; +// if(StrUtil.isNotBlank(areaId)){ +// aLong = Long.parseLong(areaId); +// } +// if(StrUtil.isNotBlank(timeStart) && StrUtil.isNotBlank(timeEnd)){ +// List selfReconciliationVOS = new ArrayList<>(); +// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); +// int limit = DateUtils.differentDaysByMillisecond(timeStart, timeEnd) + 1; +// +// Calendar calendar = Calendar.getInstance(); +// calendar.setTime(dateFormat.parse(timeEnd)); +// +// for (int i = 0; i < limit; i++) { +// SelfReconciliationVO selfReconciliationVO = new SelfReconciliationVO(); +// String formattedDate = dateFormat.format(calendar.getTime()); +// String startDateStr = formattedDate + " " + Constants.DATE_FORMAT_START_PEREND; +// String endDateStr = formattedDate + " " + Constants.DATE_FORMAT_END_PEREND; +// +// /** 总收入*/ +// selfReconciliationVO.setDay(formattedDate); +// BigDecimal totalFlowAmount = defaultIfNull(etOrderMapper.getTotalPaidFee(startDateStr, endDateStr, aLong),BigDecimal.ZERO);// 骑行订单收入 29835.51 +// BigDecimal totalAmount = defaultIfNull(etCapitalFlowMapper.getOrderPaidAmount(startDateStr, endDateStr, aLong),BigDecimal.ZERO);// 骑行订单收入 4712.51 +// BigDecimal deductionAmount = defaultIfNull(etOrderMapper.getDepositDeductionAmount(startDateStr, endDateStr, aLong),BigDecimal.ZERO);// 押金抵扣金额 538 +// BigDecimal depositAmount = defaultIfNull(etOrderMapper.getDepositAmount(startDateStr, endDateStr, aLong),BigDecimal.ZERO);// 押金收入 25123 +// BigDecimal handlingFee = etCapitalFlowMapper.getHandlingFee(startDateStr, endDateStr, null, aLong);//手续费,扣除掉退款部分的 +// BigDecimal platformServiceFee = etCapitalFlowMapper.getServiceFee(startDateStr, endDateStr, null,aLong);//平台服务费 ,扣除掉退款部分的 +// +// selfReconciliationVO.setOrderPaid(totalAmount); +// selfReconciliationVO.setTotalFlowAmount(totalFlowAmount); +// selfReconciliationVO.setDeductionAmount(deductionAmount); +// selfReconciliationVO.setDepositPaid(depositAmount); +// selfReconciliationVO.setHandlingCharge(handlingFee); +// selfReconciliationVO.setPlatformServiceFee(platformServiceFee); +// +// /** 总支出*/ +// BigDecimal orderRefund = defaultIfNull(etOrderMapper.getRefundFee(startDateStr, endDateStr, null, aLong), BigDecimal.ZERO);//订单退款 +// BigDecimal depositRefundFee = defaultIfNull(etOrderMapper.getDepositRefundFee(startDateStr, endDateStr, null, aLong), BigDecimal.ZERO);//押金退款 24795 25386 +// // depositChange 等于depositAmount减去deductionAmount减去depositRefundFee +// selfReconciliationVO.setDepositChange(depositAmount.subtract(deductionAmount).subtract(depositRefundFee)); +// // 统计所有用户今日账变 进账 +// BigDecimal userReceipts = defaultIfNull(etCapitalFlowMapper.getAllUserReceipts(startDateStr, endDateStr, aLong),BigDecimal.ZERO); +// +// selfReconciliationVO.setOrderRefund(orderRefund); +// selfReconciliationVO.setDepositRefund(depositRefundFee); +// BigDecimal depositBalance = depositAmount.subtract(depositRefundFee).subtract(deductionAmount); +// selfReconciliationVO.setDepositBalance(depositBalance); +// selfReconciliationVO.setUserReceipts(userReceipts); +// // 结算金额等于totalFlowAmount减去orderRefund减去depositRefundFee +// selfReconciliationVO.setSettlementAmount(totalFlowAmount.subtract(orderRefund).subtract(depositRefundFee)); +// calendar.add(Calendar.DATE, -1); +// +// selfReconciliationVOS.add(selfReconciliationVO); +// } +// return selfReconciliationVOS; +// }else{ +// throw new ServiceException("请选择时间"); +// } + return null; + } + private ReconciliationVo handleReconciliationByDate(String timeStart, String timeEnd, List reconciliations,String areaId) throws Exception { ReconciliationVo reconciliationVo = new ReconciliationVo(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtReconciliationServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtReconciliationServiceImpl.java new file mode 100644 index 0000000..201eab7 --- /dev/null +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtReconciliationServiceImpl.java @@ -0,0 +1,95 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.EtReconciliationMapper; +import com.ruoyi.system.domain.EtReconciliation; +import com.ruoyi.system.service.IEtReconciliationService; + +/** + * 平台对账Service业务层处理 + * + * @author qzz + * @date 2024-10-03 + */ +@Service +public class EtReconciliationServiceImpl implements IEtReconciliationService +{ + @Autowired + private EtReconciliationMapper etReconciliationMapper; + + /** + * 查询平台对账 + * + * @param reconciliationId 平台对账主键 + * @return 平台对账 + */ + @Override + public EtReconciliation selectEtReconciliationByReconciliationId(Long reconciliationId) + { + return etReconciliationMapper.selectEtReconciliationByReconciliationId(reconciliationId); + } + + /** + * 查询平台对账列表 + * + * @param etReconciliation 平台对账 + * @return 平台对账 + */ + @Override + public List selectEtReconciliationList(EtReconciliation etReconciliation) + { + return etReconciliationMapper.selectEtReconciliationList(etReconciliation); + } + + /** + * 新增平台对账 + * + * @param etReconciliation 平台对账 + * @return 结果 + */ + @Override + public int insertEtReconciliation(EtReconciliation etReconciliation) + { + etReconciliation.setCreateTime(DateUtils.getNowDate()); + return etReconciliationMapper.insertEtReconciliation(etReconciliation); + } + + /** + * 修改平台对账 + * + * @param etReconciliation 平台对账 + * @return 结果 + */ + @Override + public int updateEtReconciliation(EtReconciliation etReconciliation) + { + return etReconciliationMapper.updateEtReconciliation(etReconciliation); + } + + /** + * 批量删除平台对账 + * + * @param reconciliationIds 需要删除的平台对账主键 + * @return 结果 + */ + @Override + public int deleteEtReconciliationByReconciliationIds(Long[] reconciliationIds) + { + return etReconciliationMapper.deleteEtReconciliationByReconciliationIds(reconciliationIds); + } + + /** + * 删除平台对账信息 + * + * @param reconciliationId 平台对账主键 + * @return 结果 + */ + @Override + public int deleteEtReconciliationByReconciliationId(Long reconciliationId) + { + return etReconciliationMapper.deleteEtReconciliationByReconciliationId(reconciliationId); + } +} diff --git a/electripper-system/src/main/java/com/ruoyi/system/task/EtTask.java b/electripper-system/src/main/java/com/ruoyi/system/task/EtTask.java index 27b1717..e3c875a 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/task/EtTask.java +++ b/electripper-system/src/main/java/com/ruoyi/system/task/EtTask.java @@ -26,9 +26,11 @@ import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.system.domain.*; import com.ruoyi.system.domain.vo.AsDeviceVO; import com.ruoyi.system.domain.vo.OperatingDataVo; +import com.ruoyi.system.domain.vo.SelfReconciliationVO; import com.ruoyi.system.mapper.*; import com.ruoyi.system.service.*; import com.wechat.pay.java.service.refund.model.Refund; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; @@ -43,6 +45,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; @@ -105,6 +108,15 @@ public class EtTask { @Resource private EtCouponClaimLogMapper etCouponClaimLogMapper; + @Resource + private EtCapitalFlowMapper etCapitalFlowMapper; + + @Resource + private EtReconciliationMapper etReconciliationMapper; + + @Autowired + private EtChannelService smEtChannelService; + @Value(value = "${iot.deviceUrl}") private String deviceUrl; @@ -795,4 +807,94 @@ public class EtTask { } } } + + + /** + * 平台对账 + * */ + @SneakyThrows + public void selfReconciliation(String timeStart, String timeEnd, String areaId) { + long aLong = 0; + if(StrUtil.isNotBlank(areaId)){ + aLong = Long.parseLong(areaId); + } + if(StrUtil.isNotBlank(timeStart) && StrUtil.isNotBlank(timeEnd)){ + List channelVOS = smEtChannelService.selectSmChannelList(new ChannelQuery()); + for (ChannelVO channel:channelVOS) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + int limit = DateUtils.differentDaysByMillisecond(timeStart, timeEnd) + 1; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dateFormat.parse(timeEnd)); + for (int i = 0; i < limit; i++) { + String formattedDate = dateFormat.format(calendar.getTime()); + String startDateStr = formattedDate + " " + Constants.DATE_FORMAT_START_PEREND; + String endDateStr = formattedDate + " " + Constants.DATE_FORMAT_END_PEREND; + /** 总收入*/ + SelfReconciliationVO selfReconciliationVO = buildSelfReconciliation(startDateStr,endDateStr, formattedDate,aLong,channel.getChannelId()); + // 保存 + saveRecon(formattedDate, selfReconciliationVO,channel.getChannelId()); + calendar.add(Calendar.DATE, -1); + } + } + }else{ + throw new ServiceException("请选择时间"); + } + } + + private SelfReconciliationVO buildSelfReconciliation(String startDateStr, String endDateStr, String formattedDate, Long aLong, Long channelId) { + SelfReconciliationVO selfReconciliationVO = new SelfReconciliationVO(); + selfReconciliationVO.setDay(formattedDate); + BigDecimal totalFlowAmount = defaultIfNull(etOrderMapper.getTotalPaidFee(startDateStr, endDateStr, aLong,channelId),BigDecimal.ZERO);// 骑行订单收入 29835.51 + BigDecimal totalAmount = defaultIfNull(etCapitalFlowMapper.getOrderPaidAmount(startDateStr, endDateStr, aLong,channelId),BigDecimal.ZERO);// 骑行订单收入 4712.51 + BigDecimal deductionAmount = defaultIfNull(etOrderMapper.getDepositDeductionAmount(startDateStr, endDateStr, aLong,channelId),BigDecimal.ZERO);// 押金抵扣金额 538 + BigDecimal depositAmount = defaultIfNull(etOrderMapper.getDepositAmount(startDateStr, endDateStr, aLong,channelId),BigDecimal.ZERO);// 押金收入 25123 + BigDecimal handlingFee = etCapitalFlowMapper.getHandlingFee2(startDateStr, endDateStr, null, aLong,channelId);//手续费,扣除掉退款部分的 + BigDecimal platformServiceFee = etCapitalFlowMapper.getServiceFee2(startDateStr, endDateStr, null,aLong,channelId);//平台服务费 ,扣除掉退款部分的 + + selfReconciliationVO.setOrderPaid(totalAmount); + selfReconciliationVO.setTotalFlowAmount(totalFlowAmount); + selfReconciliationVO.setDeductionAmount(deductionAmount); + selfReconciliationVO.setDepositPaid(depositAmount); + selfReconciliationVO.setHandlingCharge(handlingFee); + selfReconciliationVO.setPlatformServiceFee(platformServiceFee); + + /** 总支出*/ + BigDecimal orderRefund = defaultIfNull(etOrderMapper.getRefundFee2(startDateStr, endDateStr, null, aLong,channelId), BigDecimal.ZERO);//订单退款 + BigDecimal depositRefundFee = defaultIfNull(etOrderMapper.getDepositRefundFee(startDateStr, endDateStr, null, aLong,channelId), BigDecimal.ZERO);//押金退款 24795 25386 + // depositChange 等于depositAmount减去deductionAmount减去depositRefundFee + selfReconciliationVO.setDepositChange(depositAmount.subtract(deductionAmount).subtract(depositRefundFee)); + // 统计所有用户今日账变 进账 + BigDecimal userReceipts = defaultIfNull(etCapitalFlowMapper.getAllUserReceipts(startDateStr, endDateStr, aLong,channelId),BigDecimal.ZERO); + + selfReconciliationVO.setOrderRefund(orderRefund); + selfReconciliationVO.setDepositRefund(depositRefundFee); + BigDecimal depositBalance = depositAmount.subtract(depositRefundFee).subtract(deductionAmount); + selfReconciliationVO.setDepositBalance(depositBalance); + selfReconciliationVO.setUserReceipts(userReceipts); + // 结算金额等于totalFlowAmount减去orderRefund减去depositRefundFee + selfReconciliationVO.setSettlementAmount(totalFlowAmount.subtract(orderRefund).subtract(depositRefundFee)); + return selfReconciliationVO; + } + + private void saveRecon(String formattedDate,SelfReconciliationVO selfReconciliationVO,Long channelId) { + EtReconciliation etReconciliation = new EtReconciliation(); + etReconciliation.setDay(formattedDate); + etReconciliation.setTotalAmount(selfReconciliationVO.getTotalFlowAmount()); + etReconciliation.setHandlingCharge(selfReconciliationVO.getHandlingCharge()); + etReconciliation.setPlatformServiceFee(selfReconciliationVO.getPlatformServiceFee()); + etReconciliation.setDepositPaid(selfReconciliationVO.getDepositPaid()); + etReconciliation.setOrderPaid(selfReconciliationVO.getOrderPaid()); + etReconciliation.setDepositRefund(selfReconciliationVO.getDepositRefund()); + etReconciliation.setDeductionAmount(selfReconciliationVO.getDeductionAmount()); + etReconciliation.setUserReceipts(selfReconciliationVO.getUserReceipts()); + etReconciliation.setSettlementAmount(selfReconciliationVO.getSettlementAmount()); + etReconciliation.setCreateTime(DateUtils.getNowDate()); + etReconciliation.setPayChannel(channelId); + int i1 = etReconciliationMapper.insertEtReconciliation(etReconciliation); + log.info("【平台对账】保存对账数据结果:【{}】",i1); + } + + private BigDecimal defaultIfNull(BigDecimal value, BigDecimal defaultValue) { + return value != null ? value : defaultValue; + } } diff --git a/electripper-system/src/main/resources/mapper/system/EtCapitalFlowMapper.xml b/electripper-system/src/main/resources/mapper/system/EtCapitalFlowMapper.xml index b8d7bc3..68ee473 100644 --- a/electripper-system/src/main/resources/mapper/system/EtCapitalFlowMapper.xml +++ b/electripper-system/src/main/resources/mapper/system/EtCapitalFlowMapper.xml @@ -134,7 +134,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND date_format(f.create_time,'%y%m%d') <= date_format(#{timeEnd},'%y%m%d') - and f.area_id = #{areaId} + and f.area_id = #{areaId} + + + + + + + + + diff --git a/electripper-system/src/main/resources/mapper/system/EtModelRuleMapper.xml b/electripper-system/src/main/resources/mapper/system/EtModelRuleMapper.xml index bafa0a2..0dab463 100644 --- a/electripper-system/src/main/resources/mapper/system/EtModelRuleMapper.xml +++ b/electripper-system/src/main/resources/mapper/system/EtModelRuleMapper.xml @@ -8,7 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" delete from et_model_rule where model_id=#{modelId} - - delete from et_model_rule where rule_id=#{ruleId} - + + + diff --git a/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml b/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml index 3a59e47..dd46649 100644 --- a/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml +++ b/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml @@ -696,10 +696,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and area_id = #{areaId} - AND date_format(create_time,'%y%m%d') >= date_format(#{startDateStr},'%y%m%d') + AND date_format(pay_time,'%y%m%d') >= date_format(#{startDateStr},'%y%m%d') - AND date_format(create_time,'%y%m%d') <= date_format(#{endDateStr},'%y%m%d') + AND date_format(pay_time,'%y%m%d') <= date_format(#{endDateStr},'%y%m%d') AND status = 4 and type = 1 @@ -726,13 +726,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -775,7 +777,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join et_order o on o.order_no = ref.order_no and o.sn = #{sn} - and o.area_id = #{areaId} + and o.area_id = #{areaId} AND date_format(ref.create_time,'%y%m%d') >= date_format(#{startDateStr},'%y%m%d') @@ -786,18 +788,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -1168,5 +1190,71 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where status = 3 and pay_type = 'yj' and pay_time is not null + + + + diff --git a/electripper-system/src/main/resources/mapper/system/EtReconciliationMapper.xml b/electripper-system/src/main/resources/mapper/system/EtReconciliationMapper.xml new file mode 100644 index 0000000..2f3618d --- /dev/null +++ b/electripper-system/src/main/resources/mapper/system/EtReconciliationMapper.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + select reconciliation_id, order_paid, total_amount, deposit_paid, pay_channel, create_time, day, deposit_refund, deduction_amount, handling_charge, user_receipts, settlement_amount, platform_service_fee from et_reconciliation + + + + + + + + insert into et_reconciliation + + order_paid, + total_amount, + deposit_paid, + pay_channel, + create_time, + day, + deposit_refund, + deduction_amount, + handling_charge, + user_receipts, + settlement_amount, + platform_service_fee, + + + #{orderPaid}, + #{totalAmount}, + #{depositPaid}, + #{payChannel}, + #{createTime}, + #{day}, + #{depositRefund}, + #{deductionAmount}, + #{handlingCharge}, + #{userReceipts}, + #{settlementAmount}, + #{platformServiceFee}, + + + + + update et_reconciliation + + order_paid = #{orderPaid}, + total_amount = #{totalAmount}, + deposit_paid = #{depositPaid}, + pay_channel = #{payChannel}, + create_time = #{createTime}, + day = #{day}, + deposit_refund = #{depositRefund}, + deduction_amount = #{deductionAmount}, + handling_charge = #{handlingCharge}, + user_receipts = #{userReceipts}, + settlement_amount = #{settlementAmount}, + platform_service_fee = #{platformServiceFee}, + + where reconciliation_id = #{reconciliationId} + + + + delete from et_reconciliation where reconciliation_id = #{reconciliationId} + + + + delete from et_reconciliation where reconciliation_id in + + #{reconciliationId} + + +