From a2e2c9d1f359e9702d59a4d27a36af3f0bb6aceb Mon Sep 17 00:00:00 2001
From: Administrator <zhubaomin>
Date: 星期五, 19 一月 2024 17:27:33 +0800
Subject: [PATCH] 2024-01-19 朱宝民 获取用户列表新接口

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java                               |  138 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReversal.java             |   64 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRecharge.java             |   84 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java               |    5 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java               |  177 +++++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml                                         |  221 +++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java             |  550 ++++++++++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoActiveCard.java           |   89 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java                          |   27 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/enums/OperateTypeENUM.java       |   27 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java                           |    6 
 /dev/null                                                                                                               |   21 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoLoss.java                 |   58 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java                |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java                                 |   28 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/converter/RechargeDtoMapper.java |   26 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml                                                |   78 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoCancel.java               |   64 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java                                    |   18 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java                                |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java                             |   74 +
 21 files changed, 1,714 insertions(+), 45 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java
index cd7bc13..ac420c3 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoBa/BaUserMapper.java
@@ -101,4 +101,32 @@
      * @return
      */
     Map getUserInfoById(@Param("userId") Long userId);
+
+    /**
+     * 鏍规嵁鎸囧畾鐨勬潯浠惰幏鍙栫敤鎴疯褰曟暟
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢ㄦ埛鍒楄〃
+     * @param params
+     * @return
+     */
+    List<VoUserInfo> getUsers(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇瑙掕壊ID鍒楄〃
+     * @param userId
+     * @return
+     */
+    List<Map<String, Object>> getRoleIdsByUserId(@Param("userId") Long userId);
+
+    /**
+     * getRoleNamesByUserId
+     * @param userId
+     * @return
+     */
+    List<Map<String, Object>> getRoleNamesByUserId(@Param("userId") Long userId);
 }
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
new file mode 100644
index 0000000..798b5b4
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
@@ -0,0 +1,27 @@
+package com.dy.pipIrrGlobal.daoSe;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-18 19:28
+ * @LastEditTime 2024-01-18 19:28
+ * @Description
+ */
+
+@Mapper
+public interface SeCardOperateMapper extends BaseMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(SeCardOperate record);
+
+    int insertSelective(SeCardOperate record);
+
+    SeCardOperate selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(SeCardOperate record);
+
+    int updateByPrimaryKey(SeCardOperate record);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java
index ed80934..750461f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeActiveCard.java
@@ -89,7 +89,7 @@
      */
     @Schema(description = "琛ュ崱閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Length(message = "琛ュ崱閲戦涓嶅皬浜巤min}", min = 0)
-    private Double reissueamount;
+    private Float reissueamount;
 
     /**
      * 鎿嶄綔绫诲瀷;1-寮�鍗★紝2-琛ュ崱
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java
new file mode 100644
index 0000000..21e51cb
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoSe/SeCardOperate.java
@@ -0,0 +1,138 @@
+package com.dy.pipIrrGlobal.pojoSe;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+import org.hibernate.validator.constraints.Length;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-18 19:10
+ * @LastEditTime 2024-01-18 19:10
+ * @Description
+ */
+
+@TableName(value="se_card_operate", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "姘村崱鎿嶄綔瀹炰綋")
+public class SeCardOperate implements BaseEntity {
+    public static final long serialVersionUID = 202401181914001L;
+
+    /**
+     * 涓婚敭
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long id;
+
+    /**
+     * 姘村崱ID
+     */
+    @Schema(description = "姘村崱ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "姘村崱ID涓嶈兘涓虹┖")
+    private Long cardId;
+
+    /**
+     * 鍐滄埛ID
+     */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotNull(message = "鍐滄埛ID涓嶈兘涓虹┖")
+    private Long clientId;
+
+    /**
+     * 鍗$墖浣欓;鍏呭�笺�佹寕澶便�佸啿姝c�佽В閿�
+     */
+    @Schema(description = "鍗$墖浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "鍗$墖浣欓涓嶅皬浜巤min}", min = 0)
+    private Float money;
+
+    /**
+     * 绯荤粺浣欓;鍐叉鏃朵娇鐢�
+     */
+    @Schema(description = "绯荤粺浣欓", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Length(message = "绯荤粺浣欓涓嶅皬浜巤min}", min = 0)
+    private Float systemBalance;
+
+    /**
+     * 浜ゆ槗閲戦;璐按閲戦銆侀��娆鹃噾棰�
+     */
+    @Schema(description = "浜ゆ槗閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "浜ゆ槗閲戦涓嶅皬浜巤min}", min = 0)
+    private Float tradeAmount;
+
+    /**
+     * 姘翠环;鍏呭�兼椂浣跨敤
+     */
+    @Schema(description = "姘翠环", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "姘翠环涓嶅皬浜巤min}", min = 0)
+    private Float price;
+
+    /**
+     * 璐崱閲戦
+     */
+    @Schema(description = "璐崱閲戦", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Length(message = "璐崱閲戦涓嶅皬浜巤min}瀛�", min = 0)
+    private Integer cardCost;
+
+    /**
+     * 璧犻�侀噾棰�
+     */
+    @Schema(description = "璧犻�侀噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "璧犻�侀噾棰濅笉灏忎簬{min}", min = 0)
+    private Float gift;
+
+    /**
+     * 闈炰氦鏄撻噾棰�;琛ュ崱閲戦銆佽ˉ鎵i噾棰濄�佸墿浣欓噾棰濓紙瑙i攣锛�
+     */
+    @Schema(description = "闈炰氦鏄撻噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "闈炰氦鏄撻噾棰濅笉灏忎簬{min}", min = 0)
+    private Float noTradeAmount;
+
+    /**
+     * 鎿嶄綔绫诲瀷
+     */
+    @Schema(description = "鎿嶄綔绫诲瀷", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "浠樻鏂瑰紡涓嶅ぇ浜巤max}锛屼笉灏忎簬{min}", min = 1, max = 8)
+    private Byte operateType;
+
+    /**
+     * 浠樻鏂瑰紡缂栧彿
+     */
+    @Schema(description = "浠樻鏂瑰紡缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "浠樻鏂瑰紡缂栧彿涓嶅ぇ浜巤max}锛屼笉灏忎簬{min}", min = 1, max = 4)
+    private Long paymentId;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Length(message = "澶囨敞闀垮害灏忎簬{max}瀛�", min = 1, max = 200)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜篒D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜篒D蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Long operator;
+
+    /**
+     * 鎿嶄綔鏃堕棿
+     */
+    @Schema(description = "鎿嶄綔鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Date operateDt;
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java
index 437a9f8..0dd1eb3 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voBa/VoUserInfo.java
@@ -21,10 +21,25 @@
     private static final long serialVersionUID = 1L;
 
     @Schema(title = "鐢ㄦ埛ID")
-    private String userId;
+    private Long userId;
 
     @Schema(title = "鐢ㄦ埛濮撳悕")
     private String userName;
+
+    @Schema(title = "鎵嬫満鍙�")
+    private String phone;
+
+    @Schema(title = "鐗囧尯ID")
+    private Long blockId;
+
+    @Schema(title = "鐗囧尯鍚嶇О")
+    private String blockName;
+
+    @Schema(title = "鐘舵�佺紪鍙�")
+    private Integer stateId;
+
+    @Schema(title = "鐘舵�佸悕绉�")
+    private String stateName;
 
     @Schema(title = "瑙掕壊缂栧彿鍒楄〃")
     private List<Map<String, Object>> roleIds;
@@ -33,7 +48,6 @@
     private List<Map<String, Object>> roleNames;
 
     @Schema(title = "鏉冮檺鍒楄〃")
-    //private List<Map<String, Object>> permissions;
     private JSONArray permissions;
 
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml
index 66fbe78..c49501a 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml
@@ -256,4 +256,82 @@
             </if>
         </where>
     </select>
+
+    <!--鏍规嵁鎸囧畾鐨勬潯浠惰幏鍙栫敤鎴疯褰曟暟-->
+    <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
+        SELECT
+            COUNT(*) AS recordCount
+        FROM ba_user user
+            INNER JOIN ba_user_role usro ON usro.userId = user.id
+        <where>
+            AND user.supperAdmin != 1
+            AND user.deleted = 0
+
+            <if test = "name != null and name !=''">
+                AND user.name like CONCAT('%',#{name},'%')
+            </if>
+
+            <if test = "phone != null and phone !=''">
+                AND user.phone like CONCAT('%',#{phone},'%')
+            </if>
+
+            <if test = "roleId != null and roleId > 0">
+                AND usro.roleId = ${roleId}
+            </if>
+        </where>
+    </select>
+
+    <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鐢ㄦ埛鍒楄〃-->
+    <select id="getUsers" resultType="com.dy.pipIrrGlobal.voBa.VoUserInfo">
+        SELECT
+            id AS userId,
+            phone,
+            name AS userName,
+            disabled AS stateId,
+            (CASE
+                 WHEN disabled = 0 THEN "姝e父"
+                 WHEN disabled = 1 THEN "宸茬鐢�"
+                END) AS stateName,
+            blockId,
+            (SELECT name FROM ba_block WHERE id = user.blockId) AS blockName
+        FROM ba_user user
+            INNER JOIN ba_user_role usro ON usro.userId = user.id
+        <where>
+            AND user.supperAdmin != 1
+            AND user.deleted = 0
+
+            <if test = "name != null and name !=''">
+                AND user.name like CONCAT('%',#{name},'%')
+            </if>
+
+            <if test = "phone != null and phone !=''">
+                AND user.phone like CONCAT('%',#{phone},'%')
+            </if>
+
+            <if test = "roleId != null and roleId > 0">
+                AND usro.roleId = ${roleId}
+            </if>
+        </where>
+        ORDER BY user.id DESC
+        <if test="pageCurr != null and pageSize != null">
+            LIMIT ${pageCurr}, ${pageSize}
+        </if>
+    </select>
+
+    <!--鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇瑙掕壊ID鍒楄〃-->
+    <select id="getRoleIdsByUserId" resultType="java.util.HashMap">
+        SELECT
+            roleId
+        FROM ba_user_role
+        WHERE userId = ${userId}
+    </select>
+
+    <select id="getRoleNamesByUserId" resultType="java.util.HashMap">
+        SELECT
+            ro.name AS roleName
+        FROM ba_user_role usro
+                 INNER JOIN ba_role ro ON usro.roleId = ro.id
+        WHERE userId = ${userId}
+
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
new file mode 100644
index 0000000..52dc477
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    <!--@Table se_card_operate-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="card_id" jdbcType="BIGINT" property="cardId" />
+    <result column="client_id" jdbcType="BIGINT" property="clientId" />
+    <result column="money" jdbcType="FLOAT" property="money" />
+    <result column="system_balance" jdbcType="FLOAT" property="systemBalance" />
+    <result column="trade_amount" jdbcType="FLOAT" property="tradeAmount" />
+    <result column="price" jdbcType="FLOAT" property="price" />
+    <result column="card_cost" jdbcType="INTEGER" property="cardCost" />
+    <result column="gift" jdbcType="FLOAT" property="gift" />
+    <result column="no_trade_amount" jdbcType="FLOAT" property="noTradeAmount" />
+    <result column="operate_type_id" jdbcType="BIGINT" property="operateType" />
+    <result column="payment_id" jdbcType="BIGINT" property="paymentId" />
+    <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+    <result column="operator" jdbcType="BIGINT" property="operator" />
+    <result column="operate_dt" jdbcType="TIMESTAMP" property="operateDt" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, card_id, client_id, money, system_balance, trade_amount, price, card_cost, gift, 
+    no_trade_amount, operate_type_id, payment_id, remarks, `operator`, operate_dt
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from se_card_operate
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from se_card_operate
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    insert into se_card_operate (id, card_id, client_id, 
+      money, system_balance, trade_amount, 
+      price, card_cost, gift, 
+      no_trade_amount, operate_type, payment_id,
+      remarks, `operator`, operate_dt
+      )
+    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}, 
+      #{noTradeAmount,jdbcType=FLOAT}, #{operateType,jdbcType=BIGINT}, #{paymentId,jdbcType=BIGINT},
+      #{remarks,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    insert into se_card_operate
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="cardId != null">
+        card_id,
+      </if>
+      <if test="clientId != null">
+        client_id,
+      </if>
+      <if test="money != null">
+        money,
+      </if>
+      <if test="systemBalance != null">
+        system_balance,
+      </if>
+      <if test="tradeAmount != null">
+        trade_amount,
+      </if>
+      <if test="price != null">
+        price,
+      </if>
+      <if test="cardCost != null">
+        card_cost,
+      </if>
+      <if test="gift != null">
+        gift,
+      </if>
+      <if test="noTradeAmount != null">
+        no_trade_amount,
+      </if>
+      <if test="operateType != null">
+        operate_type_id,
+      </if>
+      <if test="paymentId != null">
+        payment_id,
+      </if>
+      <if test="remarks != null">
+        remarks,
+      </if>
+      <if test="operator != null">
+        `operator`,
+      </if>
+      <if test="operateDt != null">
+        operate_dt,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="cardId != null">
+        #{cardId,jdbcType=BIGINT},
+      </if>
+      <if test="clientId != null">
+        #{clientId,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        #{money,jdbcType=FLOAT},
+      </if>
+      <if test="systemBalance != null">
+        #{systemBalance,jdbcType=FLOAT},
+      </if>
+      <if test="tradeAmount != null">
+        #{tradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="price != null">
+        #{price,jdbcType=FLOAT},
+      </if>
+      <if test="cardCost != null">
+        #{cardCost,jdbcType=INTEGER},
+      </if>
+      <if test="gift != null">
+        #{gift,jdbcType=FLOAT},
+      </if>
+      <if test="noTradeAmount != null">
+        #{noTradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="operateType != null">
+        #{operateType,jdbcType=BIGINT},
+      </if>
+      <if test="paymentId != null">
+        #{paymentId,jdbcType=BIGINT},
+      </if>
+      <if test="remarks != null">
+        #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateDt != null">
+        #{operateDt,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    update se_card_operate
+    <set>
+      <if test="cardId != null">
+        card_id = #{cardId,jdbcType=BIGINT},
+      </if>
+      <if test="clientId != null">
+        client_id = #{clientId,jdbcType=BIGINT},
+      </if>
+      <if test="money != null">
+        money = #{money,jdbcType=FLOAT},
+      </if>
+      <if test="systemBalance != null">
+        system_balance = #{systemBalance,jdbcType=FLOAT},
+      </if>
+      <if test="tradeAmount != null">
+        trade_amount = #{tradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="price != null">
+        price = #{price,jdbcType=FLOAT},
+      </if>
+      <if test="cardCost != null">
+        card_cost = #{cardCost,jdbcType=INTEGER},
+      </if>
+      <if test="gift != null">
+        gift = #{gift,jdbcType=FLOAT},
+      </if>
+      <if test="noTradeAmount != null">
+        no_trade_amount = #{noTradeAmount,jdbcType=FLOAT},
+      </if>
+      <if test="operateType != null">
+        operate_type_id = #{operateType,jdbcType=BIGINT},
+      </if>
+      <if test="paymentId != null">
+        payment_id = #{paymentId,jdbcType=BIGINT},
+      </if>
+      <if test="remarks != null">
+        remarks = #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null">
+        `operator` = #{operator,jdbcType=BIGINT},
+      </if>
+      <if test="operateDt != null">
+        operate_dt = #{operateDt,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeCardOperate">
+    <!--@mbg.generated-->
+    update se_card_operate
+    set card_id = #{cardId,jdbcType=BIGINT},
+      client_id = #{clientId,jdbcType=BIGINT},
+      money = #{money,jdbcType=FLOAT},
+      system_balance = #{systemBalance,jdbcType=FLOAT},
+      trade_amount = #{tradeAmount,jdbcType=FLOAT},
+      price = #{price,jdbcType=FLOAT},
+      card_cost = #{cardCost,jdbcType=INTEGER},
+      gift = #{gift,jdbcType=FLOAT},
+      no_trade_amount = #{noTradeAmount,jdbcType=FLOAT},
+      operate_type_id = #{operateType,jdbcType=BIGINT},
+      payment_id = #{paymentId,jdbcType=BIGINT},
+      remarks = #{remarks,jdbcType=VARCHAR},
+      `operator` = #{operator,jdbcType=BIGINT},
+      operate_dt = #{operateDt,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java
index 3aa4298..86e6440 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserCtrl.java
@@ -87,11 +87,11 @@
                             schema = @Schema(implementation = BaUser.class))}
             )
     })
-    @PostMapping(path = "some", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @GetMapping(path = "some")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<BaUser>>> some(@RequestBody @Valid QueryVo vo) {
+    public BaseResponse<QueryResultVo<List<VoUserInfo>>> some(QueryVo vo) {
         try {
-            QueryResultVo<List<BaUser>> res = this.sv.selectSome(vo);
+            QueryResultVo<List<VoUserInfo>> res = this.sv.selectSome(vo);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鏌ヨ鐢ㄦ埛寮傚父", e);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java
index 77591e9..4708b90 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/user/UserSv.java
@@ -54,23 +54,68 @@
     }
 
     /**
-     * 寰楀埌涓�涓敤鎴�
-     *
-     * @param vo 鏌ヨ鏉′欢鍊煎璞�
-     * @return 鐢ㄦ埛瀹炰綋
+     * 鑾峰彇鐢ㄦ埛鍒楄〃
      */
-    @SuppressWarnings("unchecked")
-    public QueryResultVo<List<BaUser>> selectSome(QueryVo vo) {
-        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
-        Long itemTotal = this.dao.selectTotal(params);
+    public QueryResultVo<List<VoUserInfo>> selectSome(QueryVo queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
 
-        QueryResultVo<List<BaUser>> rsVo = new QueryResultVo<>();
-        rsVo.pageSize = vo.pageSize;
-        rsVo.pageCurr = vo.pageCurr;
+        Long itemTotal = this.dao.getRecordCount(params);
+
+        QueryResultVo<List<VoUserInfo>> rsVo = new QueryResultVo<>() ;
+
+        Integer pageCurr = 0;
+        Integer pageSize = 10000;
+        rsVo.pageCurr = 1;
+        rsVo.pageSize = 10000;
+        if(queryVo.pageSize != null && queryVo.pageCurr != null) {
+            rsVo.pageSize = queryVo.pageSize ;
+            rsVo.pageCurr = queryVo.pageCurr;
+            pageSize = queryVo.pageSize ;
+            pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString());
+        }
+        params.put("pageCurr", pageCurr);
+        params.put("pageSize", pageSize);
+
         rsVo.calculateAndSet(itemTotal, params);
-        rsVo.obj = this.dao.selectSome(params);
 
-        return rsVo;
+        /**
+         * 鑾峰彇鐢ㄦ埛鍒楄〃锛屽彇鐢ㄦ埛ID
+         * 鏍规嵁鐢ㄦ埛ID鑾峰彇roleId鍒楄〃锛屽苟娣诲姞鍒拌繑鍥炲璞′腑
+         * 鏍规嵁鐢ㄦ埛ID鑾峰彇roleName鍒楄〃锛屽苟娣诲姞鍒拌繑鍥炲璞′腑
+         */
+        List<VoUserInfo> list_users = Optional.ofNullable(this.dao.getUsers(params)).orElse(new ArrayList<>());
+        if(list_users.size() > 0) {
+            for(int i = 0; i < list_users.size(); i++) {
+                VoUserInfo voUserInfo = list_users.get(i);
+                Long userId = voUserInfo.getUserId();
+
+                JSONArray array_roleIds = new JSONArray();
+                List<Map<String, Object>> list_roleIds = Optional.ofNullable(this.dao.getRoleIdsByUserId(userId)).orElse(new ArrayList<>());
+                for (int j = 0; j < list_roleIds.size(); j++) {
+                    Map map_roleId = list_roleIds.get(j);
+                    if(map_roleId != null) {
+                        array_roleIds.add(map_roleId.get("roleId").toString());
+                    }
+
+                }
+                List<Map<String, Object>> list_roleId = (List<Map<String, Object>>) JSON.parse(array_roleIds.toJSONString());
+
+                JSONArray array_roleNames = new JSONArray();
+                List<Map<String, Object>> list_roleNames = Optional.ofNullable(this.dao.getRoleNamesByUserId(userId)).orElse(new ArrayList<>());
+                for (int j = 0; j < list_roleNames.size(); j++) {
+                    Map map_roleName = list_roleNames.get(j);
+                    if(map_roleName != null) {
+                        array_roleNames.add(map_roleName.get("roleName").toString());
+                    }
+                }
+                List<Map<String, Object>> list_roleName = (List<Map<String, Object>>) JSON.parse(array_roleNames.toJSONString());
+
+                voUserInfo.setRoleIds(list_roleId);
+                voUserInfo.setRoleNames(list_roleName);
+            }
+        }
+        rsVo.obj = list_users;
+        return rsVo ;
     }
 
     /**
@@ -182,7 +227,7 @@
         JSONArray array_permission = new JSONArray();
         Map map = Optional.ofNullable(dao.getUserInfoById(userId)).orElse(new HashMap());
         if(map.size() > 0) {
-            voUserInfo.setUserId(String.valueOf(userId));
+            voUserInfo.setUserId(userId);
             voUserInfo.setUserName(map.get("userName").toString());
         }
 
@@ -216,7 +261,6 @@
         voUserInfo.setRoleIds(list_roleIds);
         voUserInfo.setRoleNames(list_roleNames);
         voUserInfo.setPermissions(array_permission);
-
 
         return voUserInfo;
     }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java
index 745991c..e31783a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/ActiveCardCtrl.java
@@ -9,6 +9,7 @@
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.util.Constant;
 import com.dy.pipIrrGlobal.voSe.VoActiveCard;
+import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
 import com.dy.pipIrrSell.clientCard.CardStateENUM;
 import com.dy.pipIrrSell.clientCard.ClientCardSv;
 import com.dy.pipIrrSell.clientCard.LastOperateENUM;
@@ -262,7 +263,7 @@
         //String clientNum = "";
         Long clientId = 0L;
         Integer cardCost = po.getCardCost();
-        Double reissueAmount = po.getReissueAmount();
+        Float reissueAmount = po.getReissueAmount();
         Long paymentId = po.getPaymentId();
         String remarks = po.getRemarks();
         Long operator = po.getOperator();
@@ -304,7 +305,7 @@
         activeCard.setCardcost(cardCost);
         activeCard.setPaymentid(paymentId);
         activeCard.setReissueamount(reissueAmount);
-        activeCard.setOperatetype(OperateTypeENUM.REPLACE.getCode());
+        activeCard.setOperatetype(OperateTypeENUM.REISSUE.getCode());
         activeCard.setRemarks(remarks);
         activeCard.setOperator(operator);
         activeCard.setOperatedt(replaceTime);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java
index b8b4e05..ab3451b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/DtoActiveCard.java
@@ -65,7 +65,7 @@
      */
     @Schema(description = "琛ュ崱閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
     @Min(value = 0, message="琛ュ崱閲戦涓嶈兘灏忎簬0")
-    private Double reissueAmount;
+    private Float reissueAmount;
 
     /**
      * 鏀粯鏂瑰紡缂栧彿
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/OperateTypeENUM.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/OperateTypeENUM.java
deleted file mode 100644
index a4012fb..0000000
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/activeCard/OperateTypeENUM.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.dy.pipIrrSell.activeCard;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * @author ZhuBaoMin
- * @date 2023/12/8 10:56
- * @LastEditTime 2023/12/8 10:56
- * @Description 寮�鍗�/琛ュ崱绫诲瀷鏋氫妇
- */
-
-@Getter
-@AllArgsConstructor
-public enum OperateTypeENUM {
-    ACTIVE((byte)1, "寮�鍗�"),
-    REPLACE((byte)2, "琛ュ崱");
-
-    private final Byte code;
-    private final String message;
-}
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
new file mode 100644
index 0000000..592df3a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateCtrl.java
@@ -0,0 +1,550 @@
+package com.dy.pipIrrSell.cardOperate;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
+import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
+import com.dy.pipIrrGlobal.util.Constant;
+import com.dy.pipIrrSell.cardOperate.converter.RechargeDtoMapper;
+import com.dy.pipIrrSell.cardOperate.dto.*;
+import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
+import com.dy.pipIrrSell.clientCard.CardStateENUM;
+import com.dy.pipIrrSell.clientCard.ClientCardSv;
+import com.dy.pipIrrSell.clientCard.LastOperateENUM;
+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;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.MediaType;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-18 19:36
+ * @LastEditTime 2024-01-18 19:36
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "姘村崱鎿嶄綔绠$悊", description = "姘村崱鍚勭鎿嶄綔")
+@RestController
+@RequestMapping(path="card")
+@RequiredArgsConstructor
+public class CardOperateCtrl {
+    private final CardOperateSv cardOperateSv;
+    private final ClientCardSv clientCardSv;
+
+    /**
+     * 寮�鍗�
+     * @param po 寮�鍗′紶鍏ュ璞�
+     * @param bindingResult
+     * @return 姘村崱缂栧彿
+     */
+    @Operation(summary = "寮�鍗�", description = "鏂板紑鍐滄埛鍗�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "active", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_active(@RequestBody @Valid DtoActiveCard po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        // 鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode
+        String areaCode = String.valueOf(cardOperateSv.getAreaCodeByNum(po.getClientNum()));
+
+        /**
+         * 鏍规嵁琛屾斂鍖哄垝涓诧紙areaCode锛夊湪姘村崱琛ㄤ腑閽堝姘村崱缂栧彿锛坈ardNum锛夎繘琛屾ā绯婃煡璇�
+         * 濡傛灉4浣嶉『搴忓彿宸茬粡杈惧埌鏈�澶у�硷紝鎻愮ず鐢ㄦ埛鑱旂郴绯荤粺绠$悊鍛�
+         * 濡傛灉4浣嶉『搴忓彿鏈揪鍒版渶澶у�硷紝鍒欏姞1
+         * cardNum涓烘柊鐨勫崱鍙�
+         */
+        String cardNum = Optional.ofNullable(cardOperateSv.getCardNumOfMax(areaCode)).orElse("");
+        if(cardNum != null && cardNum.trim().length() > 0) {
+            Integer number = Integer.parseInt(cardNum.substring(12));
+            number = number + 1;
+            if(number > 9999) {
+                return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_OVERRUN.getMessage());
+            }
+            cardNum = cardNum.substring(0, 12) + String.format("%04d", number);
+        } else {
+            cardNum = areaCode + "0001";
+        }
+
+        /**
+         * cardAddr         姘村崱鍦板潃锛堜粎浠呭啓鍏ワ紝鏃犱笟鍔★級
+         * clientNum        鍐滄埛缂栧彿
+         * cardCost         鍗$墖璐圭敤
+         * amount           鍏呭�奸噾棰�
+         * reissueAmount    琛ュ崱閲戦锛岃ˉ鍗℃椂浣跨敤
+         * paymentId        鏀粯鏂瑰紡缂栧彿
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * activeTime       寮�鍗℃椂闂�
+         */
+        String cardAddr = po.getCardAddr();
+        String clientNum = po.getClientNum();
+        Integer cardCost = po.getCardCost();
+        Float amount = po.getAmount();
+        Long paymentId = po.getPaymentId();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date activeTime = new Date();
+
+        /**
+         * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鍐滄埛ID
+         */
+        Long clientId = cardOperateSv.getClientIdByNum(clientNum);
+
+        /**
+         * 娣诲姞鍐滄埛鍗¤褰�
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setCardaddr(cardAddr);
+        seClientCard.setCardnum(cardNum);
+        seClientCard.setClientid(clientId);
+        seClientCard.setMoney(0f);
+        seClientCard.setState(CardStateENUM.NORMAL.getCode());
+        seClientCard.setCreatedt(activeTime);
+        seClientCard.setLastoper(LastOperateENUM.ACTIVE.getCode());
+
+        Long cardId = Optional.ofNullable(clientCardSv.add(seClientCard)).orElse(0L) ;
+        if(cardId == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.ACTIVE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞寮�鍗¤褰�
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setCardCost(cardCost);
+        seCardOperate.setPaymentId(paymentId);
+        seCardOperate.setOperateType(OperateTypeENUM.ACTIVE.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(activeTime);
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.ACTIVE_FAIL_WRITE_ACTIVE_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 濡傛灉鎿嶄綔浜哄憳寮�鍗℃椂杈撳叆浜嗗厖鍊奸噾棰濓紝鍒欏紑鍗″悗璋冪敤鍏呭�煎姛鑳�
+         */
+        po.setCardNum(cardNum);
+        if(amount != null && amount > 0) {
+            po.setClientId(clientId);
+            DtoRecharge dtoRecharge = RechargeDtoMapper.INSTANCT.po2vo(po);
+            dtoRecharge.setMoney(0f);
+            dtoRecharge.setGift(0f);
+            dtoRecharge.setPrice(0f);
+            BaseResponse<Boolean> job = cardOperateSv.addRecharge(dtoRecharge);
+            if(!job.getCode().equals("0001")) {
+                return BaseResponseUtils.buildFail(SellResultCode.ACTIVE_FAIL_RECHARGE_EXCEPTION.getMessage());
+            }
+        }
+
+        Map map = new HashMap();
+        map.put("projectCode", Constant.projectCode_ym);
+        map.put("cardNum", cardNum);
+        return BaseResponseUtils.buildSuccess(map) ;
+    }
+
+    /**
+     * 琛ュ崱
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "琛ュ崱", description = "琛ュ崱")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "reissue", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add_reissue(@RequestBody @Valid com.dy.pipIrrSell.activeCard.DtoActiveCard po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        /**
+         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛屾洿鏂版按鍗¤〃鐢級
+         * cardNum          姘村崱缂栧彿
+         * clientId         鍐滄埛ID锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛屾坊鍔犺ˉ鍗′娇鐢級
+         * cardCost         鍗$墖璐圭敤
+         * reissueAmount    琛ュ崱閲戦锛岃ˉ鍗℃椂浣跨敤
+         * paymentId        鏀粯鏂瑰紡缂栧彿
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * activeTime       琛ュ崱鏃堕棿
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Integer cardCost = po.getCardCost();
+        Float reissueAmount = po.getReissueAmount();
+        Long paymentId = po.getPaymentId();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date reissueTime = new Date();
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_ERROR.getMessage());
+        }
+        cardId = Long.parseLong(map.get("cardId").toString());
+        clientId = Long.parseLong(map.get("clientId").toString());
+
+        /**
+         * 淇敼鍐滄埛鍗′俊鎭細
+         *      琛ュ崱鏃堕棿
+         *      鏈�鍚庢搷浣滅被鍨�-2
+         */
+        SeClientCard seClientCard = new SeClientCard();
+        seClientCard.setId(cardId);
+        seClientCard.setReplacedt(reissueTime);
+        seClientCard.setLastoper(LastOperateENUM.REPLACE.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+        if(rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞琛ュ崱璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setCardCost(cardCost);
+        seCardOperate.setPaymentId(paymentId);
+        seCardOperate.setNoTradeAmount(reissueAmount);
+        seCardOperate.setOperateType(OperateTypeENUM.REISSUE.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(reissueTime);
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
+        }
+
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+    /**
+     * 鍏呭��
+     * @param po 鍏呭�间紶杈撳璞�
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "鍏呭��", description = "鍏呭��")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "recharge", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        return cardOperateSv.addRecharge(po);
+    }
+
+    /**
+     * 閿�鍗�
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "娣诲姞娉ㄩ攢璁板綍", description = "娣诲姞娉ㄩ攢璁板綍")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "cancel", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoCancel po, BindingResult bindingResult){
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        /**
+         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛屼慨鏀瑰啘鎴峰崱浣跨敤锛�
+         * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * cardNum          姘村崱缂栧彿
+         * refund           閫�娆鹃噾棰�
+         * refundType       閫�娆炬柟寮�
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * cancelTime       娉ㄩ攢鏃堕棿
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float refund = po.getRefund();
+        Byte refundType = po.getRefundType();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date cancelTime = new Date();
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(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.buildFail(SellResultCode.CANCEL_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞娉ㄩ攢璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setTradeAmount(-refund);
+        seCardOperate.setOperateType(OperateTypeENUM.CANCEL.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(cancelTime);
+
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.CANCEL_FAIL_WRITE_CANCELL_ERROR.getMessage());
+        }
+
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+    /**
+     * 鎸傚け
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @Operation(summary = "娣诲姞鎸傚け璁板綍", description = "娣诲姞鎸傚け璁板綍")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "loss", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoLoss po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        /**
+         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * cardNum          姘村崱缂栧彿
+         * money            浣欓
+         * refund           閫�娆鹃噾棰�
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * lossTime         鎸傚け鏃堕棿
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float money = po.getMoney();
+        Float refund = po.getRefund();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date lossTime = new Date();
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(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.setMoney(money);
+        seClientCard.setLossdtdt(lossTime);
+        seClientCard.setState(CardStateENUM.LOSS.getCode());
+        seClientCard.setLastoper(LastOperateENUM.LOSS.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+        if(rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.LOSS_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞鎸傚け璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(money);
+        seCardOperate.setTradeAmount(-refund);
+        seCardOperate.setOperateType(OperateTypeENUM.LOSS.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(lossTime);
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.LOSS_FAIL_WRITE_LOSS_ERROR.getMessage());
+        }
+
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+    @Operation(summary = "娣诲姞鍐叉璁板綍", description = "娣诲姞鍐叉璁板綍")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = Boolean.class))}
+            )
+    })
+    @PostMapping(path = "reversal", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> add(@RequestBody @Valid DtoReversal po, BindingResult bindingResult){
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        /**
+         * cardId           姘村崱缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛屼慨鏀瑰啘鎴峰崱浣跨敤锛�
+         * clientId         鍐滄埛缂栧彿锛堥潪浼犲叆鍙傛暟锛岀敱cardNum鍙嶆煡锛�
+         * cardNum          姘村崱缂栧彿
+         * cardBalance      鍗$墖浣欓
+         * systemBalance    绯荤粺浣欓
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * reversalTime     鍐叉鏃堕棿
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float cardBalance = po.getCardBalance();
+        Float systemBalance = po.getSystemBalance();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date reversalTime = new Date();
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(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.setReversaldt(reversalTime);
+        seClientCard.setMoney(cardBalance);
+        seClientCard.setLastoper(LastOperateENUM.REVERSAL.getCode());
+        Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0);
+        if(rec_updateClientCard == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞鍐叉璁板綍
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(cardBalance);
+        seCardOperate.setSystemBalance(systemBalance);
+        seCardOperate.setOperateType(OperateTypeENUM.REVERSAL.getCode());
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(reversalTime);
+        Long rec = Optional.ofNullable(cardOperateSv.add(seCardOperate)).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.REVERSAL_FAIL_WRITE_REVERSAL_ERROR.getMessage());
+        }
+
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+
+}
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
new file mode 100644
index 0000000..2ae05b5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
@@ -0,0 +1,177 @@
+package com.dy.pipIrrSell.cardOperate;
+
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
+import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
+import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
+import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
+import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
+import com.dy.pipIrrSell.cardOperate.dto.DtoRecharge;
+import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM;
+import com.dy.pipIrrSell.clientCard.ClientCardSv;
+import com.dy.pipIrrSell.clientCard.LastOperateENUM;
+import com.dy.pipIrrSell.result.SellResultCode;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-18 19:36
+ * @LastEditTime 2024-01-18 19:36
+ * @Description
+ */
+
+@Slf4j
+@Service
+public class CardOperateSv {
+    @Autowired
+    private SeCardOperateMapper seCardOperateMapper;
+
+    @Autowired
+    private SeClientCardMapper seClientCardMapper;
+
+    @Autowired
+    private SeClientMapper seClientMapper;
+
+    @Autowired
+    private ClientCardSv clientCardSv;
+
+
+    /**
+     * 娣诲姞寮�鍗¤褰�
+     * @param po 姘村崱鎿嶄綔瀵硅薄
+     * @return 寮�鍗¤褰曚富閿�
+     */
+    public Long activeCard(SeCardOperate po) {
+        seCardOperateMapper.insert(po);
+        return po.getId();
+    }
+
+    /**
+     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍唬鐮侊紝寮�鍗′娇鐢�
+     * @param clientNum 鍐滄埛缂栧彿
+     * @return 5绾ц鏀垮尯鍒掍唬鐮�
+     */
+    public Long getAreaCodeByNum(String clientNum) {
+        return seClientMapper.getAreaCodeByNum(clientNum);
+    }
+
+    /**
+     * 鏍规嵁琛屾斂鍖哄垝涓叉ā鍧楁煡璇㈡按鍗$紪鍙凤紝寮�鍗′娇鐢�
+     * @param areaCode
+     * @return
+     */
+    String getCardNumOfMax(String areaCode) {
+        return seClientCardMapper.getCardNumOfMax(areaCode);
+    }
+
+    /**
+     * 鏍规嵁鍐滄埛缂栧彿鑾峰彇鍐滄埛ID锛屽紑鍗′娇鐢�
+     * @param clientNum
+     * @return
+     */
+    public Long getClientIdByNum(String clientNum) {
+        return seClientMapper.getClientIdByNum(clientNum);
+    }
+
+    /**
+     * 娣诲姞姘村崱鎿嶄綔瀵硅薄锛屽悇鎿嶄綔閮戒娇鐢�
+     * @param po 姘村崱鎿嶄綔瀵硅薄
+     * @return 鎿嶄綔璁板綍涓婚敭
+     */
+    public Long add(SeCardOperate po) {
+        seCardOperateMapper.insert(po);
+        return po.getId();
+    }
+
+    /**
+     * 娣诲姞鍏呭�艰褰�
+     * 淇敼鍐滄埛淇℃伅銆佹坊鍔犲厖鍊艰褰�
+     * @param po
+     * @return
+     */
+    public BaseResponse<Boolean> addRecharge(DtoRecharge po){
+        /**
+         * cardId           姘村崱缂栧彿锛堜緷鎹按鍗$紪鍙疯幏鍙栵級
+         * clientId         鍐滄埛缂栧彿锛堜緷鎹按鍗$紪鍙疯幏鍙栵級
+         * cardNum          姘村崱缂栧彿
+         * money            鍗$墖浣欓
+         * amount           鍏呭�奸噾棰�
+         * gift             璧犻�侀噾棰�
+         * afterRecharge    鍏呭�煎悗浣欓
+         * paymentId        鏀粯鏂瑰紡缂栧彿
+         * price            姘翠环
+         * remarks          澶囨敞
+         * operator         鎿嶄綔浜虹紪鍙�
+         * rechargeTime     鍏呭�兼椂闂�
+         */
+        Long cardId = 0L;
+        Long clientId = 0L;
+        String cardNum = po.getCardNum();
+        Float money = po.getMoney();
+        Float amount = po.getAmount();
+        Float gift = po.getGift();
+        Float afterRecharge = money + amount + gift;
+        Long paymentId = po.getPaymentId();
+        Float price = po.getPrice();
+        String remarks = po.getRemarks();
+        Long operator = po.getOperator();
+        Date rechargeTime = new Date();
+
+        /**
+         * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+         */
+        Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+        if(map == null || map.size() <= 0) {
+            return BaseResponseUtils.buildFail(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.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage());
+        }
+
+        /**
+         * 娣诲姞鍏呭�艰褰�
+         */
+        SeCardOperate seCardOperate = new SeCardOperate();
+        seCardOperate.setCardId(cardId);
+        seCardOperate.setClientId(clientId);
+        seCardOperate.setMoney(money);
+        seCardOperate.setTradeAmount(amount);
+        seCardOperate.setGift(gift);
+        seCardOperate.setOperateType(OperateTypeENUM.RECHARGE.getCode());
+        seCardOperate.setPaymentId(paymentId);
+        seCardOperate.setPrice(price);
+        seCardOperate.setRemarks(remarks);
+        seCardOperate.setOperator(operator);
+        seCardOperate.setOperateDt(rechargeTime);
+
+        seCardOperateMapper.insert(seCardOperate);
+        Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
+        if(rec == 0) {
+            return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage());
+        }
+
+        return BaseResponseUtils.buildSuccess(true) ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/converter/RechargeDtoMapper.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/converter/RechargeDtoMapper.java
new file mode 100644
index 0000000..fb35ed1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/converter/RechargeDtoMapper.java
@@ -0,0 +1,26 @@
+package com.dy.pipIrrSell.cardOperate.converter;
+
+import com.dy.pipIrrSell.cardOperate.dto.DtoActiveCard;
+import com.dy.pipIrrSell.cardOperate.dto.DtoRecharge;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 9:41
+ * @LastEditTime 2024-01-19 9:41
+ * @Description
+ */
+
+@Mapper
+public interface RechargeDtoMapper {
+    RechargeDtoMapper INSTANCT = Mappers.getMapper(RechargeDtoMapper.class);
+
+    @Mapping(target = "cardNum", source = "cardNum")
+    @Mapping(target = "amount", source = "amount")
+    @Mapping(target = "paymentId", source = "paymentId")
+    @Mapping(target = "remarks", source = "remarks")
+    @Mapping(target = "operator", source = "operator")
+    DtoRecharge po2vo(DtoActiveCard po);
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoActiveCard.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoActiveCard.java
new file mode 100644
index 0000000..4f8f7ad
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoActiveCard.java
@@ -0,0 +1,89 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-18 19:44
+ * @LastEditTime 2024-01-18 19:44
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "寮�鍗�/琛ュ崱浼犲叆瀵硅薄")
+public class DtoActiveCard {
+    public static final long serialVersionUID = 202401181945001L;
+    /**
+     * 姘村崱鍦板潃锛屼粎淇濆瓨锛屾棤涓氬姟
+     */
+    @Schema(description = "姘村崱鍦板潃", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱鍦板潃涓嶈兘涓虹┖")
+    private String cardAddr;
+
+    /**
+     * 鍐滄埛缂栧彿锛屽紑鍗′娇鐢�
+     */
+    @Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String clientNum;
+
+    /**
+     * 鍐滄埛ID锛堜富閿級锛屼笉鏄紑鍗℃帴鍙d紶鍏ワ紝鐢卞啘鎴风紪鍙疯幏寰楋紝淇濆瓨寮�鍗¤褰曞拰鍏呭�艰褰曢兘闇�瑕�
+     */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long clientId;
+
+    /**
+     * 姘村崱缂栧彿锛屼笉鏄紑鍗℃帴鍙d紶鍏ワ紝鐢卞啘鎴风紪鍙疯幏寰楋紝鍏呭�奸渶瑕�
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String cardNum;
+
+    /**
+     * 鍗$墖璐圭敤
+     */
+    @Schema(description = "鍗$墖璐圭敤", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鍗$墖璐圭敤蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Integer cardCost;
+
+    /**
+     * 鍏呭�奸噾棰�
+     */
+    @Schema(description = "鍏呭�奸噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="鍏呭�奸噾棰濅笉鑳藉皬浜�0")
+    private Float amount;
+
+    /**
+     * 琛ュ崱閲戦
+     */
+    @Schema(description = "琛ュ崱閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="琛ュ崱閲戦涓嶈兘灏忎簬0")
+    private Double reissueAmount;
+
+    /**
+     * 鏀粯鏂瑰紡缂栧彿
+     */
+    @Schema(description = "鏀粯鏂瑰紡缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鏀粯鏂瑰紡缂栧彿蹇呴』涓哄ぇ浜�0鐨勬暣鏁�")
+    private Long paymentId;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoCancel.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoCancel.java
new file mode 100644
index 0000000..250b1e1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoCancel.java
@@ -0,0 +1,64 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 10:08
+ * @LastEditTime 2024-01-19 10:08
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "娉ㄩ攢浼犲叆瀵硅薄")
+public class DtoCancel {
+    public static final long serialVersionUID = 202401191009001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank
+    private String cardNum;
+
+    /**
+     * 鍐滄埛缂栧彿
+     */
+    //@Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    //private Long clientId;
+
+    /**
+     * 閫�娆鹃噾棰�
+     */
+    @Schema(description = "閫�娆鹃噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="閫�娆鹃噾棰濅笉鑳藉皬浜�0")
+    private Float refund;
+
+    /**
+     * 閫�娆炬柟寮�;1-鐜伴噾
+     */
+    @Schema(description = "閫�娆炬柟寮�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "閫�娆炬柟寮忓繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Byte refundType;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoLoss.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoLoss.java
new file mode 100644
index 0000000..60008b7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoLoss.java
@@ -0,0 +1,58 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 10:32
+ * @LastEditTime 2024-01-19 10:32
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鎸傚け浼犲叆瀵硅薄")
+public class DtoLoss {
+    public static final long serialVersionUID = 202401191033001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private String cardNum;
+
+    /**
+     * 浣欓
+     */
+    @Schema(description = "浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="浣欓涓嶈兘灏忎簬0")
+    private Float money;
+
+    /**
+     * 閫�娆鹃噾棰�
+     */
+    @Schema(description = "閫�娆鹃噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="閫�娆鹃噾棰濅笉鑳藉皬浜�0")
+    private Float refund;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRecharge.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRecharge.java
new file mode 100644
index 0000000..d1e4f28
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoRecharge.java
@@ -0,0 +1,84 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 9:06
+ * @LastEditTime 2024-01-19 9:06
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鍏呭�间紶鍏ュ璞�")
+public class DtoRecharge {
+    public static final long serialVersionUID = 202401190907001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private String cardNum;
+
+    /**
+     * 鍐滄埛ID锛屼笉鏄厖鍊兼帴鍙d紶鍏ワ紝鐢卞紑鍗″璞′紶鍏ワ紝淇濆瓨鍏呭�艰褰曢渶瑕�
+     */
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long clientId;
+
+    /**
+     * 鍗$墖浣欓
+     */
+    @Schema(description = "鍗$墖浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="鍗$墖浣欓涓嶈兘灏忎簬0")
+    private Float money;
+
+    /**
+     * 鍏呭�奸噾棰�
+     */
+    @Schema(description = "鍏呭�奸噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="鍏呭�奸噾棰濅笉鑳藉皬浜�0")
+    private Float amount;
+
+    /**
+     * 璧犻�侀噾棰�
+     */
+    @Schema(description = "璧犻�侀噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="璧犻�侀噾棰濅笉鑳藉皬浜�0")
+    private Float gift;
+
+    /**
+     * 浠樻鏂瑰紡缂栧彿
+     */
+    @Schema(description = "浠樻鏂瑰紡缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long paymentId;
+
+    /**
+     * 姘翠环
+     */
+    @Schema(description = "姘翠环", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="姘翠环涓嶈兘灏忎簬0")
+    private Float price;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReversal.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReversal.java
new file mode 100644
index 0000000..1fde2fc
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/dto/DtoReversal.java
@@ -0,0 +1,64 @@
+package com.dy.pipIrrSell.cardOperate.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-01-19 13:36
+ * @LastEditTime 2024-01-19 13:36
+ * @Description
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鍐叉浼犲叆瀵硅薄")
+public class DtoReversal {
+    public static final long serialVersionUID = 202401191337001L;
+
+    /**
+     * 姘村崱缂栧彿
+     */
+    @Schema(description = "姘村崱缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @NotBlank(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+    private String cardNum;
+
+    /**
+     * 鍐滄埛缂栧彿
+     */
+    //@Schema(description = "鍐滄埛缂栧彿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    //private String clientNum;
+
+    /**
+     * 鍗$墖浣欓
+     */
+    @Schema(description = "鍗$墖浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="鍗$墖浣欓涓嶈兘灏忎簬0")
+    private Float cardBalance;
+
+    /**
+     * 绯荤粺浣欓
+     */
+    @Schema(description = "绯荤粺浣欓", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Min(value = 0, message="绯荤粺浣欓涓嶈兘灏忎簬0")
+    private Float systemBalance;
+
+    /**
+     * 澶囨敞淇℃伅
+     */
+    @Schema(description = "澶囨敞", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String remarks;
+
+    /**
+     * 鎿嶄綔浜虹紪鍙�
+     */
+    @Schema(description = "鎿嶄綔浜虹紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @Positive(message = "鎿嶄綔浜虹紪鍙峰繀椤讳负澶т簬0鐨勬暣鏁�")
+    private Long operator;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/enums/OperateTypeENUM.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/enums/OperateTypeENUM.java
new file mode 100644
index 0000000..595627b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/enums/OperateTypeENUM.java
@@ -0,0 +1,27 @@
+package com.dy.pipIrrSell.cardOperate.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2023/12/8 10:56
+ * @LastEditTime 2023/12/8 10:56
+ * @Description 寮�鍗�/琛ュ崱绫诲瀷鏋氫妇
+ */
+
+@Getter
+@AllArgsConstructor
+public enum OperateTypeENUM {
+    ACTIVE((byte)1, "寮�鍗�"),
+    RECHARGE((byte)2, "鍏呭��"),
+    CANCEL((byte)3, "閿�鍗�"),
+    REISSUE((byte)4, "琛ュ崱"),
+    REFUND((byte)5, "琛ユ墸"),
+    LOSS((byte)6, "鎸傚け"),
+    REVERSAL((byte)7, "鍐叉"),
+    UNLOCK((byte)8, "瑙i攣");
+
+    private final Byte code;
+    private final String message;
+}

--
Gitblit v1.8.0