pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
@@ -6,6 +6,7 @@ import com.dy.pipIrrGlobal.voSt.VoClientOpenCardCount; import com.dy.pipIrrGlobal.voSt.VoClientRechargeTotal; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; @@ -224,4 +225,19 @@ * @return */ List<VoClientRechargeTotal> getRechargeTotalGtValueClients(Map<String, Object> params); /** * 依据水卡ID将最后一条无效状态的指定操作记录改为有效 * @param cardId * @return */ Integer turnOperateValidByCardId(@Param("cardId") Long cardId, @Param("operateType") Integer operateType); /** * 根据水卡ID、操作类型获取获取最后一条记录,判断开卡是否同步充值使用 * @param cardId * @return */ SeCardOperate getCardOperate(@Param("operateType") Integer operateType, @Param("cardId") Long cardId); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
@@ -37,6 +37,7 @@ /** * 依据水卡地址获取水卡编号(12月19日废弃) * 2024-06-30取消废弃,恢复使用 * @param cardAddr * @return */ @@ -141,7 +142,7 @@ List<VoCards> getUnreplaced(Map<?, ?> params); /** * 根据指定水卡编号获取挂失事记录数量(补卡、解锁使用) * 根据指定水卡编号获取挂失记录数量(补卡、解锁使用) * @param cardNum * @return */ @@ -191,7 +192,7 @@ Double getTotalMoneyIcCards(); /** * 根据水卡地址获取水卡数量,用来判断该卡是否允许开卡 * 根据水卡地址获取水卡数量,用来判断该卡是否允许开卡,无效卡片排除在外 * @param cardAddr * @return */ @@ -234,4 +235,20 @@ * @return */ Float getTotalConsumption(@Param("timeStart")String timeStart, @Param("timeStop")String timeStop); /** * 依据水卡地址将最后一条无效状态的指定操作记录改为有效 * @param cardAddr * @param operateType * @return */ Integer turnCardValidByAddr(@Param("cardAddr")String cardAddr, @Param("operateType")Integer operateType); /** * 根据水卡ID获取原水卡ID,补卡通知中使用 * @param cardId * @return */ Long getOriginalCardIdByCardId(@Param("cardId") Long cardId); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeRechargeHistoryMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * @author ZhuBaoMin @@ -24,4 +25,11 @@ int updateByPrimaryKeySelective(SeRechargeHistory record); int updateByPrimaryKey(SeRechargeHistory record); /** * 依据水卡ID将最后一条无效状态的充值历史记录改为有效 * @param cardId * @return */ Integer turnRechargeHistoryValidByCardId(@Param("cardId") Long cardId); } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java
@@ -142,4 +142,10 @@ */ @Schema(description = "操作时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Date operateDt; /** * 操作是否有效 */ @Length(message = "操作有效性不大于{max},不小于{min}", min = 1, max = 2) private Byte operateValid; } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeRechargeHistory.java
@@ -125,4 +125,10 @@ @Schema(description = "操作时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Date operatedt; /** * 操作是否有效 */ @Length(message = "操作有效性不大于{max},不小于{min}", min = 1, max = 2) private Byte operateValid; } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTransactionStatistics.java
@@ -1,39 +1,54 @@ package com.dy.pipIrrGlobal.voSe; import com.alibaba.fastjson2.annotation.JSONField; import com.alibaba.fastjson2.writer.ObjectWriterImplToString; import com.dy.common.po.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-01-22 18:27 * @LastEditTime 2024-01-22 18:27 * @Description * @Description 交易记录汇总视图对象 */ @Data @Schema(title = "交易记录汇总视图对象") public class VoTransactionStatistics implements BaseEntity { private static final long serialVersionUID = 202401241705001L; @Schema(title = "业务类型") /** * 业务类型 */ private String operateType; @Schema(title = "交易日期") /** * 交易日期 */ private String tradeDate; @Schema(title = "交易笔数") /** * 交易笔数 */ private Integer count; @Schema(title = "实收金额") /** * 实收金额 */ private Float received; @Schema(title = "赠送金额") /** * 赠送金额 */ private Float gift; @Schema(title = "返还金额") /** * 返还金额 */ private Float refundAmount; @Schema(title = "收银员ID") private String cashierId; /** * 收银员ID */ @JSONField(serializeUsing= ObjectWriterImplToString.class) private Long cashierId; } pipIrr-platform/pipIrr-global/src/main/resources/init-config.xml
@@ -27,6 +27,7 @@ <settings> <item1 item_name="lng" item_value="101.89878161146011" remarks="经度"/> <item2 item_name="lat" item_value="25.673963608371185" remarks="纬度"/> <item3 item_name="projectName" item_value="管灌系统及高效智慧微灌云服务管理平台软件系统" remarks="项目名称"/> </settings> <waterTypes> <item1 typeName="灌溉用水"/> @@ -73,6 +74,7 @@ <settings> <item1 item_name="lng" item_value="101.87345" remarks="经度"/> <item2 item_name="lat" item_value="25.70424" remarks="纬度"/> <item3 item_name="projectName" item_value="管灌系统及高效智慧微灌云服务管理平台软件系统" remarks="项目名称"/> </settings> <waterTypes> <item1 typeName="灌溉用水"/> @@ -119,6 +121,7 @@ <settings> <item1 item_name="lng" item_value="101.87345" remarks="经度"/> <item2 item_name="lat" item_value="25.70424" remarks="纬度"/> <item3 item_name="projectName" item_value="管灌系统及高效智慧微灌云服务管理平台软件系统" remarks="项目名称"/> </settings> <waterTypes> <item1 typeName="灌溉用水"/> pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
@@ -20,11 +20,12 @@ <result column="remarks" jdbcType="VARCHAR" property="remarks" /> <result column="operator" jdbcType="BIGINT" property="operator" /> <result column="operate_dt" jdbcType="TIMESTAMP" property="operateDt" /> <result column="operate_valid" jdbcType="TINYINT" property="operateValid" /> </resultMap> <sql id="Base_Column_List"> <!--@mbg.generated--> id, card_id, client_id, money, system_balance, trade_amount, price, card_cost, gift, refund_amount, no_trade_amount, operate_type, payment_id, remarks, `operator`, operate_dt refund_amount, no_trade_amount, operate_type, payment_id, remarks, `operator`, operate_dt, operate_valid </sql> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!--@mbg.generated--> @@ -45,13 +46,13 @@ price, card_cost, gift, refund_amount, no_trade_amount, operate_type, payment_id, remarks, `operator`, operate_dt) operate_dt, operate_valid) values (#{id,jdbcType=BIGINT}, #{cardId,jdbcType=BIGINT}, #{clientId,jdbcType=BIGINT}, #{money,jdbcType=FLOAT}, #{systemBalance,jdbcType=FLOAT}, #{tradeAmount,jdbcType=FLOAT}, #{price,jdbcType=FLOAT}, #{cardCost,jdbcType=INTEGER}, #{gift,jdbcType=FLOAT}, #{refundAmount,jdbcType=FLOAT}, #{noTradeAmount,jdbcType=FLOAT}, #{operateType,jdbcType=TINYINT}, #{paymentId,jdbcType=BIGINT}, #{remarks,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP}) #{operateDt,jdbcType=TIMESTAMP}, #{operateValid,jdbcType=TINYINT}) </insert> <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate"> <!--@mbg.generated--> @@ -105,6 +106,9 @@ <if test="operateDt != null"> operate_dt, </if> <if test="operateValid != null"> operate_valid, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> @@ -154,6 +158,9 @@ </if> <if test="operateDt != null"> #{operateDt,jdbcType=TIMESTAMP}, </if> <if test="operateValid != null"> #{operateValid,jdbcType=TINYINT}, </if> </trim> </insert> @@ -206,6 +213,9 @@ <if test="operateDt != null"> operate_dt = #{operateDt,jdbcType=TIMESTAMP}, </if> <if test="operateValid != null"> operate_valid = #{operateValid,jdbcType=TINYINT}, </if> </set> where id = #{id,jdbcType=BIGINT} </update> @@ -226,7 +236,8 @@ payment_id = #{paymentId,jdbcType=BIGINT}, remarks = #{remarks,jdbcType=VARCHAR}, `operator` = #{operator,jdbcType=BIGINT}, operate_dt = #{operateDt,jdbcType=TIMESTAMP} operate_dt = #{operateDt,jdbcType=TIMESTAMP}, operate_valid = #{operateValid,jdbcType=TINYINT} where id = #{id,jdbcType=BIGINT} </update> @@ -235,12 +246,13 @@ select COUNT(*) AS recordCount FROM se_card_operate ope INNER JOIN se_client_card card ON ope.card_id = card.id INNER JOIN se_client cli ON ope.client_id = cli.id INNER JOIN ba_user us ON ope.operator = us.id Left JOIN se_payment_method pay ON ope.payment_id = pay.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN ba_user us ON ope.operator = us.id LEFT JOIN se_payment_method pay ON ope.payment_id = pay.id <where> AND ope.operate_type in(1, 2, 5) AND ope.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -291,13 +303,14 @@ END) AS operateType, ope.operate_dt FROM se_card_operate ope INNER JOIN se_client_card card ON ope.card_id = card.id INNER JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN ba_district dis ON dis.id = cli.villageId INNER JOIN ba_user us ON ope.operator = us.id Left JOIN se_payment_method pay ON ope.payment_id = pay.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN ba_district dis ON dis.id = cli.villageId LEFT JOIN ba_user us ON ope.operator = us.id Left JOIN se_payment_method pay ON ope.payment_id = pay.id <where> AND ope.operate_type in(1, 2, 5) AND ope.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -329,7 +342,7 @@ INNER JOIN ba_user us ON ope.operator = us.id <where> AND ope.operate_type IN(1,2,3,5) AND ope.operate_valid = 2 <if test = "villageId != null and villageId > 0"> AND cli.villageId = #{villageId} </if> @@ -364,7 +377,6 @@ IFNULL(ope.card_cost,0.00) AS cardCost, IFNULL(ope.gift,0.00) AS gift, IFNULL(ope.refund_amount,0.00) AS refundAmount, <!--ope.money,--> (IFNULL(ope.money, 0) + IFNULL(ope.trade_amount, 0) + IFNULL(ope.gift, 0)) AS money, pay.name AS paymentName, ope.operate_dt as tradeTime, @@ -384,7 +396,7 @@ LEFT JOIN ba_user us ON ope.operator = us.id <where> AND ope.operate_type IN(1,2,3,5) AND ope.operate_valid = 2 <if test = "villageId != null and villageId > 0"> AND cli.villageId = #{villageId} </if> @@ -408,12 +420,14 @@ <!--根据指定条件获取开卡记录数量--> <select id="getActiveCardRecordCount" parameterType="java.util.Map" resultType="java.lang.Long"> select COUNT(*) AS recordCount COUNT(*) AS recordCount FROM se_card_operate ope INNER JOIN se_client_card card ON ope.card_id = card.id INNER JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_payment_method pay ON pay.id = ope.payment_id <where> AND ope.operate_type = 1 AND ope.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -450,11 +464,12 @@ (SELECT `name` FROM ba_user WHERE id = ope.operator) AS operator, ope.operate_dt AS operateDt FROM se_card_operate ope INNER JOIN se_client_card card ON ope.card_id = card.id INNER JOIN se_client cli ON ope.client_id = cli.id INNER JOIN se_payment_method pay ON pay.id = ope.payment_id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_payment_method pay ON pay.id = ope.payment_id <where> AND ope.operate_type = 1 AND ope.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -482,12 +497,13 @@ <!--根据指定条件获取补卡记录数量--> <select id="getReissueCardRecordCount" parameterType="java.util.Map" resultType="java.lang.Long"> select COUNT(*) AS recordCount COUNT(*) AS recordCount FROM se_card_operate ope INNER JOIN se_client_card card ON ope.card_id = card.id INNER JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_client cli ON ope.client_id = cli.id <where> AND ope.operate_type = 4 AND ope.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -505,19 +521,20 @@ <!--根据指定条件获取补卡记录--> <select id="getReissueCards" resultType="com.dy.pipIrrGlobal.voSe.VoReissueCard"> SELECT CAST(ope.id AS char) AS id , cli.name AS clientName, cli.clientNum AS clientNum, card.cardNum AS cardNum, ope.card_cost AS cardCost, IFNULL(ope.no_trade_amount,0) AS reissueAmount, (SELECT `name` FROM ba_user WHERE id = ope.operator) AS operator, ope.operate_dt AS operateDt CAST(ope.id AS char) AS id , cli.name AS clientName, cli.clientNum AS clientNum, card.cardNum AS cardNum, ope.card_cost AS cardCost, IFNULL(ope.no_trade_amount,0) AS reissueAmount, (SELECT `name` FROM ba_user WHERE id = ope.operator) AS operator, ope.operate_dt AS operateDt FROM se_card_operate ope INNER JOIN se_client_card card ON ope.card_id = card.id INNER JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_client cli ON ope.client_id = cli.id <where> AND ope.operate_type = 4 AND ope.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -543,10 +560,11 @@ 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 ba_user us ON ope.operator = us.id LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN ba_user us ON ope.operator = us.id <where> AND ope.operate_valid = 2 <if test = "operateType != null and operateType > 0"> AND ope.operate_type = #{operateType} </if> @@ -580,10 +598,11 @@ card.money, IFNULL(ope.system_balance,0) AS systemBalance 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 ba_user us ON ope.operator = us.id LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN ba_user us ON ope.operator = us.id <where> AND ope.operate_valid = 2 <if test = "operateType != null and operateType > 0"> AND ope.operate_type = #{operateType} </if> @@ -611,16 +630,17 @@ <!--根据指定条件获取收据列表数--> <select id="getReceiptsRecordCount" parameterType="java.util.Map" resultType="java.lang.Long"> SELECT COUNT(*) AS recordCount 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 LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_payment_method pay ON ope.payment_id = pay.id LEFT JOIN ba_user us ON ope.operator = us.id LEFT JOIN ba_district vil ON cli.villageId = vil.id LEFT JOIN ba_district tow ON cli.townId = tow.id <where> AND ope.operate_type IN(1,2) AND ope.operate_valid = 2 <if test = "operateId != null and operateId > 0"> AND ope.id = #{operateId} </if> @@ -668,14 +688,15 @@ ope.operator AS cashierId, 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 LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_payment_method pay ON ope.payment_id = pay.id LEFT JOIN ba_user us ON ope.operator = us.id LEFT JOIN ba_district vil ON cli.villageId = vil.id LEFT JOIN ba_district tow ON cli.townId = tow.id <where> AND ope.operate_type IN(1,2) AND ope.operate_valid = 2 <if test = "operateId != null and operateId > 0"> AND ope.id = #{operateId} </if> @@ -707,16 +728,17 @@ <!--根据指定条件获取收据收费金额合计--> <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 SUM(IFNULL(ope.trade_amount,0) + IFNULL(ope.card_cost,0)) AS totalAmount FROM se_card_operate ope LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_payment_method pay ON ope.payment_id = pay.id LEFT JOIN ba_user us ON ope.operator = us.id LEFT JOIN ba_district vil ON cli.villageId = vil.id LEFT JOIN ba_district tow ON cli.townId = tow.id LEFT JOIN se_client cli ON ope.client_id = cli.id LEFT JOIN se_client_card card ON ope.card_id = card.id LEFT JOIN se_payment_method pay ON ope.payment_id = pay.id LEFT JOIN ba_user us ON ope.operator = us.id LEFT JOIN ba_district vil ON cli.villageId = vil.id LEFT JOIN ba_district tow ON cli.townId = tow.id <where> AND ope.operate_type IN(1,2) AND ope.operate_valid = 2 <if test = "operateId != null and operateId > 0"> AND ope.id = #{operateId} </if> @@ -734,9 +756,9 @@ <!--根据水卡编号获取其挂失时退款金额(补卡时判断使用)--> <select id="getTradeAmountByCardNo" resultType="java.lang.Double"> SELECT ope.trade_amount AS tradeAmount ope.trade_amount AS tradeAmount FROM se_client_card card INNER JOIN se_card_operate ope ON ope.card_id = card.id INNER JOIN se_card_operate ope ON ope.card_id = card.id <where> AND ope.operate_type = 6 AND card.cardNum = #{cardNum} @@ -751,7 +773,7 @@ FROM `se_card_operate` WHERE operate_dt BETWEEN #{timeStart} AND #{timeStop} AND operate_type = 1 operate_dt BETWEEN #{timeStart} AND #{timeStop} AND operate_type = 1 AND operate_valid = 2 </select> <!--指定时间段内挂失总数量(物理卡)--> <select id="getLossCountIcCardsCount" resultType="java.lang.Long"> @@ -760,7 +782,7 @@ FROM `se_card_operate` WHERE operate_dt BETWEEN #{timeStart} AND #{timeStop} AND operate_type = 6 operate_dt BETWEEN #{timeStart} AND #{timeStop} AND operate_type = 6 AND operate_valid = 2 </select> <!--指定时间段内充值总数量(物理卡)--> <select id="getRechargeCountIcCardsCount" resultType="java.lang.Long"> @@ -769,7 +791,7 @@ FROM `se_card_operate` WHERE operate_dt BETWEEN #{timeStart} AND #{timeStop} AND operate_type = 2 operate_dt BETWEEN #{timeStart} AND #{timeStop} AND operate_type = 2 AND operate_valid = 2 </select> <!--指定时间段内开物理卡农户数量--> <select id="getOpenIcCardClientsCount" resultType="java.lang.Long"> @@ -789,7 +811,7 @@ `se_card_operate` sco INNER JOIN se_client sc ON sc.id = sco.client_id WHERE sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 1 AND sc.deleted = 0 AND sc.disabled = 0 sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 1 AND sc.deleted = 0 AND sc.disabled = 0 AND sco.operate_valid = 2 GROUP BY sc.id) c </select> <!--指定时间段内开物理卡农户--> @@ -806,7 +828,7 @@ `se_card_operate` sco INNER JOIN se_client sc ON sc.id = sco.client_id WHERE sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 1 AND sc.deleted = 0 AND sc.disabled = 0 sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 1 AND sc.deleted = 0 AND sc.disabled = 0 AND sco.operate_valid = 2 GROUP BY sc.id ORDER BY sc.id DESC <trim prefix="limit " > @@ -833,7 +855,7 @@ `se_card_operate` sco INNER JOIN se_client sc ON sc.id = sco.client_id WHERE sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 2 AND sc.deleted = 0 AND sc.disabled = 0 sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 2 AND sc.deleted = 0 AND sc.disabled = 0 AND sco.operate_valid = 2 GROUP BY sc.id) c </select> <!--指定时间段内每个农户充值合计--> @@ -850,7 +872,7 @@ `se_card_operate` sco INNER JOIN se_client sc ON sc.id = sco.client_id WHERE sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 2 AND sc.deleted = 0 AND sc.disabled = 0 sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 2 AND sc.deleted = 0 AND sc.disabled = 0 AND sco.operate_valid = 2 GROUP BY sc.id ORDER BY sc.id DESC <trim prefix="limit " > @@ -877,7 +899,7 @@ `se_card_operate` sco INNER JOIN se_client sc ON sc.id = sco.client_id WHERE sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 2 AND sc.deleted = 0 AND sc.disabled = 0 sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 2 AND sc.deleted = 0 AND sc.disabled = 0 AND sco.operate_valid = 2 GROUP BY sc.id HAVING IFNULL(SUM(sco.trade_amount),0) > #{value}) c </select> @@ -895,7 +917,7 @@ `se_card_operate` sco INNER JOIN se_client sc ON sc.id = sco.client_id WHERE sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 2 AND sc.deleted = 0 AND sc.disabled = 0 sco.operate_dt BETWEEN #{timeStart} AND #{timeStop} AND sco.operate_type = 2 AND sc.deleted = 0 AND sc.disabled = 0 AND sco.operate_valid = 2 GROUP BY sc.id HAVING IFNULL(SUM(sco.trade_amount),0) > #{value} ORDER BY sc.id DESC @@ -910,11 +932,12 @@ <select id="getRechargesCountNew" resultType="java.lang.Long"> SELECT COUNT(*) AS recordCount FROM se_client_card card INNER JOIN se_client cli ON cli.id = card.clientId LEFT JOIN se_client cli ON cli.id = card.clientId LEFT JOIN se_recharge_history rch ON rch.cardId = card.id LEFT JOIN se_payment_method pay ON pay.id = rch.paymentId INNER JOIN ba_user us ON us.id = rch.operator LEFT JOIN ba_user us ON us.id = rch.operator <where> AND rch.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -942,11 +965,12 @@ us.name AS operator, rch.operateDt AS operateTime FROM se_client_card card INNER JOIN se_client cli ON cli.id = card.clientId LEFT JOIN se_client cli ON cli.id = card.clientId LEFT JOIN se_recharge_history rch ON rch.cardId = card.id LEFT JOIN se_payment_method pay ON pay.id = rch.paymentId INNER JOIN ba_user us ON us.id = rch.operator LEFT JOIN ba_user us ON us.id = rch.operator <where> AND rch.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -976,6 +1000,7 @@ INNER JOIN ba_user us ON us.id = ope.operator <where> AND ope.operate_type = 5 AND ope.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -1006,6 +1031,7 @@ INNER JOIN ba_user us ON us.id = ope.operator <where> AND ope.operate_type = 5 AND ope.operate_valid = 2 <if test = "clientName != null and clientName !=''"> AND cli.name like CONCAT('%',#{clientName},'%') </if> @@ -1025,4 +1051,25 @@ </if> </trim> </select> <!--根据水卡ID、操作类型获取获取最后一条记录,判断开卡是否同步充值使用--> <update id="turnOperateValidByCardId"> UPDATE se_card_operate SET operate_valid = 2 WHERE id = ( SELECT id FROM ( SELECT id FROM se_card_operate WHERE operate_valid = 1 AND operate_type = #{operateType} AND card_id = #{cardId} ORDER BY id DESC LIMIT 1) AS subquery ); </update> <!--根据操作类型、水卡ID获取获取最后一条记录--> <select id="getCardOperate" resultType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate"> SELECT * FROM se_card_operate WHERE operate_type = #{operateType} AND card_id = #{cardId} ORDER BY operate_dt DESC LIMIT 1 </select> </mapper> pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -61,10 +61,13 @@ </delete> <!--依据水卡地址获取水卡编号(12月19日废弃)--> <!--2024-06-30取消废弃,恢复使用--> <select id="getCardIdByAddr" resultType="java.lang.Long"> SELECT id AS cardId FROM se_client_card WHERE cardAddr = #{cardAddr} ORDER BY id DESC LIMIT 1 </select> <!--根据水卡编号获取水卡表主键(12月19日添加后废弃)--> @@ -356,7 +359,7 @@ END) AS state FROM se_client_card card INNER JOIN se_client cli ON cli.id = card.clientId WHERE card.clientId = #{clientId,jdbcType=BIGINT} WHERE state != 4 AND card.clientId = #{clientId,jdbcType=BIGINT} UNION ALL SELECT '虚拟卡' AS cardType, vc.vc_num AS cardNum, @@ -368,25 +371,43 @@ FROM se_virtual_card vc INNER JOIN se_client cli ON cli.id = vc.client_id WHERE vc.client_id = #{clientId,jdbcType=BIGINT} <!-- SELECT '虚拟卡' AS cardType,--> <!-- virtualCard.vc_num AS CardNum,--> <!-- virtualCard.money AS vcMoney,--> <!-- (CASE--> <!-- WHEN virtualCard.in_use = 0 THEN '未使用'--> <!-- WHEN virtualCard.in_use = 1 THEN '使用中'--> <!-- END) AS State--> <!-- FROM se_client client--> <!-- LEFT JOIN se_virtual_card virtualCard ON client.id = virtualCard.client_id--> <!-- WHERE client.id = #{clientId,jdbcType=BIGINT}--> ) card ORDER BY card.Money DESC, card.State DESC </select> <!--根据水卡编号获取操作记录列表--> <select id="getOperateRecordsByCardNum" resultType="java.util.HashMap"> SELECT * FROM v_operate WHERE cardNum = #{cardNum,jdbcType=BIGINT} SELECT ope.id AS orderNumber, cli.villageId, cli.districtTitle, cli.clientNum, cli.`name`, card.cardNum, cli.idCard, cli.phone, IFNULL(ope.money,0) AS money, IFNULL(ope.gift,0) AS gift, IFNULL(ope.card_cost,0) AS cardCost, IFNULL((ope.money + ope.trade_amount + ope.gift),0) AS afterRecharge, ope.payment_id AS paymentId, pay.name AS paymentMethod, CASE WHEN ope.operate_type = 1 THEN '开卡' WHEN ope.operate_type = 2 THEN '充值' WHEN ope.operate_type = 3 THEN '销卡' END AS operateType, ope.operate_dt AS operateDt, user.name AS operatorName FROM se_card_operate ope LEFT JOIN se_client cli ON cli.id = ope.client_id LEFT JOIN se_client_card card ON card.id = ope.card_id LEFT JOIN se_payment_method pay ON pay.id = ope.payment_id LEFT JOIN ba_user user ON user.id = ope.operator WHERE ope.operate_valid = 2 AND ope.operate_type in (1,2,3) AND cardNum = #{cardNum,jdbcType=BIGINT} <!-- SELECT *--> <!-- FROM v_operate--> <!-- WHERE cardNum = #{cardNum,jdbcType=BIGINT}--> </select> <!--根据水卡编号获取余额--> @@ -423,6 +444,7 @@ WHEN state = 1 THEN '正常' WHEN state = 2 THEN '已注销' WHEN state = 3 THEN '已挂失' WHEN state = 4 THEN '无效卡片' END) AS stateName FROM se_client_card WHERE cardNum = #{cardNum,jdbcType=BIGINT} @@ -432,7 +454,7 @@ <select id="getCardsCount" parameterType="java.util.Map" resultType="java.lang.Long"> SELECT COUNT(*) AS recordCount FROM se_client_card card INNER JOIN se_client cli ON card.clientId = cli.id INNER JOIN se_client cli ON card.clientId = cli.id <where> AND card.state = 1 <if test="clientNum != null and clientNum != ''"> @@ -452,25 +474,16 @@ <!--根据指定条件获取水卡列表,应用程序使用--> <select id="getCards" resultType="com.dy.pipIrrGlobal.voSe.VoCards"> SELECT cli.clientNum, cli.name AS clientName, cardNum, <!-- CASE--> <!-- WHEN card.cardNum LIKE '10%' THEN CONCAT(SUBSTRING(card.cardNum, 7, 6),SUBSTRING(card.cardNum, 14, 4))--> <!-- ELSE card.cardNum--> <!-- END AS cardNum,--> cli.phone, cli.idCard, card.state AS cardState, <!-- (CASE--> <!-- WHEN card.state = 1 THEN '正常'--> <!-- WHEN card.state = 2 THEN '已注销'--> <!-- WHEN card.state = 3 THEN '已挂失'--> <!-- End) AS stateName,--> '正常' AS stateName, '农户卡' AS cardType, FORMAT(card.money, 2) AS money cli.name AS clientName, cardNum, cli.phone, cli.idCard, card.state AS cardState, '正常' AS stateName, '农户卡' AS cardType, FORMAT(card.money, 2) AS money FROM se_client_card card INNER JOIN se_client cli ON card.clientId = cli.id INNER JOIN se_client cli ON card.clientId = cli.id <where> AND card.state = 1 <if test="clientNum != null and clientNum != ''"> @@ -504,23 +517,20 @@ <!--获取已挂失未补卡的记录--> <select id="getUnreplaced" resultType="com.dy.pipIrrGlobal.voSe.VoCards"> SELECT cli.clientNum, cli.name AS clientName, cardNum, <!-- CASE--> <!-- WHEN card.cardNum LIKE '10%' THEN CONCAT(SUBSTRING(card.cardNum, 7, 6),SUBSTRING(card.cardNum, 14, 4))--> <!-- ELSE card.cardNum--> <!-- END AS cardNum,--> cli.phone, cli.idCard, card.state AS cardState, '已挂失' AS stateName, '农户卡' AS cardType, FORMAT(card.money, 2) AS money SELECT cli.clientNum, cli.name AS clientName, cardNum, cli.phone, cli.idCard, card.state AS cardState, '已挂失' AS stateName, '农户卡' AS cardType, FORMAT(card.money, 2) AS money FROM se_client_card card INNER JOIN se_client cli ON card.clientId = cli.id INNER JOIN se_client cli ON card.clientId = cli.id WHERE card.state = 3 AND NOT EXISTS(SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.id) AND NOT EXISTS(SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.id) ORDER BY card.id <trim prefix="limit "> <if test="start != null and count != null"> @@ -529,7 +539,7 @@ </trim> </select> <!--根据指定水卡编号获取挂失事记录数量(补卡、解锁使用)--> <!--根据指定水卡编号获取挂失记录数量(补卡、解锁使用)--> <select id="getLostCount" resultType="java.lang.Integer"> SELECT COUNT(*) AS recordCount FROM se_client_card card @@ -556,7 +566,7 @@ <select id="getCardsByClientNameAndPhoneCount" resultType="java.lang.Long"> SELECT COUNT(*) AS recordCount FROM se_client_card card INNER JOIN se_client cli ON card.clientId = cli.id INNER JOIN se_client cli ON card.clientId = cli.id <where> card.state = 1 <if test="clientName != null and clientName != ''"> @@ -586,7 +596,7 @@ '农户卡' AS cardType, FORMAT(card.money, 2) AS money FROM se_client_card card INNER JOIN se_client cli ON card.clientId = cli.id LEFT JOIN se_client cli ON card.clientId = cli.id <where> card.state = 1 <if test="clientName != null and clientName != ''"> @@ -636,11 +646,11 @@ WHERE state = 1 </select> <!--根据水卡地址获取水卡数量--> <!--根据水卡地址获取水卡数量,无效卡片排除在外--> <select id="getCountByCardAddr" resultType="java.lang.Long"> SELECT COUNT(*) AS recordCount FROM se_client_card WHERE cardAddr = #{cardAddr} WHERE cardAddr = #{cardAddr} AND se_client_card.state != 4 </select> <!--根据水卡地址获取指定状态的水卡数量--> @@ -722,4 +732,23 @@ FROM rm_open_close_valve_history WHERE cl_dt BETWEEN #{timeStart} AND #{timeStop} </select> <!--依据水卡地址将最后一条无效状态的指定操作记录改为有效--> <update id="turnCardValidByAddr"> UPDATE se_client_card SET state = 1 WHERE id = ( SELECT id FROM ( SELECT id FROM se_client_card WHERE state = 4 AND cardAddr = #{cardAddr} AND lastOper = #{operateType} ORDER BY id DESC LIMIT 1) AS subquery ); </update> <!--根据水卡ID获取原水卡ID,补卡通知中使用--> <select id="getOriginalCardIdByCardId" resultType="java.lang.Long"> SELECT original_card_id AS originalCardId FROM se_client_card WHERE id = #{cardId}; </select> </mapper> pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeGeneralMapper.xml
@@ -253,6 +253,7 @@ SUM(ope.trade_amount) AS tradeAmount FROM se_card_operate ope <where> AND ope.operate_valid = 2 <if test = "tradeDate != null and tradeDate !=''"> AND Date(ope.operate_dt) = #{tradeDate} </if> @@ -265,7 +266,7 @@ AND ope.operator = #{cashierId} </if> </where> GROUP BY ope.payment_id, Date(ope.operate_dt) <!-- GROUP BY ope.payment_id, Date(ope.operate_dt)--> </select> <!-- 财务对账审核页,收银员+日期分组,排除交易类型分组,记录数--> @@ -286,17 +287,46 @@ <!--开卡系统交易统计,收银员+日期+类型分组--> <select id="getSummaries" resultType="com.dy.pipIrrGlobal.voSe.VoTransactionStatistics"> SELECT * FROM v_trade_summary SELECT CASE WHEN ope.operate_type = 1 THEN '开卡' WHEN ope.operate_type = 2 THEN '充值' WHEN ope.operate_type = 3 THEN '销卡' WHEN ope.operate_type = 4 THEN '补卡' WHEN ope.operate_type = 5 THEN '返还' END AS operateType, Date(ope.operate_dt) AS tradeDate, COUNT(*) AS count, (IFNULL(SUM(ope.trade_amount), 0) + IFNULL(SUM(ope.card_cost), 0)) AS received, IFNULL(SUM(ope.gift), 0) AS gift, IFNULL(sum(ope.refund_amount),0) AS refundAmount, us.id AS cashierId FROM se_card_operate ope INNER JOIN ba_user us ON us.id = ope.operator <where> AND ope.operate_type IN(1,2,3,4,5) <if test = "cashierId != null and cashierId > 0"> AND cashierId = #{cashierId} AND us.id = #{cashierId} </if> <if test = "timeStart != null and timeStop != null"> AND Date(tradeDate) BETWEEN #{timeStart} AND #{timeStop} AND Date(ope.operate_dt) BETWEEN #{timeStart} AND #{timeStop} </if> </where> GROUP BY ope.operate_type, Date(ope.operate_dt), us.id ORDER BY tradeDate <!-- SELECT * FROM v_trade_summary--> <!-- <where>--> <!-- <if test = "cashierId != null and cashierId > 0">--> <!-- AND cashierId = #{cashierId}--> <!-- </if>--> <!-- <if test = "timeStart != null and timeStop != null">--> <!-- AND Date(tradeDate) BETWEEN #{timeStart} AND #{timeStop}--> <!-- </if>--> <!-- </where>--> <!-- ORDER BY tradeDate--> </select> <!-- 根据收银员ID及日期获取财务对账_交易明细记录数--> pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeRechargeHistoryMapper.xml
@@ -177,4 +177,18 @@ operateDt = #{operatedt,jdbcType=TIMESTAMP} where id = #{id,jdbcType=BIGINT} </update> <!--依据水卡ID将最后一条无效状态的充值历史记录改为有效--> <update id="turnRechargeHistoryValidByCardId"> UPDATE se_recharge_history SET operate_valid = 2 WHERE id = ( SELECT id FROM ( SELECT id FROM se_recharge_history WHERE operate_valid = 1 AND cardId = #{cardId} ORDER BY id DESC LIMIT 1) AS subquery ); </update> </mapper> pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -48,7 +48,7 @@ @Slf4j @Tag(name = "水卡操作管理", description = "水卡各种操作") @RestController @RequestMapping(path="card") @RequestMapping(path = "card") @RequiredArgsConstructor public class CardOperateCtrl { private final CardOperateSv cardOperateSv; @@ -59,30 +59,31 @@ @Value("${project.projectNo}") private Integer projectNo; /** * 开卡 * @param po 开卡传入对象 * * @param po 开卡传入对象 * @param bindingResult * @return 水卡编号 */ @PostMapping(path = "active", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_active(@RequestBody @Valid ActiveCard po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> add_active(@RequestBody @Valid ActiveCard po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } // 依据水卡地址判断该卡是否可以开卡,未开过卡或不是正常状态、挂失状态的可开卡 if(!cardOperateSv.canActiveCard(po.getCardAddr())) { if (!cardOperateSv.canActiveCard(po.getCardAddr())) { return BaseResponseUtils.buildErrorMsg(SellResultCode.ACTIVE_FAIL_CARD_ESIST.getMessage()); } Long clientId = po.getClientId(); // 获取5级行政区划串areaCode Long areaCodeL = cardOperateSv.getAreaCodeById(clientId); if(areaCodeL == null) { if (areaCodeL == null) { return BaseResponseUtils.buildErrorMsg(SellResultCode.AREA_CODE_MISTAKE.getMessage()); } String areaCode = String.valueOf(areaCodeL); @@ -94,10 +95,10 @@ * cardNum为新的卡号 */ String cardNum = Optional.ofNullable(cardOperateSv.getCardNumOfMax(areaCode)).orElse(""); if(cardNum != null && cardNum.trim().length() > 0) { if (cardNum != null && cardNum.trim().length() > 0) { Integer number = Integer.parseInt(cardNum.substring(12)); number = number + 1; if(number > 65535) { if (number > 65535) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_OVERRUN.getMessage()); } cardNum = cardNum.substring(0, 12) + String.format("%05d", number); @@ -135,21 +136,20 @@ seClientCard.setCardnum(cardNum); seClientCard.setClientid(clientId); seClientCard.setMoney(amount); seClientCard.setState(CardStateENUM.NORMAL.getCode()); if(originalCardId != null) { // 开卡时卡片状态为无效 seClientCard.setState(CardStateENUM.INVALID.getCode()); if (originalCardId != null) { // 补卡 seClientCard.setOriginalCardId(originalCardId); seClientCard.setLastoper(LastOperateENUM.REPLACE.getCode()); seClientCard.setReplacedt(activeTime); } else { // 开新卡 seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode()); seClientCard.setCreatedt(activeTime); } seClientCard.setCreatedt(activeTime); //if(cardCost == 0) { // // 换卡 // seClientCard.setLastoper(LastOperateENUM.CHANGE_CARD.getCode()); //}else { // // 开卡 // seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode()); //} seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode()); Long cardId = Optional.ofNullable(clientCardSv.add(seClientCard)).orElse(0L) ; if(cardId == 0) { Long cardId = Optional.ofNullable(clientCardSv.add(seClientCard)).orElse(0L); if (cardId == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.ACTIVE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } @@ -162,23 +162,20 @@ seCardOperate.setMoney(0f); seCardOperate.setCardCost(cardCost); seCardOperate.setPaymentId(paymentId); if(originalCardId != null) { if (originalCardId != null) { // 补卡 seCardOperate.setOperateType(OperateTypeENUM.REISSUE.getCode()); }else { // 开新卡或换卡 //if(cardCost > 0) { // seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode()); //}else { // seCardOperate.setOperateType(OperateTypeENUM.CHANGE_CARD.getCode()); //} seCardOperate.setNoTradeAmount(amount); } else { // 开新卡 seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode()); } seCardOperate.setRemarks(remarks); seCardOperate.setOperator(operator); seCardOperate.setOperateDt(activeTime); seCardOperate.setOperateValid((byte) 1); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { if (rec == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.ACTIVE_FAIL_WRITE_ACTIVE_CARD_ERROR.getMessage()); } @@ -186,7 +183,7 @@ * 如果操作人员开卡时输入了充值金额,则开卡后调用充值功能 * 补卡除外,补卡的退还金额是从挂失卡中转移过来的,没有实际金钱交易 */ if(amount != null && amount > 0 && originalCardId == null) { if (amount != null && amount > 0 && originalCardId == null) { DtoRecharge dtoRecharge = new DtoRecharge(); dtoRecharge.setCardNum(Long.parseLong(cardNum)); dtoRecharge.setAmount(amount); @@ -197,21 +194,21 @@ dtoRecharge.setGift(0f); dtoRecharge.setPrice(0f); BaseResponse<Boolean> job = cardOperateSv.addRecharge(dtoRecharge); if(!job.getCode().equals("0001")) { if (!job.getCode().equals("0001")) { return BaseResponseUtils.buildErrorMsg(SellResultCode.ACTIVE_FAIL_RECHARGE_EXCEPTION.getMessage()); } } Map map = new HashMap(); // map.put("projectNo", String.format("%02x", Integer.parseInt(cardOperateSv.getProjectNo()))); map.put("projectNo", String.format("%02x", projectNo)); map.put("orderNumber", rec); map.put("cardNum", cardNum); return BaseResponseUtils.buildSuccess(map) ; return BaseResponseUtils.buildSuccess(map); } /** * 补卡 * * @param po * @param bindingResult * @return @@ -219,8 +216,8 @@ @PostMapping(path = "reissue", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_reissue(@RequestBody @Valid DtoReissue po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> add_reissue(@RequestBody @Valid DtoReissue po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } @@ -250,14 +247,14 @@ Long operator = po.getOperator(); // 判断当前水卡是否为挂失状态且未补卡,仅已经挂失且未补卡的可以补卡 if(!cardOperateSv.isLostAndUnreplaced(cardNum)) { if (!cardOperateSv.isLostAndUnreplaced(cardNum)) { return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } // 如果传入了退还金额,需要判断老卡(被挂失的水卡)挂失时是否已经退款,无论退款多少都提示用户挂失时已退款 if(reissueAmount != null && reissueAmount > 0) { if (reissueAmount != null && reissueAmount > 0) { Double tradeAmount = cardOperateSv.getTradeAmountByCardNo(cardNum); if(tradeAmount != null && tradeAmount > 0) { if (tradeAmount != null && tradeAmount > 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_FEE_CANNOT_BE_REFUNDED.getMessage()); } } @@ -266,7 +263,7 @@ * 依据水卡编号获取水卡表主键及农户编号 */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { if (map == null || map.size() <= 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } clientNum = map.get("clientNum").toString(); @@ -276,13 +273,14 @@ /** * 如果是补卡调用的开卡且转移了退还金额,需修改挂失卡余额为0 * 通知补卡成功时再处理 if(reissueAmount != null) { SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setMoney(0f); cardOperateSv.updateClientCard(seClientCard); } */ if(reissueAmount != null) { SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setMoney(0f); cardOperateSv.updateClientCard(seClientCard); } /** * 添加开卡记录,退还金额冲到新卡中 @@ -299,11 +297,11 @@ activeCard.setOperator(operator); BaseResponse<java.lang.Boolean> baseResponse_addActive = add_active(activeCard, null); if(!baseResponse_addActive.getCode().equals("0001")) { if (!baseResponse_addActive.getCode().equals("0001")) { return BaseResponseUtils.buildErrorMsg(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); } JSONObject job_content = (JSONObject) JSON.toJSON( baseResponse_addActive.getContent()); JSONObject job_content = (JSONObject) JSON.toJSON(baseResponse_addActive.getContent()); cardNum = job_content.getLong("cardNum"); String orderNumber = job_content.getString("orderNumber"); String projectNo = job_content.getString("projectNo"); @@ -313,20 +311,21 @@ map_response.put("orderNumber", orderNumber); map_response.put("cardNum", cardNum); map_response.put("protocol", protocol); return BaseResponseUtils.buildSuccess(map_response) ; return BaseResponseUtils.buildSuccess(map_response); } /** * 充值 * @param po 充值传输对象 * * @param po 充值传输对象 * @param bindingResult * @return */ @PostMapping(path = "recharge", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_recharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> add_recharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } return cardOperateSv.addRecharge(po); @@ -334,6 +333,7 @@ /** * 销卡 * * @param po * @param bindingResult * @return @@ -341,8 +341,8 @@ @PostMapping(path = "cancel", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_cancel(@RequestBody @Valid DtoCancel po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> add_cancel(@RequestBody @Valid DtoCancel po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } @@ -360,14 +360,14 @@ Long clientId = 0L; Long cardNum = po.getCardNum(); Float refund = po.getRefund(); Byte refundType = po.getRefundType(); Long refundType = po.getRefundType(); String remarks = po.getRemarks(); Long operator = po.getOperator(); Date cancelTime = new Date(); // 验证水卡状态是否支持当前操作 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { if (stateName.length() == 0 || !stateName.equals("正常")) { return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } @@ -375,27 +375,28 @@ * 依据水卡编号获取水卡表主键及农户编号 */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { if (map == null || map.size() <= 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); /** * 修改农户卡信息: * 修改农户卡信息,通知时再处理 * 注销时间 * 最后操作类型-4 SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setCanceldt(cancelTime); seClientCard.setMoney(0f); seClientCard.setState(CardStateENUM.CANCELLED.getCode()); seClientCard.setLastoper(LastOperateENUM.CANCEL.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CANCEL_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } */ SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setCanceldt(cancelTime); seClientCard.setMoney(0f); seClientCard.setState(CardStateENUM.CANCELLED.getCode()); seClientCard.setLastoper(LastOperateENUM.CANCEL.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CANCEL_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** * 添加注销操作记录 @@ -405,14 +406,15 @@ seCardOperate.setCardId(cardId); seCardOperate.setClientId(clientId); seCardOperate.setTradeAmount(-refund); seCardOperate.setPaymentId(1L); seCardOperate.setPaymentId(refundType); seCardOperate.setOperateType(OperateTypeENUM.CANCEL.getCode()); seCardOperate.setRemarks(remarks); seCardOperate.setOperator(operator); seCardOperate.setOperateDt(cancelTime); seCardOperate.setOperateValid((byte) 1); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { if (rec == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CANCEL_FAIL_WRITE_CANCELL_ERROR.getMessage()); } @@ -420,11 +422,12 @@ map_response.put("projectNo", String.format("%02x", projectNo)); map_response.put("orderNumber", rec); map_response.put("cardNum", cardNum); return BaseResponseUtils.buildSuccess(map_response) ; return BaseResponseUtils.buildSuccess(map_response); } /** * 挂失 * 挂失,不需要二次通知 * * @param po * @param bindingResult * @return @@ -432,8 +435,8 @@ @PostMapping(path = "loss", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_loss(@RequestBody @Valid DtoLoss po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> add_loss(@RequestBody @Valid DtoLoss po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } @@ -458,7 +461,7 @@ // 验证水卡状态是否支持当前操作 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { if (stateName.length() == 0 || !stateName.equals("正常")) { return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } @@ -466,7 +469,7 @@ * 依据水卡编号获取水卡表主键及农户编号 */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { if (map == null || map.size() <= 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); @@ -479,6 +482,7 @@ * 状态 * 最后操作类型-6 */ SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setMoney(money); @@ -486,9 +490,10 @@ seClientCard.setState(CardStateENUM.LOSS.getCode()); seClientCard.setLastoper(LastOperateENUM.LOSS.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { if (rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.LOSS_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** * 添加挂失记录 @@ -504,8 +509,9 @@ seCardOperate.setRemarks(remarks); seCardOperate.setOperator(operator); seCardOperate.setOperateDt(lossTime); seCardOperate.setOperateValid((byte) 2); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { if (rec == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.LOSS_FAIL_WRITE_LOSS_ERROR.getMessage()); } @@ -513,11 +519,12 @@ map_response.put("projectNo", String.format("%02x", projectNo)); map_response.put("orderNumber", rec); map_response.put("cardNum", cardNum); return BaseResponseUtils.buildSuccess(map_response) ; return BaseResponseUtils.buildSuccess(map_response); } /** * 冲正 * 冲正,2024-09-30 作废,冲正功能由充值功能代替 * * @param po * @param bindingResult * @return @@ -525,8 +532,8 @@ @PostMapping(path = "reversal", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_reversal(@RequestBody @Valid DtoReversal po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> add_reversal(@RequestBody @Valid DtoReversal po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } @@ -551,7 +558,7 @@ // 验证水卡状态是否支持当前操作 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { if (stateName.length() == 0 || !stateName.equals("正常")) { return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } @@ -559,7 +566,7 @@ * 依据水卡编号获取水卡表主键及农户编号 */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { if (map == null || map.size() <= 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); @@ -567,8 +574,8 @@ /** * 修改农户卡信息: * 挂失时间 * 最后操作类型-4 * 冲正时间 * 最后操作类型-7 */ SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); @@ -576,7 +583,7 @@ seClientCard.setMoney(cardBalance); seClientCard.setLastoper(LastOperateENUM.REVERSAL.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { if (rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } @@ -592,8 +599,9 @@ seCardOperate.setRemarks(remarks); seCardOperate.setOperator(operator); seCardOperate.setOperateDt(reversalTime); seCardOperate.setOperateValid((byte) 2); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { if (rec == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.REVERSAL_FAIL_WRITE_REVERSAL_ERROR.getMessage()); } @@ -601,12 +609,13 @@ map_response.put("projectNo", String.format("%02x", projectNo)); map_response.put("orderNumber", rec); map_response.put("cardNum", cardNum); return BaseResponseUtils.buildSuccess(map_response) ; return BaseResponseUtils.buildSuccess(map_response); } /** * 补扣 * * @param po * @param bindingResult * @return @@ -614,8 +623,8 @@ @PostMapping(path = "refund", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_refund(@RequestBody @Valid DtoRefund po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> add_refund(@RequestBody @Valid DtoRefund po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } @@ -640,7 +649,7 @@ // 验证水卡状态是否支持当前操作 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { if (stateName.length() == 0 || !stateName.equals("正常")) { return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } @@ -648,26 +657,27 @@ * 依据水卡编号获取水卡表主键及农户编号 */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { if (map == null || map.size() <= 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); /** * 修改农户卡信息: * 挂失时间 * 最后操作类型-4 * 修改农户卡信息,通知时处理 * 补扣时间 * 最后操作类型-5 SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setRefunddt(refundTime); seClientCard.setMoney(money + refund); seClientCard.setLastoper(LastOperateENUM.REFUND.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } */ SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setRefunddt(refundTime); seClientCard.setMoney(money + refund); seClientCard.setLastoper(LastOperateENUM.REFUND.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** * 添加补扣操作记录 @@ -681,16 +691,18 @@ seCardOperate.setRemarks(remarks); seCardOperate.setOperator(operator); seCardOperate.setOperateDt(refundTime); seCardOperate.setOperateValid((byte) 1); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { if (rec == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.REFUND_FAIL_WRITE_REFUND_ERROR.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; return BaseResponseUtils.buildSuccess(true); } /** * 解锁 * 解锁,不需要二次通知 * * @param po * @param bindingResult * @return @@ -698,8 +710,8 @@ @PostMapping(path = "unlock", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> add_unlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> add_unlock(@RequestBody @Valid DtoUnlock po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } @@ -721,7 +733,7 @@ Date unlockTime = new Date(); // 判断当前水卡是否为挂失状态且未补卡,仅已经挂失其未补卡的可以解锁 if(!cardOperateSv.isLostAndUnreplaced(cardNum)) { if (!cardOperateSv.isLostAndUnreplaced(cardNum)) { return BaseResponseUtils.buildErrorMsg(SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } @@ -729,7 +741,7 @@ * 依据水卡编号获取水卡表主键及农户编号 */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { if (map == null || map.size() <= 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); @@ -747,7 +759,7 @@ seClientCard.setState(CardStateENUM.NORMAL.getCode()); seClientCard.setLastoper(LastOperateENUM.UNLOCK.getCode()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { if (rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.UNLOCK_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } @@ -762,8 +774,9 @@ seCardOperate.setRemarks(remarks); seCardOperate.setOperator(operator); seCardOperate.setOperateDt(unlockTime); seCardOperate.setOperateValid((byte) 2); Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L); if(rec == 0) { if (rec == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.UNLOCK_FAIL_WRITE_UNLOCK_ERROR.getMessage()); } @@ -771,12 +784,110 @@ map_response.put("projectNo", String.format("%02x", projectNo)); map_response.put("orderNumber", rec); map_response.put("cardNum", cardNum); return BaseResponseUtils.buildSuccess(map_response) ; return BaseResponseUtils.buildSuccess(map_response); } /** * 操作执行回调 * * @param po * @param bindingResult * @return */ @PostMapping(path = "call_back", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> callBack(@RequestBody @Valid CallBack po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String cardAddr = po.getCardAddr(); Integer operateType = po.getOperateType(); // 此时无需判断卡片状态 Long cardId = cardOperateSv.getCardIdByAddr(cardAddr); if (cardId == null || cardId.equals(0)) { return BaseResponseUtils.buildErrorMsg("您指定的水卡不存在"); } if (operateType == 1) { /** * 开卡操作执行通知 * 1.依据水卡地址将最后一条无效状态的指定操作记录改为有效 * 2.依据水卡ID将最后一条无效状态的水卡记录改为有效 * 3.如果开卡同步充值 * 修改充值操作记录为有效 * 修改充值历史记录为有效 * 修改水卡表的操作信息 */ Integer rec_card = Optional.ofNullable(cardOperateSv.turnCardValidByAddr(cardAddr, operateType)).orElse(0); Integer rec_ope = Optional.ofNullable(cardOperateSv.turnOperateValidByCardId(cardId, operateType)).orElse(0); if (rec_card == 0 || rec_ope == 0) { return BaseResponseUtils.buildErrorMsg("不存在未生效的水卡"); } Boolean isMergeRecharge = cardOperateSv.isMergeRecharge(cardId); if (isMergeRecharge) { cardOperateSv.turnOperateValidByCardId(cardId, 2); cardOperateSv.turnRechargeHistoryValidByCardId(cardId); cardOperateSv.updateCard(cardId); } } else if (operateType == 2) { /** * 充值操作执行通知 * 1.操作记录改为有效-cardId * 2.充值历史记录改为有效-cardId * 3.休水卡表的操作信息及余额-cardId、(mondy、amount、gift从充值历史表中获取) */ Integer rec_ope = Optional.ofNullable(cardOperateSv.turnOperateValidByCardId(cardId, operateType)).orElse(0); Integer rec_recharge = cardOperateSv.turnRechargeHistoryValidByCardId(cardId); if (rec_recharge == 0 || rec_ope == 0) { return BaseResponseUtils.buildErrorMsg("不存在未生效的水卡"); } cardOperateSv.updateCard(cardId); } else if (operateType == 3) { /** * 销卡操作执行通知 * 1.操作记录改为有效-cardId * 2.修改水卡表的记录及余额(0) */ cardOperateSv.turnOperateValidByCardId(cardId, operateType); cardOperateSv.updateCancels(operateType, cardId); } else if (operateType == 4) { /** * 补卡操作执行通知 * 1.新水卡记录改为有效-cardId * 2.开卡操作记录改为有效-cardId * 3.如果存在退还金额 * 清空原卡余额 */ Integer rec_card = Optional.ofNullable(cardOperateSv.turnCardValidByAddr(cardAddr, operateType)).orElse(0); Integer rec_ope = Optional.ofNullable(cardOperateSv.turnOperateValidByCardId(cardId, operateType)).orElse(0); if (rec_card == 0 || rec_ope == 0) { return BaseResponseUtils.buildErrorMsg("不存在未生效的水卡"); } cardOperateSv.emptyCardBalance(operateType, cardId); } else if (operateType == 5) { /** * 补扣操作执行通知 * 1.操作记录改为有效 * 2.修改水卡表的操作信息及余额-从操作记录中取money、refund */ cardOperateSv.turnOperateValidByCardId(cardId, operateType); cardOperateSv.updateRefund(operateType, cardId); } return BaseResponseUtils.buildSuccess(); } /** * 创建管理卡 * * @param po * @param bindingResult * @return @@ -784,8 +895,8 @@ @PostMapping(path = "create_manager_card", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse<Boolean> createManagerCard(@RequestBody @Valid ManagerCard po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ public BaseResponse<Boolean> createManagerCard(@RequestBody @Valid ManagerCard po, BindingResult bindingResult) { if (bindingResult != null && bindingResult.hasErrors()) { return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } @@ -796,10 +907,10 @@ * cardNum为新的卡号 */ String cardNum = Optional.ofNullable(cardOperateSv.getManagerCardNumOfMax(divisionCode)).orElse(""); if(cardNum != null && cardNum.trim().length() > 0) { if (cardNum != null && cardNum.trim().length() > 0) { Integer number = Integer.parseInt(cardNum.substring(12)); number = number + 1; if(number > 65535) { if (number > 65535) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_OVERRUN.getMessage()); } cardNum = cardNum.substring(0, 12) + String.format("%05d", number); @@ -814,7 +925,7 @@ seManagerCard.setCreateTime(new Date()); seManagerCard.setRemarks(po.getRemarks()); Long managerCardId = cardOperateSv.addManagerCard(seManagerCard); if(managerCardId == 0) { if (managerCardId == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CREATE_MANAGER_CARD_ERROR.getMessage()); } @@ -828,6 +939,7 @@ /** * 获取充值记录 * * @param vo * @return */ @@ -842,85 +954,90 @@ }) @GetMapping(path = "/getRecharges") @SsoAop() public BaseResponse<QueryResultVo<List<VoRecharge>>> get(QoRecharge vo){ public BaseResponse<QueryResultVo<List<VoRecharge>>> get(QoRecharge vo) { try { QueryResultVo<List<VoRecharge>> res = cardOperateSv.getRecharges(vo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取充值记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } /** * 获取充值记录,管理平台充值列表使用,APP未使用 * * @param vo * @return */ @GetMapping(path = "/getRechargesNew") @SsoAop() public BaseResponse<QueryResultVo<List<VoRechargeNew>>> getRechargesNew(QoRecharge vo){ public BaseResponse<QueryResultVo<List<VoRechargeNew>>> getRechargesNew(QoRecharge vo) { try { QueryResultVo<List<VoRechargeNew>> res = cardOperateSv.getRechargesNew(vo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取充值记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } /** * 获取返还记录,管理平台充值列表使用 * * @param vo * @return */ @GetMapping(path = "/refunds") @SsoAop() public BaseResponse<QueryResultVo<List<VoRefund>>> getRefunds(QoRecharge vo){ public BaseResponse<QueryResultVo<List<VoRefund>>> getRefunds(QoRecharge vo) { try { QueryResultVo<List<VoRefund>> res = cardOperateSv.getRefunds(vo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取返还记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } /** * 获取水卡消费记录,管理平台使用 * * @param vo * @return */ @GetMapping(path = "/expends") @SsoAop() public BaseResponse<QueryResultVo<List<VoExpend>>> getExpends(QoRecharge vo){ public BaseResponse<QueryResultVo<List<VoExpend>>> getExpends(QoRecharge vo) { try { QueryResultVo<List<VoExpend>> res = cardOperateSv.getExpends(vo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取消费记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } /** * 根据指定条件获取交易明细 * * @param vo * @return */ @GetMapping(path = "getTransactions") @SsoAop() public BaseResponse<Map> getOperates(QoTransaction vo){ public BaseResponse<Map> getOperates(QoTransaction vo) { try { return BaseResponseUtils.buildSuccess(cardOperateSv.getTransactions(vo)); } catch (Exception e) { log.error("查询交易记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } /** * 根据指定条件获取开卡记录 * * @param vo * @return */ @@ -935,7 +1052,7 @@ }) @GetMapping(path = "/getActiveCards") @SsoAop() public BaseResponse<QueryResultVo<List<VoActiveCard>>> getActiveCards(QoActiveCard vo){ public BaseResponse<QueryResultVo<List<VoActiveCard>>> getActiveCards(QoActiveCard vo) { try { QueryResultVo<List<VoActiveCard>> res = cardOperateSv.getActiveCards(vo); // if(res.itemTotal == 0) { @@ -944,12 +1061,13 @@ return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取开卡记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } /** * 根据指定条件获取补卡记录 * * @param vo * @return */ @@ -964,7 +1082,7 @@ }) @GetMapping(path = "/getReissueCards") @SsoAop() public BaseResponse<QueryResultVo<List<VoReissueCard>>> getReissueCards(QoReissueCard vo){ public BaseResponse<QueryResultVo<List<VoReissueCard>>> getReissueCards(QoReissueCard vo) { try { QueryResultVo<List<VoReissueCard>> res = cardOperateSv.getReissueCards(vo); // if(res.itemTotal == 0) { @@ -973,7 +1091,7 @@ return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取补卡记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } @@ -981,6 +1099,7 @@ * 根据指定条件获取通用操作记录 * 注销、挂失、冲正、解锁通用 * 注销-3,挂失-6,冲正-7,解锁-8 * * @param vo * @return */ @@ -995,10 +1114,10 @@ }) @GetMapping(path = "/getOptions") @SsoAop() public BaseResponse<QueryResultVo<List<VoOperate>>> getCommonOperations(QoCommonOperate vo){ public BaseResponse<QueryResultVo<List<VoOperate>>> getCommonOperations(QoCommonOperate vo) { // 验证操作类型是否正确 Integer operateType = Optional.ofNullable(vo.getOperateType()).orElse(0); if(operateType != 3 && operateType != 6 && operateType != 7 && operateType != 8) { if (operateType != 3 && operateType != 6 && operateType != 7 && operateType != 8) { return BaseResponseUtils.buildErrorMsg(SellResultCode.PARAMS_ERROR.getMessage()); } @@ -1010,12 +1129,13 @@ return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("获取开卡记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } /** * 根据指定条件获取收据列表 * * @param vo * @return */ @@ -1030,21 +1150,18 @@ }) @GetMapping(path = "/get_receipts") @SsoAop() public BaseResponse<Map> getReceipts(QoReceipt vo){ public BaseResponse<Map> getReceipts(QoReceipt vo) { try { // Map res = Optional.ofNullable(cardOperateSv.getReceipts(vo)).orElse(new HashMap()); // if(res.size() == 0) { // return BaseResponseUtils.buildErrorMsg(SellResultCode.No_RECEIPTS.getMessage()); // } return BaseResponseUtils.buildSuccess(cardOperateSv.getReceipts(vo)); } catch (Exception e) { log.error("获取电子钱包账户记录", e); return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } /** * 金额转大写 * * @param amount * @return */ @@ -1054,9 +1171,9 @@ try { AmountToChinese amountToChinese = new AmountToChinese(); String chinese = amountToChinese.toChinese(amount); return BaseResponseUtils.buildSuccess(chinese) ; return BaseResponseUtils.buildSuccess(chinese); } catch (Exception e) { return BaseResponseUtils.buildException(e.getMessage()) ; return BaseResponseUtils.buildException(e.getMessage()); } } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
@@ -9,12 +9,16 @@ import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper; import com.dy.pipIrrGlobal.daoRm.RmOpenCloseValveHistoryMapper; import com.dy.pipIrrGlobal.daoSe.*; import com.dy.pipIrrGlobal.pojoSe.*; import com.dy.pipIrrGlobal.pojoSe.SeCardOperate; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; import com.dy.pipIrrGlobal.pojoSe.SeManagerCard; import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory; import com.dy.pipIrrGlobal.voRm.VoExpend; import com.dy.pipIrrGlobal.voSe.*; import com.dy.pipIrrSell.cardOperate.dto.DtoRecharge; import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM; import com.dy.pipIrrSell.cardOperate.qo.*; import com.dy.pipIrrSell.clientCard.CardStateENUM; import com.dy.pipIrrSell.clientCard.ClientCardSv; import com.dy.pipIrrSell.clientCard.LastOperateENUM; import com.dy.pipIrrSell.result.SellResultCode; @@ -25,6 +29,7 @@ import org.springframework.stereotype.Service; import java.text.DecimalFormat; import java.time.Duration; import java.util.*; /** @@ -72,6 +77,7 @@ /** * 添加开卡记录 * * @param po 水卡操作对象 * @return 开卡记录主键 */ @@ -82,6 +88,7 @@ /** * 根据农户编号获取5级行政区划代码,开卡使用 * * @param clientNum 农户编号 * @return 5级行政区划代码 */ @@ -95,6 +102,7 @@ /** * 根据农户编号获取5级行政区划串areaCode,补卡过程中开新卡使用 * * @param clientId * @return */ @@ -104,6 +112,7 @@ /** * 根据行政区划串模块查询水卡编号,开卡使用 * * @param areaCode * @return */ @@ -113,6 +122,7 @@ /** * 根据行政区划串模糊查询管理卡编号,创建管理卡使用 * * @param areaCode * @return */ @@ -122,6 +132,7 @@ /** * 创建管理卡 * * @param po * @return */ @@ -132,6 +143,7 @@ /** * 根据农户编号获取农户ID,开卡使用 * * @param clientNum * @return */ @@ -141,6 +153,7 @@ /** * 添加水卡操作对象,各操作都使用 * * @param po 水卡操作对象 * @return 操作记录主键 */ @@ -152,10 +165,11 @@ /** * 添加充值记录 * 修改农户信息、添加水卡操作记录、添加充值记录 * * @param po * @return */ public BaseResponse<Boolean> addRecharge(DtoRecharge po){ public BaseResponse<Boolean> addRecharge(DtoRecharge po) { /** * cardId 水卡编号(依据水卡编号获取) * clientId 农户编号(依据水卡编号获取) @@ -183,9 +197,16 @@ Long operator = po.getOperator(); Date rechargeTime = new Date(); // 验证水卡状态是否支持当前操作 // 获取水卡状态 String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); if(stateName.length() == 0 || !stateName.equals("正常")) { // 单独充值时卡片必须为正常 if (remarks.trim().equals("充值") && !stateName.equals("正常")) { return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } // 开卡同步充值时允许卡片为无效状态,得到通知后自动变更为有效 if (!remarks.trim().equals("充值") && !stateName.equals("正常") && !stateName.equals("无效卡片")) { return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); } @@ -193,36 +214,24 @@ * 依据水卡编号获取水卡表主键及农户编号 */ Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); if(map == null || map.size() <= 0) { if (map == null || map.size() <= 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); } cardId = Long.parseLong(map.get("cardId").toString()); clientId = Long.parseLong(map.get("clientId").toString()); /** * 修改农户卡信息: * 补卡时间 * 最后操作类型-2 * 充值时不修改农户卡信息,收到成功通知后再修改:余额、充值时间、最后操作类型 SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setMoney(afterRecharge); seClientCard.setRechargedt(rechargeTime); seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } */ // 根据支付方式ID获取支付方式名称 SePaymentMethod sePaymentMethod = sePaymentMethodMapper.selectByPrimaryKey(paymentId); String paymentName = sePaymentMethod.getName(); SeClientCard seClientCard = new SeClientCard(); seClientCard.setId(cardId); seClientCard.setMoney(afterRecharge); seClientCard.setRechargedt(rechargeTime); //if(paymentName != null && paymentName.equals("换卡")) { // seClientCard.setLastoper(LastOperateENUM.CHANGE_RECHARGE.getCode ()); //}else { // seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ()); //} seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ()); Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); if(rec_updateClientCard == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); } /** * 添加水卡充值操作记录 @@ -233,21 +242,16 @@ seCardOperate.setMoney(money); seCardOperate.setTradeAmount(amount); seCardOperate.setGift(gift); //if(paymentName != null && paymentName.equals("换卡")) { // seCardOperate.setOperateType(OperateTypeENUM.CHANGE_RECHARGE.getCode()); //}else { // seCardOperate.setOperateType(OperateTypeENUM.RECHARGE.getCode()); //} seCardOperate.setOperateType(OperateTypeENUM.RECHARGE.getCode()); seCardOperate.setPaymentId(paymentId); seCardOperate.setPrice(price); seCardOperate.setRemarks(remarks); seCardOperate.setOperator(operator); seCardOperate.setOperateDt(rechargeTime); seCardOperate.setOperateValid((byte) 1); seCardOperateMapper.insert(seCardOperate); Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L); if(rec == 0) { if (rec == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); } @@ -266,9 +270,10 @@ seRechargeHistory.setRemarks(remarks); seRechargeHistory.setOperator(operator); seRechargeHistory.setOperatedt(rechargeTime); seRechargeHistory.setOperateValid((byte) 1); seRechargeHistoryMapper.insert(seRechargeHistory); Long rec_seRechargeHistory = Optional.ofNullable(seRechargeHistory.getId()).orElse(0L); if(rec_seRechargeHistory == 0) { if (rec_seRechargeHistory == 0) { return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_RECHARGE_HISTORY_ERROR.getMessage()); } @@ -276,11 +281,12 @@ map_response.put("projectNo", String.format("%02x", projectNo)); map_response.put("orderNumber", rec); map_response.put("cardNum", cardNum); return BaseResponseUtils.buildSuccess(map_response) ; return BaseResponseUtils.buildSuccess(map_response); } /** * 根据指定条件获取充值记录 * * @param queryVo * @return */ @@ -301,17 +307,18 @@ Long itemTotal = seCardOperateMapper.getRecordCount(params); QueryResultVo<List<VoRecharge>> rsVo = new QueryResultVo<>() ; rsVo.pageSize = queryVo.pageSize ; rsVo.pageCurr = queryVo.pageCurr ; QueryResultVo<List<VoRecharge>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getRecharges(params); return rsVo ; return rsVo; } /** * 获取充值记录,管理平台充值列表使用,APP未使用 * * @param queryVo * @return */ @@ -320,17 +327,18 @@ Long itemTotal = seCardOperateMapper.getRechargesCountNew(params); QueryResultVo<List<VoRechargeNew>> rsVo = new QueryResultVo<>() ; rsVo.pageSize = queryVo.pageSize ; rsVo.pageCurr = queryVo.pageCurr ; QueryResultVo<List<VoRechargeNew>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getRechargesNew(params); return rsVo ; return rsVo; } /** * 获取返还记录,管理平台充值列表使用 * * @param queryVo * @return */ @@ -339,17 +347,18 @@ Long itemTotal = seCardOperateMapper.getRefundsCount(params); QueryResultVo<List<VoRefund>> rsVo = new QueryResultVo<>() ; rsVo.pageSize = queryVo.pageSize ; rsVo.pageCurr = queryVo.pageCurr ; QueryResultVo<List<VoRefund>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getRefunds(params); return rsVo ; return rsVo; } /** * 获取水卡消费记录,管理平台使用 * * @param queryVo * @return */ @@ -358,48 +367,49 @@ Long itemTotal = rmOpenCloseValveHistoryMapper.getExpendsCount(params); QueryResultVo<List<VoExpend>> rsVo = new QueryResultVo<>() ; rsVo.pageSize = queryVo.pageSize ; rsVo.pageCurr = queryVo.pageCurr ; QueryResultVo<List<VoExpend>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmOpenCloseValveHistoryMapper.getExpends(params); return rsVo ; return rsVo; } /** * 根据指定条件获取交易记录 * * @param vo * @return */ public Map getTransactions(QoTransaction vo){ public Map getTransactions(QoTransaction vo) { DecimalFormat df = new DecimalFormat("0.00"); // 补齐查询时间 String operateTimeStart = vo.operateTimeStart; String operateTimeStop = vo.operateTimeStop; if(operateTimeStart != null) { if (operateTimeStart != null) { operateTimeStart = operateTimeStart + " 00:00:00"; vo.setOperateTimeStart(operateTimeStart); } if(operateTimeStop != null) { if (operateTimeStop != null) { operateTimeStop = operateTimeStop + " 23:59:59"; vo.setOperateTimeStop(operateTimeStop); } // 生成查询参数 Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ; Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo); // 获取符合条件的记录数 Long itemTotal = Optional.ofNullable(seCardOperateMapper.getTransactionRecordCount(params)).orElse(0L); QueryResultVo<List<VoTradeDetails>> rsVo = new QueryResultVo<>() ; rsVo.pageSize = vo.pageSize ; rsVo.pageCurr = vo.pageCurr ; QueryResultVo<List<VoTradeDetails>> rsVo = new QueryResultVo<>(); rsVo.pageSize = vo.pageSize; rsVo.pageCurr = vo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getTransactions(params); List<VoTradeDetails> list = rsVo.obj; if(list.size() == 0) { if (list.size() == 0) { return new HashMap(); } @@ -409,8 +419,8 @@ Double totalGift = 0.0; Double totalRefund = 0.0; JSONArray array= JSONArray.parseArray(JSON.toJSONString(list)); for(int i = 0; i < array.size(); i++) { JSONArray array = JSONArray.parseArray(JSON.toJSONString(list)); for (int i = 0; i < array.size(); i++) { JSONObject job = array.getJSONObject(i); Double waterCost = Optional.ofNullable(job.getDouble("waterCost")).orElse(0.0); Double cardCost = Optional.ofNullable(job.getDouble("cardCost")).orElse(0.0); @@ -439,6 +449,7 @@ /** * 根据指定条件获取开卡记录 * * @param queryVo * @return */ @@ -446,11 +457,11 @@ //完善查询充值记录的起止时间 String activeTimeStart = queryVo.activeTimeStart; String activeTimeStop = queryVo.activeTimeStop; if(activeTimeStart != null) { if (activeTimeStart != null) { activeTimeStart = activeTimeStart + " 00:00:00"; queryVo.setActiveTimeStart(activeTimeStart); } if(activeTimeStop != null) { if (activeTimeStop != null) { activeTimeStop = activeTimeStop + " 23:59:59"; queryVo.setActiveTimeStop(activeTimeStop); } @@ -459,18 +470,19 @@ Long itemTotal = seCardOperateMapper.getActiveCardRecordCount(params); QueryResultVo<List<VoActiveCard>> rsVo = new QueryResultVo<>() ; QueryResultVo<List<VoActiveCard>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize ; rsVo.pageCurr = queryVo.pageCurr ; rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getActiveCards(params); return rsVo ; return rsVo; } /** * 根据指定条件获取补卡记录 * * @param queryVo * @return */ @@ -478,11 +490,11 @@ //完善查询充值记录的起止时间 String reissueCardTimeStart = queryVo.reissueCardTimeStart; String reissueCardTimeStop = queryVo.reissueCardTimeStop; if(reissueCardTimeStart != null) { if (reissueCardTimeStart != null) { reissueCardTimeStart = reissueCardTimeStart + " 00:00:00"; queryVo.setReissueCardTimeStart(reissueCardTimeStart); } if(reissueCardTimeStop != null) { if (reissueCardTimeStop != null) { reissueCardTimeStop = reissueCardTimeStop + " 23:59:59"; queryVo.setReissueCardTimeStop(reissueCardTimeStop); } @@ -491,18 +503,19 @@ Long itemTotal = seCardOperateMapper.getReissueCardRecordCount(params); QueryResultVo<List<VoReissueCard>> rsVo = new QueryResultVo<>() ; QueryResultVo<List<VoReissueCard>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize ; rsVo.pageCurr = queryVo.pageCurr ; rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getReissueCards(params); return rsVo ; return rsVo; } /** * 根据指定条件获取通用操作记录 * * @param queryVo * @return */ @@ -510,11 +523,11 @@ //完善查询充值记录的起止时间 String timeStart = queryVo.getTimeStart(); String timeStop = queryVo.getTimeStop(); if(timeStart != null) { if (timeStart != null) { timeStart = timeStart + " 00:00:00"; queryVo.setTimeStart(timeStart); } if(timeStop != null) { if (timeStop != null) { timeStop = timeStop + " 23:59:59"; queryVo.setTimeStop(timeStop); } @@ -523,26 +536,27 @@ Long itemTotal = Optional.ofNullable(seCardOperateMapper.getCommonOperationRecordCount(params)).orElse(0L); QueryResultVo<List<VoOperate>> rsVo = new QueryResultVo<>() ; QueryResultVo<List<VoOperate>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize ; rsVo.pageCurr = queryVo.pageCurr ; rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = seCardOperateMapper.getCommonOperations(params); return rsVo ; return rsVo; } /** * 根据指定条件获取收据列表 * * @param queryVo * @return */ public Map getReceipts(QoReceipt queryVo) { if (queryVo.getTimeStart() != null && queryVo.getTimeStart() != ""){ if (queryVo.getTimeStart() != null && queryVo.getTimeStart() != "") { queryVo.setTimeStart(queryVo.getTimeStart() + " 00:00:00"); } if (queryVo.getTimeStop() != null && queryVo.getTimeStop() != ""){ if (queryVo.getTimeStop() != null && queryVo.getTimeStop() != "") { queryVo.setTimeStop(queryVo.getTimeStop() + " 23:59:59"); } @@ -553,9 +567,9 @@ Long itemTotal = seCardOperateMapper.getReceiptsRecordCount(params); QueryResultVo<List<VoReceipt>> rsVo = new QueryResultVo<>() ; rsVo.pageSize = queryVo.pageSize ; rsVo.pageCurr = queryVo.pageCurr ; QueryResultVo<List<VoReceipt>> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); //rsVo.obj = seCardOperateMapper.getReceipts(params); @@ -578,13 +592,14 @@ /** * 判断指定水卡是否为挂失状态且无补卡记录 * * @param cardNum 水卡编号 * @return 是否已挂失未补卡 */ public Boolean isLostAndUnreplaced(Long cardNum) { Integer lostCount = seClientCardMapper.getLostCount(cardNum); Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum); if(lostCount > 0 && replacedCount == 0) { if (lostCount > 0 && replacedCount == 0) { return true; } return false; @@ -592,6 +607,7 @@ /** * 修改农户水卡 * * @param po * @return */ @@ -601,6 +617,7 @@ /** * 获取项目编号 * * @return */ public String getProjectNo() { @@ -609,6 +626,7 @@ /** * 根据水卡编号获取其挂失时退款金额(补卡时判断使用) * * @param cardNum * @return */ @@ -618,23 +636,184 @@ /** * 根据水卡地址判断该卡是否可以开卡 * * @param cardAddr * @return */ public Boolean canActiveCard(String cardAddr) { // 指定水卡地址的水卡数量 // 指定水卡地址的水卡数量,无效卡片排除在外 Long cardCount = Optional.ofNullable(seClientCardMapper.getCountByCardAddr(cardAddr)).orElse(0L); if(cardCount == 0) { return true; if (cardCount == 0) { return true; } // 指定水卡地址且正常状态或挂失状态的水卡数量 cardCount = Optional.ofNullable(seClientCardMapper.getCountByCardAddrAndState(cardAddr)).orElse(0L); if(cardCount == 0) { if (cardCount == 0) { return true; } return false; } /** * 依据水卡地址获取水卡编号 * * @param cardAddr * @return */ public Long getCardIdByAddr(String cardAddr) { return seClientCardMapper.getCardIdByAddr(cardAddr); } /** * 依据水卡地址将最后一条无效状态的指定操作记录改为有效 * * @param cardAddr * @param operateType * @return */ public Integer turnCardValidByAddr(String cardAddr, Integer operateType) { return seClientCardMapper.turnCardValidByAddr(cardAddr, operateType); } /** * 根据水卡ID、操作类型获取获取最后一条记录,判断开卡是否同步充值使用 * * @param cardId * @return */ public Integer turnOperateValidByCardId(Long cardId, Integer operateType) { return seCardOperateMapper.turnOperateValidByCardId(cardId, operateType); } /** * 依据水卡ID将最后一条无效状态的充值历史记录改为有效 * * @param cardId * @return */ public Integer turnRechargeHistoryValidByCardId(Long cardId) { return seRechargeHistoryMapper.turnRechargeHistoryValidByCardId(cardId); } /** * 根据水卡ID判断是否为开卡时同步充值 * 该水卡ID不存在开卡记录或充值记录则返回false * 如果开卡操作与充值操作时间间隔超过30秒则返回false * 如果充值金额大于0且充值前余额为0则返回true * * @param cardId * @return */ public Boolean isMergeRecharge(Long cardId) { SeCardOperate activeCard = seCardOperateMapper.getCardOperate(1, cardId); SeCardOperate recharge = seCardOperateMapper.getCardOperate(2, cardId); if (activeCard == null || recharge == null) { return false; } Duration duration = Duration.between(activeCard.getOperateDt().toInstant(), recharge.getOperateDt().toInstant()); if (duration.toSeconds() > 30) { return false; } Float money = Optional.ofNullable(recharge.getMoney()).orElse(0f); Float tradeAmount = Optional.ofNullable(recharge.getTradeAmount()).orElse(0f); if (tradeAmount > 0 && money == 0) { return true; } else { return false; } } /** * 根据水卡ID从操作记录表中取出:余额、交易金额、赠送金额,求和得到水卡余额 * 将余额更新到水卡表中 * * @param cardId * @return */ public Boolean updateCard(Long cardId) { SeCardOperate recharge = seCardOperateMapper.getCardOperate(2, cardId); if (recharge == null) { return false; } Float money = Optional.ofNullable(recharge.getMoney()).orElse(0f); Float amount = Optional.ofNullable(recharge.getTradeAmount()).orElse(0f); Float gift = Optional.ofNullable(recharge.getGift()).orElse(0f); SeClientCard clientCard = new SeClientCard(); clientCard.setId(cardId); clientCard.setMoney(money + amount + gift); clientCard.setRechargedt(recharge.getOperateDt()); clientCard.setLastoper(LastOperateENUM.RECHARGE.getCode()); Integer rec_updateClientCard = seClientCardMapper.updateByPrimaryKeySelective(clientCard); if (rec_updateClientCard == null || rec_updateClientCard == 0) { return false; } return true; } /** * 如果补卡时转移了退还金额,清空挂失卡余额 * @param operateType * @param cardId */ public void emptyCardBalance(Integer operateType, Long cardId) { SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId); if(cardOperate != null) { Float noTradeAmount = cardOperate.getNoTradeAmount(); if(noTradeAmount != null && noTradeAmount > 0) { Long originalCardId = seClientCardMapper.getOriginalCardIdByCardId(cardId); if(originalCardId != null) { SeClientCard clientCard = new SeClientCard(); clientCard.setId(cardId); clientCard.setMoney(0f); seClientCardMapper.updateByPrimaryKeySelective(clientCard); } } } } /** * 修改注销水卡表的记录及余额(0) * @param cardId * @return */ public Integer updateCancels(Integer operateType, Long cardId) { SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId); Date cancelTime = Optional.ofNullable(cardOperate.getOperateDt()).orElse(new Date()); SeClientCard clientCard = new SeClientCard(); clientCard.setId(cardId); clientCard.setCanceldt(cancelTime); clientCard.setMoney(0f); clientCard.setState(CardStateENUM.CANCELLED.getCode()); clientCard.setLastoper(LastOperateENUM.CANCEL.getCode()); return seClientCardMapper.updateByPrimaryKeySelective(clientCard); } /** * 修改补扣水卡表的操作信息及余额 * @param operateType * @param cardId * @return */ public Integer updateRefund(Integer operateType, Long cardId) { SeCardOperate cardOperate = seCardOperateMapper.getCardOperate(operateType, cardId); Date refundTime = Optional.ofNullable(cardOperate.getOperateDt()).orElse(new Date()); Float money = cardOperate.getMoney(); Float refund = cardOperate.getRefundAmount(); SeClientCard clientCard = new SeClientCard(); clientCard.setId(cardId); clientCard.setRefunddt(refundTime); clientCard.setMoney(money + refund); clientCard.setLastoper(LastOperateENUM.REFUND.getCode()); return seClientCardMapper.updateByPrimaryKeySelective(clientCard); } } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/CallBack.java
New file @@ -0,0 +1,30 @@ package com.dy.pipIrrSell.cardOperate.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; /** * @author ZhuBaoMin * @date 2024-09-30 15:05 * @LastEditTime 2024-09-30 15:05 * @Description 操作执行回调:开卡、充值、补卡、销卡、补扣 */ @Data public class CallBack { public static final long serialVersionUID = 202409301507001L; /** * 水卡地址 */ @NotBlank(message = "水卡地址不能为空") private String cardAddr; /** * 操作类型:1-开卡,2-充值,3-销卡,4-补卡,5-补扣 */ @NotNull(message = "操作类型不能为空") private Integer operateType; } pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoCancel.java
@@ -43,11 +43,11 @@ private Float refund; /** * 退款方式;1-现金 * 退款方式; */ @Schema(description = "退款方式", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Positive(message = "退款方式必须为大于0的整数") private Byte refundType; private Long refundType; /** * 备注信息 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/CardStateENUM.java
@@ -15,7 +15,8 @@ public enum CardStateENUM { NORMAL((byte)1, "正常"), CANCELLED((byte)2, "已注销"), LOSS((byte)3, "已挂失"); LOSS((byte)3, "已挂失"), INVALID((byte)4, "无效的"); private final Byte code; private final String message; pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardCtrl.java
@@ -11,7 +11,6 @@ import com.dy.pipIrrGlobal.voSe.VoCards2; import com.dy.pipIrrSell.clientCard.qo.QoCards; import com.dy.pipIrrSell.clientCard.qo.QoCards2; import com.dy.pipIrrSell.result.SellResultCode; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -182,11 +181,12 @@ public BaseResponse<QueryResultVo<List<VoCards2>>> getCardsByClientNameAndPhone(QoCards2 vo){ try { QueryResultVo<List<VoCards2>> res = clientCardSv.getCardsByClientNameAndPhone(vo); if(res.itemTotal != null && res.itemTotal > 0) { return BaseResponseUtils.buildSuccess(res); }else { return BaseResponseUtils.buildFail(SellResultCode.THE_CARD_NOT_EXIST.getMessage()); } return BaseResponseUtils.buildSuccess(res); //if(res.itemTotal != null && res.itemTotal > 0) { // return BaseResponseUtils.buildSuccess(res); //}else { // return BaseResponseUtils.buildFail(SellResultCode.THE_CARD_NOT_EXIST.getMessage()); //} } catch (Exception e) { log.error("查询水卡异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/general/GeneralSv.java
@@ -160,8 +160,6 @@ // 获取各支付方式ID Long paymentId_cash = 0L; //Long paymentId_wechat = 0L; //Long paymentId_alipay = 0L; Long paymentId_pos = 0L; Long paymentId_transfer = 0L; List<SePaymentMethod> list_payment = sePaymentMethodMapper.getPaymentMethods(); @@ -170,19 +168,12 @@ if(paymentMethod.getName().equals("现金")) { paymentId_cash = paymentMethod.getId(); } //if(paymentMethod.getName().equals("微信支付")) { // paymentId_wechat = paymentMethod.getId(); //} //if(paymentMethod.getName().equals("支付宝支付")) { // paymentId_alipay = paymentMethod.getId(); //} if(paymentMethod.getName().equals("POS机")) { paymentId_pos = paymentMethod.getId(); } if(paymentMethod.getName().equals("银行转账")) { paymentId_transfer = paymentMethod.getId(); } } // 接收传入参数:交易起止日期、收银员ID @@ -197,22 +188,19 @@ String tradeDate = dateFormat.format(calendar.getTime()) ; if(cashierId != 1000000L) { Float receivedCash = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, paymentId_cash)).orElse(0f); //Float receivedWechat = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId,paymentId_wechat)).orElse(0f); //Float receivedAlipay = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId,paymentId_alipay)).orElse(0f); Float receivedPos = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId,paymentId_pos)).orElse(0f); Float receivedTransfer = Optional.ofNullable(seGeneralMapper.getPaymentSums(tradeDate, cashierId, paymentId_transfer)).orElse(0f); JSONObject job = new JSONObject(); job.put("tradeDate", tradeDate); job.put("receivedCash", receivedCash); //job.put("receivedWechat", receivedWechat); //job.put("receivedAlipay", receivedAlipay); job.put("receivedPos", receivedPos); job.put("receivedTransfer", receivedTransfer); array_paymentSums.add(job); }else { // 分级计算指定日期微信收退款合计,再计算实收金额 // 此处应用时再优化 Double rechargeWeChat = Optional.ofNullable(seWalletRechargeMapper.getRechargeSum(tradeDate)).orElse(0.0); Double refundWeChat = Optional.ofNullable(seRefundMapper.getRefundSum(tradeDate)).orElse(0.0); Double receiveWeChat = rechargeWeChat - refundWeChat;