From 1129c4394c86d7b44edd47d6e50d3611e92798d1 Mon Sep 17 00:00:00 2001 From: Administrator <zhubaomin> Date: 星期四, 01 二月 2024 21:46:38 +0800 Subject: [PATCH] 2024-02-01 朱宝民 票据接口,金额转大写,财务对账查询接口 --- pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReceipt.java | 76 ++++++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java | 45 +++ pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java | 37 +++ pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java | 30 ++ pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java | 80 +++++ pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml | 105 ++++++++ pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRefundMapper.xml | 14 + pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java | 53 ++++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java | 21 + pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java | 3 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java | 8 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java | 15 + pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/AmountToChinese.java | 57 ++++ pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml | 80 +++++- pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java | 12 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml | 13 + pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRefundMapper.java | 7 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReceipt.java | 28 ++ 18 files changed, 657 insertions(+), 27 deletions(-) diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java index 1acd2b6..89fa666 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java @@ -124,4 +124,25 @@ * @return */ List<VoReissueCard> getReissueCards(Map<?, ?> params); + + /** + * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃鏁� + * @param params + * @return + */ + Long getReceiptsRecordCount(Map<?, ?> params); + + /*** + * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃 + * @param params + * @return + */ + List<VoReceipt> getReceipts(Map<?, ?> params); + + /** + * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鏀惰垂閲戦鍚堣 + * @param params + * @return + */ + Double getTotalAmount(Map<?, ?> params); } \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java index 0e230af..be931a5 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeGeneralMapper.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoSe.SeGeneral; import com.dy.pipIrrGlobal.voSe.VoGeneral; +import com.dy.pipIrrGlobal.voSe.VoTradeDetails; import com.dy.pipIrrGlobal.voSe.VoTransactionStatistics; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -86,4 +87,18 @@ * @return */ Map getTransactionStatisticsSums(Map<?, ?> params); + + /** + * 鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍鏁� + * @param params + * @return + */ + Long getTradeDetailsRecordCount(Map<?, ?> params); + + /** + * 鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍 + * @param params + * @return + */ + List<VoTradeDetails> getTradeDetails(Map<?, ?> params); } \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRefundMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRefundMapper.java index 5acfd32..f8aba9d 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRefundMapper.java +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRefundMapper.java @@ -50,4 +50,11 @@ * @return */ List<VoWalletRefund> getWalletRefunds(Map<?, ?> params); + + /** + * 鑾峰彇鎸囧畾鏃ユ湡寰俊閫�娆撅紙鍙绠楀凡閫�鐨勶級鎬婚锛岃储鍔″璐﹀鏍搁〉浣跨敤 + * @param tradeDate + * @return + */ + Double getRefundSum(@Param("tradeDate") String tradeDate); } \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java index b7a299c..a417b9e 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeWalletRechargeMapper.java @@ -4,6 +4,7 @@ import com.dy.pipIrrGlobal.pojoSe.SeWalletRecharge; import com.dy.pipIrrGlobal.voSe.VoWalletRecharge; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; @@ -42,4 +43,11 @@ * @return */ List<VoWalletRecharge> getWalletRecharges(Map<?, ?> params); + + /** + * 鑾峰彇鎸囧畾鏃ユ湡寰俊鏀舵鎬婚锛岃储鍔″璐﹀鏍搁〉浣跨敤 + * @param tradeDate + * @return + */ + Double getRechargeSum(@Param("tradeDate") String tradeDate); } \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/AmountToChinese.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/AmountToChinese.java new file mode 100644 index 0000000..ebcb3e0 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/util/AmountToChinese.java @@ -0,0 +1,57 @@ +package com.dy.pipIrrGlobal.util; + +import java.math.BigDecimal; + +/** + * @author ZhuBaoMin + * @date 2024-02-01 9:58 + * @LastEditTime 2024-02-01 9:58 + * @Description 閲戦鏁板瓧杞腑鏂囧ぇ鍐� + */ +public class AmountToChinese { + private static final String[] CN_UPPER_NUMBER = { "闆�", "澹�", "璐�", "鍙�", "鑲�", "浼�", "闄�", "鏌�", "鎹�", "鐜�" }; + private static final String[] CN_UPPER_MONETRAY_UNIT = { "鍒�", "瑙�", "鍏�", "鎷�", "浣�", "浠�", "涓�", "鎷�", "浣�", "浠�", "浜�", "鎷�", "浣�", "浠�" }; + private static final String CN_FULL = "鏁�"; + private static final String CN_NEGATIVE = "璐�"; + private static final int MONEY_PRECISION = 2; + private static final String CN_ZEOR_FULL = "闆跺厓" + CN_FULL; + + public static String toChinese(BigDecimal amount) { + StringBuilder result = new StringBuilder(); + amount = amount.setScale(MONEY_PRECISION, BigDecimal.ROUND_HALF_UP); + long number = amount.movePointRight(MONEY_PRECISION).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); + boolean zero = true; + int unitIndex = 0; + if (number == 0) { + return CN_ZEOR_FULL; + } + if (number < 0) { + number = -number; + result.append(CN_NEGATIVE); + } + long scale = 10; + while (true) { + if (number == 0) { + break; + } + long numIndex = number % scale; + if (zero && numIndex == 0) { + zero = false; + } + if (numIndex != 0) { + result.insert(0, CN_UPPER_MONETRAY_UNIT[unitIndex]) + .insert(0, CN_UPPER_NUMBER[(int) numIndex]); + zero = false; + } + else if (!zero) { + result.insert(0, CN_UPPER_NUMBER[(int) numIndex]); + } + number = number / scale; + unitIndex++; + } + if (zero) { + result.append(CN_FULL); + } + return result.toString(); + } +} diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReceipt.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReceipt.java new file mode 100644 index 0000000..fad9f78 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoReceipt.java @@ -0,0 +1,76 @@ +package com.dy.pipIrrGlobal.voSe; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @author ZhuBaoMin + * @date 2024-02-01 10:36 + * @LastEditTime 2024-02-01 10:36 + * @Description 鏀舵嵁瑙嗗浘瀵硅薄 + */ + +@Data +@Schema(title = "鏀舵嵁瑙嗗浘瀵硅薄") +public class VoReceipt { + private static final long serialVersionUID = 202402011037001L; + + @Schema(title = "鏀堕摱鍛業D") + private String cashierId; + + @Schema(title = "璁㈠崟鍙�") + private String orderNumber; + + @Schema(title = "闀囧悕绉�") + private String townName; + + @Schema(title = "鏉戝悕绉�") + private String villageName; + + @Schema(title = "鍐滄埛濮撳悕") + private String name; + + @Schema(title = "鐢佃瘽") + private String phone; + + @Schema(title = "鍐滄埛缂栧彿") + private String clientNum; + + @Schema(title = "姘村崱缂栧彿") + private String cardNum; + + @Schema(title = "涓氬姟绫诲瀷") + private String operateType; + + @Schema(title = "璐按閲戦") + private Double waterCost; + + @Schema(title = "璐崱閲戦") + private Double cardCost; + + @Schema(title = "鏀惰垂閲戦") + private Double amount; + + @Schema(title = "姘村崱浣欓") + private Double money; + + @Schema(title = "鏀粯鏂瑰紡") + private String paymentName; + + @Schema(title = "鎿嶄綔浜�") + private String operatorName; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(title = "鎿嶄綔鏃堕棿") + private Date operateTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(title = "褰撳墠鏃堕棿") + private Date currentTime; +} diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java new file mode 100644 index 0000000..7940161 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTradeDetails.java @@ -0,0 +1,45 @@ +package com.dy.pipIrrGlobal.voSe; + +import com.dy.common.po.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @author ZhuBaoMin + * @date 2024-02-01 20:38 + * @LastEditTime 2024-02-01 20:38 + * @Description + */ + +@Data +@Schema(title = "璐㈠姟瀵硅处锛屼氦鏄撴槑缁嗚鍥惧璞�") +public class VoTradeDetails implements BaseEntity { + private static final long serialVersionUID = 202402012040001L; + + @Schema(title = "鍐滄埛濮撳悕") + private String clientName; + + @Schema(title = "鑱旂郴鐢佃瘽") + private String phone; + + @Schema(title = "鍐滄埛缂栧彿") + private String clientNum; + + @Schema(title = "涓氬姟绫诲瀷") + private String operateType; + + @Schema(title = "浜ゆ槗閲戦") + private Double tradeAmount; + + @Schema(title = "浠樻鏂瑰紡") + private String paymentName; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(title = "浜ゆ槗鏃堕棿") + private Date tradeDate; +} diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java index 03d0d9e..bf77769 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java @@ -30,4 +30,7 @@ @Schema(title = "璧犻�侀噾棰�") private Float gift; + + @Schema(title = "鏀堕摱鍛業D") + private String cashierId; } diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml index 56eb07e..3e2189a 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml @@ -589,4 +589,109 @@ </if> </trim> </select> + + <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃鏁�--> + <select id="getReceiptsRecordCount" parameterType="java.util.Map" resultType="java.lang.Long"> + SELECT + COUNT(*) AS recordCount + FROM se_card_operate ope + INNER JOIN se_client cli ON ope.client_id = cli.id + INNER JOIN se_client_card card ON ope.card_id = card.id + INNER JOIN se_payment_method pay ON ope.payment_id = pay.id + INNER JOIN ba_user us ON ope.operator = us.id + INNER JOIN ba_district vil ON cli.villageId = vil.id + INNER JOIN ba_district tow ON cli.townId = tow.id + <where> + AND ope.operate_type IN(1,2) + <if test = "operateId != null and operateId > 0"> + AND ope.id = ${operateId} + </if> + + <if test = "clientName != null and clientName !=''"> + AND cli.name like CONCAT('%',#{clientName},'%') + </if> + + <if test = "timeStart != null and timeStop != null"> + AND ope.operate_dt BETWEEN #{timeStart} AND #{timeStop} + </if> + </where> + </select> + + <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃--> + <select id="getReceipts" resultType="com.dy.pipIrrGlobal.voSe.VoReceipt"> + SELECT + CAST(ope.id AS char) AS orderNumber, + tow.name AS townName, + vil.name AS villageName, + cli.`name`, + cli.phone, + CAST(cli.clientNum AS char) AS clientNum, + CAST(card.cardNum AS char) AS cardNum, + (CASE + WHEN ope.operate_type = 1 THEN '寮�鍗�' + WHEN ope.operate_type = 2 THEN '鍏呭��' + END) AS operateType, + IFNULL(ope.trade_amount,0) AS waterCost, + IFNULL(ope.card_cost,0) AS cardCost, + (IFNULL(ope.trade_amount,0) + IFNULL(ope.card_cost,0)) AS amount, + card.money, + pay.`name` AS paymentName, + us.`name` AS operatorName, + ope.operate_dt AS operateTime, + NOW() AS currentTime + FROM se_card_operate ope + INNER JOIN se_client cli ON ope.client_id = cli.id + INNER JOIN se_client_card card ON ope.card_id = card.id + INNER JOIN se_payment_method pay ON ope.payment_id = pay.id + INNER JOIN ba_user us ON ope.operator = us.id + INNER JOIN ba_district vil ON cli.villageId = vil.id + INNER JOIN ba_district tow ON cli.townId = tow.id + <where> + AND ope.operate_type IN(1,2) + <if test = "operateId != null and operateId > 0"> + AND ope.id = ${operateId} + </if> + + <if test = "clientName != null and clientName !=''"> + AND cli.name like CONCAT('%',#{clientName},'%') + </if> + + <if test = "timeStart != null and timeStop != null"> + AND ope.operate_dt BETWEEN #{timeStart} AND #{timeStop} + </if> + </where> + ORDER BY ope.operate_dt DESC + <trim prefix="limit " > + <if test="start != null and count != null"> + #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} + </if> + </trim> + </select> + + <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鏀惰垂閲戦鍚堣--> + <select id="getTotalAmount" parameterType="java.util.Map" resultType="java.lang.Double"> + SELECT + SUM(IFNULL(ope.trade_amount,0) + IFNULL(ope.card_cost,0)) AS totalAmount + FROM se_card_operate ope + INNER JOIN se_client cli ON ope.client_id = cli.id + INNER JOIN se_client_card card ON ope.card_id = card.id + INNER JOIN se_payment_method pay ON ope.payment_id = pay.id + INNER JOIN ba_user us ON ope.operator = us.id + INNER JOIN ba_district vil ON cli.villageId = vil.id + INNER JOIN ba_district tow ON cli.townId = tow.id + <where> + AND ope.operate_type IN(1,2) + <if test = "operateId != null and operateId > 0"> + AND ope.id = ${operateId} + </if> + + <if test = "clientName != null and clientName !=''"> + AND cli.name like CONCAT('%',#{clientName},'%') + </if> + + <if test = "timeStart != null and timeStop != null"> + AND ope.operate_dt BETWEEN #{timeStart} AND #{timeStop} + </if> + </where> + </select> </mapper> \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml index 72fcf0f..826c8f0 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml @@ -146,17 +146,45 @@ <!--鏍规嵁浜ゆ槗鏃ユ湡鑾峰彇鎬昏处璁板綍鍒楄〃锛堝緟鐢熸垚鐨勶級 --> <select id="getGeneralByOperateDate" resultType="com.dy.pipIrrGlobal.pojoSe.SeGeneral"> SELECT - us.id AS cashierId, - us.`name` AS cashierName, - IFNULL(SUM(ope.trade_amount),0) AS tradeAmount, - IFNULL(SUM(ope.gift),0) AS gift, - IFNULL((SUM(ope.trade_amount) + SUM(ope.gift)),0) AS totalAmount, - Date(ope.operate_dt) AS operateDate, - 1 AS auditStatus + us.id AS cashierId, + us.`name` AS cashierName, + IFNULL(SUM(ope.trade_amount),0) AS tradeAmount, + IFNULL(SUM(ope.gift),0) AS gift, + IFNULL((SUM(ope.trade_amount) + SUM(ope.gift)),0) AS totalAmount, + Date(ope.operate_dt) AS operateDate, + 1 AS auditStatus FROM se_card_operate ope - INNER JOIN ba_user us ON ope.operator = us.id + INNER JOIN ba_user us ON ope.operator = us.id WHERE Date(ope.operate_dt) = #{operateDate} GROUP BY ope.operator, Date(ope.operate_dt) + + UNION ALL + + SELECT + 1000000 AS cashierId, + '寰俊' AS cashierName, + IFNULL(SUM(amount), 0) AS tradeAmount, + 0 AS gift, + IFNULL(SUM(amount), 0) AS totalAmount, + Date(recharge_time) AS operateDate, + 1 AS auditStatus + FROM se_wallet_recharge + WHERE Date(recharge_time) = #{operateDate} + GROUP BY Date(recharge_time) + + UNION ALL + + SELECT + 1000000 AS cashierId, + '寰俊' AS cashierName, + IFNULL(-SUM(refund_amount), 0) AS tradeAmount, + 0 AS gift, + IFNULL(-SUM(refund_amount), 0) AS totalAmount, + Date(audit_time) AS operateDate, + 1 AS auditStatus + FROM se_refund + WHERE Date(audit_time) = #{operateDate} + GROUP BY Date(audit_time) </select> <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鎬昏处璁板綍鏁�--> @@ -271,7 +299,7 @@ </where> </select> - <!--璐㈠姟瀵硅处瀹℃牳椤碉紝鏀堕摱鍛�+鏃ユ湡鍒嗙粍锛屾帓闄や氦鏄撶被鍨嬪垎缁�--> + <!--璐㈠姟瀵硅处瀹℃牳椤碉紝鏀堕摱鍛�+鏃ユ湡+绫诲瀷鍒嗙粍锛屾帓闄や氦鏄撶被鍨嬪垎缁�--> <select id="getToAudit" resultType="com.dy.pipIrrGlobal.voSe.VoTransactionStatistics"> SELECT * FROM v_transactionstatistics2 <where> @@ -284,8 +312,36 @@ </if> </where> ORDER BY tradeDate - <if test="pageCurr != null and pageSize != null"> - LIMIT ${pageCurr}, ${pageSize} - </if> + </select> + + <!-- 鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍鏁�--> + <select id="getTradeDetailsRecordCount" parameterType="java.util.Map" resultType="java.lang.Long"> + SELECT + COUNT(*) AS recordCount + FROM v_trade_details + <where> + <if test = "cashierId != null and cashierId > 0"> + AND cashierId = ${cashierId} + </if> + + <if test = "tradeDate != null"> + AND tradeDate = #{tradeDate} + </if> + </where> + </select> + + <!--鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍--> + <select id="getTradeDetails" resultType="com.dy.pipIrrGlobal.voSe.VoTradeDetails"> + SELECT * FROM v_trade_details + <where> + <if test = "cashierId != null and cashierId > 0"> + AND cashierId = ${cashierId} + </if> + + <if test = "tradeDate != null"> + AND tradeDate = #{tradeDate} + </if> + </where> + ORDER BY tradeDate </select> </mapper> \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRefundMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRefundMapper.xml index 5fc7a50..e928160 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRefundMapper.xml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRefundMapper.xml @@ -229,4 +229,18 @@ </if> </trim> </select> + + <!--鑾峰彇鎸囧畾鏃ユ湡寰俊閫�娆撅紙鍙绠楀凡閫�鐨勶級鎬婚锛岃储鍔″璐﹀鏍搁〉浣跨敤--> + <select id="getRefundSum" resultType="java.lang.Double"> + SELECT + SUM(refund_amount) AS tradeAmount + FROM se_refund + <where> + AND refund_status = 2 + <if test = "tradeDate != null and tradeDate !=''"> + AND Date(audit_time) = #{tradeDate} + </if> + </where> + GROUP BY Date(audit_time) + </select> </mapper> \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml index cb9d41c..149a21a 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeWalletRechargeMapper.xml @@ -176,4 +176,17 @@ </if> </trim> </select> + + <!--鑾峰彇鎸囧畾鏃ユ湡寰俊鏀舵鎬婚锛岃储鍔″璐﹀鏍搁〉浣跨敤--> + <select id="getRechargeSum" resultType="java.lang.Double"> + SELECT + SUM(amount) AS tradeAmount + FROM se_wallet_recharge + <where> + <if test = "tradeDate != null and tradeDate !=''"> + AND Date(recharge_time) = #{tradeDate} + </if> + </where> + GROUP BY Date(recharge_time) + </select> </mapper> \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java index 13c1a20..1d3691f 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java @@ -8,11 +8,9 @@ import com.dy.pipIrrGlobal.pojoBa.BaClient; import com.dy.pipIrrGlobal.pojoSe.SeCardOperate; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; +import com.dy.pipIrrGlobal.util.AmountToChinese; import com.dy.pipIrrGlobal.util.Constant; -import com.dy.pipIrrGlobal.voSe.VoActiveCard; -import com.dy.pipIrrGlobal.voSe.VoActiveCardNew; -import com.dy.pipIrrGlobal.voSe.VoRecharge; -import com.dy.pipIrrGlobal.voSe.VoReissueCard; +import com.dy.pipIrrGlobal.voSe.*; import com.dy.pipIrrSell.cardOperate.converter.RechargeDtoMapper; import com.dy.pipIrrSell.cardOperate.dto.*; import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM; @@ -35,6 +33,7 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; import java.time.format.DateTimeFormatter; import java.util.*; @@ -913,4 +912,50 @@ } } + /** + * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃 + * @param vo + * @return + */ + @Operation(summary = "鑾峰彇鏀舵嵁璁板綍", description = "杩斿洖鏀舵嵁璁板綍") + @ApiResponses(value = { + @ApiResponse( + responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, + description = "杩斿洖涓�椤佃ˉ鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�", + content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema(implementation = VoActiveCard.class))} + ) + }) + @GetMapping(path = "/get_receipts") + @SsoAop() + public BaseResponse<Map> getReceipts(QoReceipt vo){ + try { + Map res = Optional.ofNullable(cardOperateSv.getReceipts(vo)).orElse(new HashMap()); + if(res.size() == 0) { + return BaseResponseUtils.buildFail(SellResultCode.No_RECEIPTS.getMessage()); + } + return BaseResponseUtils.buildSuccess(res); + } catch (Exception e) { + log.error("鑾峰彇鐢靛瓙閽卞寘璐︽埛璁板綍", e); + return BaseResponseUtils.buildException(e.getMessage()) ; + } + } + + /** + * 閲戦杞ぇ鍐� + * @param amount + * @return + */ + + @GetMapping(path = "/amount_to_chinese") + public BaseResponse<Boolean> amountToChinese(BigDecimal amount) { + try { + AmountToChinese amountToChinese = new AmountToChinese(); + String chinese = amountToChinese.toChinese(amount); + return BaseResponseUtils.buildSuccess(chinese) ; + } catch (Exception e) { + return BaseResponseUtils.buildException(e.getMessage()) ; + } + + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java index e0f50b0..85fdc52 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java @@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -442,4 +443,40 @@ rsVo.obj = seCardOperateMapper.getReissueCards(params); return rsVo ; } + + /** + * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鏀舵嵁鍒楄〃 + * @param queryVo + * @return + */ + public Map getReceipts(QoReceipt queryVo) { + Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); + + DecimalFormat df = new DecimalFormat("#.00"); + Double totalAmount = Optional.ofNullable(seCardOperateMapper.getTotalAmount(params)).orElse(0.0); + + Long itemTotal = seCardOperateMapper.getReceiptsRecordCount(params); + + QueryResultVo<List<VoReceipt>> rsVo = new QueryResultVo<>() ; + rsVo.pageSize = queryVo.pageSize ; + rsVo.pageCurr = queryVo.pageCurr ; + + rsVo.calculateAndSet(itemTotal, params); + //rsVo.obj = seCardOperateMapper.getReceipts(params); + //return rsVo ; + + List<VoReceipt> list = seCardOperateMapper.getReceipts(params); + Map map_record = new HashMap(); + map_record.put("itemTotal", rsVo.itemTotal); + map_record.put("pageCurr", rsVo.pageCurr); + map_record.put("pageSize", rsVo.pageSize); + map_record.put("pageTotal", rsVo.pageTotal); + map_record.put("list", list); + + Map map_result = new HashMap(); + map_result.put("totalAmount", df.format(totalAmount)); + map_result.put("records", map_record); + + return map_result; + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReceipt.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReceipt.java new file mode 100644 index 0000000..3b13438 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/qo/QoReceipt.java @@ -0,0 +1,28 @@ +package com.dy.pipIrrSell.cardOperate.qo; + +import com.dy.common.webUtil.QueryConditionVo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author ZhuBaoMin + * @date 2024-02-01 11:03 + * @LastEditTime 2024-02-01 11:03 + * @Description + */ + +@Data +@Schema(name = "鏀舵嵁鏌ヨ鏉′欢") +public class QoReceipt extends QueryConditionVo { + @Schema(description = "浜ゆ槗ID") + public Long operateId; + + @Schema(description = "鍐滄埛濮撳悕") + public String clientName; + + @Schema(description = "鍏呭�兼満鏃堕棿_寮�濮�") + public String timeStart; + + @Schema(description = "鍏呭�兼満鏃堕棿_缁撴潫") + public String timeStop; +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java index dabaf7f..8007fda 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralCtrl.java @@ -186,4 +186,34 @@ return BaseResponseUtils.buildException(e.getMessage()) ; } } + + /** + * 鑾峰彇璐㈠姟瀵硅处_浜ゆ槗鏄庣粏 + * @param vo + * @return + */ + @Operation(summary = "鑾峰彇璐㈠姟瀵硅处_浜ゆ槗鏄庣粏", description = "鑾峰彇璐㈠姟瀵硅处_浜ゆ槗鏄庣粏") + @ApiResponses(value = { + @ApiResponse( + responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, + description = "杩斿洖涓�椤靛啘鎴锋暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�", + content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema(implementation = BaClient.class))} + ) + }) + @GetMapping(path = "get_trade_details") + @SsoAop() + public BaseResponse<Map> getTradeDetails(QoToAudit vo){ + try { + Map res = Optional.ofNullable(generalSv.getTradeDetails(vo)).orElse(new HashMap()); + if(res.size() > 0) { + return BaseResponseUtils.buildSuccess(res); + }else { + return BaseResponseUtils.buildFail(SellResultCode.No_TRADE_DETAILS.getMessage()); + } + } catch (Exception e) { + log.error("鏌ヨ浜ゆ槗璁板綍寮傚父", e); + return BaseResponseUtils.buildException(e.getMessage()) ; + } + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java index 749ad4e..e074e82 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java @@ -1,14 +1,14 @@ package com.dy.pipIrrSell.general; +import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.dy.common.webUtil.QueryResultVo; -import com.dy.pipIrrGlobal.daoSe.SeAuditsMapper; -import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper; -import com.dy.pipIrrGlobal.daoSe.SeGeneralMapper; +import com.dy.pipIrrGlobal.daoSe.*; import com.dy.pipIrrGlobal.pojoSe.SeAudits; import com.dy.pipIrrGlobal.pojoSe.SeGeneral; import com.dy.pipIrrGlobal.voSe.VoGeneral; +import com.dy.pipIrrGlobal.voSe.VoTradeDetails; import com.dy.pipIrrGlobal.voSe.VoTransactionStatistics; import com.dy.pipIrrSell.general.qo.QoGeneral; import com.dy.pipIrrSell.general.qo.QoToAudit; @@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.text.DecimalFormat; import java.util.*; /** @@ -37,6 +38,12 @@ @Autowired private SeCardOperateMapper seCardOperateMapper; + + @Autowired + private SeWalletRechargeMapper seWalletRechargeMapper; + + @Autowired + private SeRefundMapper seRefundMapper; /** * 鑾峰彇鏈敓鎴愭�昏处鐨勪氦鏄撴棩鏈熷垪琛紙褰撳ぉ鐨勪氦鏄撹褰曚笉鐢熸垚鎬昏处锛� @@ -103,7 +110,7 @@ } /** - * t娣诲姞鎬昏处瀹℃牳璁板綍 + * 娣诲姞鎬昏处瀹℃牳璁板綍 * @param po * @return */ @@ -117,21 +124,30 @@ * @return */ public Map getToAudit(QoToAudit vo) { - /** - * 鍙栧嚭鎸囧畾鏃ユ湡涓夌鏀粯鏂瑰紡锛堢幇閲戙�佹壂鐮併�佽浆璐︼級瀹炴敹閲戦 - */ + DecimalFormat df = new DecimalFormat("0.00"); + + // 鎺ユ敹浼犲叆鍙傛暟锛氭搷浣滄棩鏈熴�佹敹閾跺憳ID JSONArray array_paymentSums = new JSONArray(); String tradeDate = vo.getTradeDate(); Long cashierId = vo.cashierId; + // 鍒嗗埆璁$畻鎸囧畾鏃ユ湡銆佹寚瀹氭敹閾跺憳銆佹寚瀹氭敮浠樻柟寮忓疄鏀堕噾棰� Float receivedCash = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, 1L)).orElse(0f); Float receivedQRCode = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId,2L)).orElse(0f); Float receivedTransfer = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, 3L)).orElse(0f); + + // 鍒嗙骇璁$畻鎸囧畾鏃ユ湡寰俊鏀堕��娆惧悎璁★紝鍐嶈绠楀疄鏀堕噾棰� + Double rechargeWeChat = Optional.ofNullable(seWalletRechargeMapper.getRechargeSum(tradeDate)).orElse(0.0); + Double refundWeChat = Optional.ofNullable(seRefundMapper.getRefundSum(tradeDate)).orElse(0.0); + Double receiveWeChat = rechargeWeChat - refundWeChat; + + // 鍥涚鏀粯鏂瑰紡瀹炴敹閲戦鍚堣鍐欏叆杩斿洖瀵硅薄锛堝啓鍏ュ墠鏍煎紡鍖栵級 JSONObject job = new JSONObject(); job.put("tradeDate", tradeDate); - job.put("receivedCash", receivedCash); - job.put("receivedQRCode", receivedQRCode); - job.put("receivedTransfer", receivedTransfer); + job.put("receivedCash", df.format(receivedCash)); + job.put("receivedQRCode", df.format(receivedQRCode)); + job.put("receivedTransfer", df.format(receivedTransfer)); + job.put("receiveWeChat", df.format(receiveWeChat)); array_paymentSums.add(job); // 鐢熸垚鏌ヨ鍙傛暟 @@ -166,4 +182,48 @@ return map_result; } + + /** + * 鏍规嵁鏀堕摱鍛業D鍙婃棩鏈熻幏鍙栬储鍔″璐浜ゆ槗鏄庣粏璁板綍 + * @param queryVo + * @return + */ + public Map getTradeDetails(QoToAudit queryVo) { + DecimalFormat df = new DecimalFormat("0.00"); + Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); + + Long itemTotal = seGeneralMapper.getTradeDetailsRecordCount(params); + + QueryResultVo<List<VoTradeDetails>> rsVo = new QueryResultVo<>() ; + rsVo.pageSize = queryVo.pageSize ; + rsVo.pageCurr = queryVo.pageCurr ; + + + rsVo.calculateAndSet(itemTotal, params); + //rsVo.obj = seGeneralMapper.getTradeDetails(params); + List<VoTradeDetails> list = Optional.ofNullable(seGeneralMapper.getTradeDetails(params)).orElse(new ArrayList<>()); + if(list.size() == 0) { + return new HashMap(); + } + + Double totalTradeAmount = 0.0; + JSONArray array= JSONArray.parseArray(JSON.toJSONString(list)); + for(int i = 0; i < array.size(); i++) { + JSONObject job = array.getJSONObject(i); + Double tradeAmount = Optional.ofNullable(job.getDouble("tradeAmount")).orElse(0.0); + totalTradeAmount = totalTradeAmount + tradeAmount; + } + + Map map_record = new HashMap(); + map_record.put("itemTotal", rsVo.itemTotal); + map_record.put("pageCurr", rsVo.pageCurr); + map_record.put("list", list); + + Map map_result = new HashMap(); + map_result.put("totalTradeAmount", df.format(totalTradeAmount)); + map_result.put("records", map_record); + + return map_result; + + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java index a5b4e35..faa44e9 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java @@ -92,7 +92,17 @@ AUDIT_REFUND_FAIL(900012, "瀹℃牳閫�娆剧敵璇峰け璐�"), No_WALLER_RECHARGES(900013, "娌℃湁绗﹀悎鏉′欢鐨勫厖鍊兼暟鎹�"), WALLET_CLIENT_ID_CANNOT_BE_NULL(900014, "鏌ヨ鐢靛瓙閽卞寘娑堣垂姹囨�诲け璐ワ紝鍐滄埛ID涓嶈兘涓虹┖"), - No_REFUNDS(900015, "娌℃湁绗﹀悎鏉′欢鐨勯��娆炬暟鎹�"); + No_REFUNDS(900015, "娌℃湁绗﹀悎鏉′欢鐨勯��娆炬暟鎹�"), + + /** + * 鏀舵嵁 + */ + No_RECEIPTS(100001, "娌℃湁绗﹀悎鏉′欢鐨勬敹鎹�"), + + /** + * 璐㈠姟瀵硅处 + */ + No_TRADE_DETAILS(100001, "娌℃湁绗﹀悎鏉′欢鐨勪氦鏄撴槑缁�"); private final Integer code; private final String message; -- Gitblit v1.8.0