Forráskód Böngészése

fix 代充数据统计;变更代充操作人员

zoujiajian 9 hónapja
szülő
commit
551937d8f6

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GptRechargeOperatorChangeRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GptRechargeOperatorChangeRecord;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: GptRechargeOperatorChangeRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2025/11/17 16:47
+ */
+public interface GptRechargeOperatorChangeRecordMapper extends BaseMapper<GptRechargeOperatorChangeRecord> {
+}

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GroupsRelationMapper.java

@@ -7,6 +7,7 @@ import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.entity.PhoneCode;
 import com.cyksj.model.manage.views.GroupsRelationBackView;
 import com.cyksj.model.manage.views.GroupsRelationView;
+import com.cyksj.model.response.GptRechargeStatisticsRecordResp;
 import com.cyksj.model.views.GroupsRelationUserView;
 import com.cyksj.model.views.RenewalView;
 import com.cyksj.model.views.UserRecommendGoodsFrontView;
@@ -87,4 +88,6 @@ public interface GroupsRelationMapper extends BaseMapper<GroupsRelation> {
 	Integer selectCountByGoodsId(@Param("userIds") List<Long> userIdList, @Param("goodsId") Long goodsId, @Param("now") DateTime now);
 
 	Integer updateUserVipSkusExpiryTime(@Param("userIds") List<Long> userIds, @Param("vipSkuIds") List<Long> vipSkuIds, @Param("expiryTime") Date expiryTime);
+
+	List<GptRechargeStatisticsRecordResp> selectRechargeRecordNum(@Param("goodsId") Long goodsId, @Param("start") String start, @Param("end") String end);
 }

+ 30 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GptRechargeOperatorChangeRecord.java

@@ -0,0 +1,30 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: GptRechargeOperatorChangeRecord
+ * 创建者: JavaZou
+ * 创建时间:2025/11/17 16:46
+ */
+@Getter
+@Setter
+public class GptRechargeOperatorChangeRecord extends BaseEntity{
+	private Long relationId;
+
+	private Long userId;
+
+	/**
+	 * 变更前操作人员
+	 */
+	private String bf;
+
+	/**
+	 * 变更后操作人员
+	 */
+	private String af;
+
+	private String operator;
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/response/GptRechargeStatisticsRecordResp.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: GptRechargeStatisticsRecordResp
+ * 创建者: JavaZou
+ * 创建时间:2025/11/17 16:52
+ */
+@Getter
+@Setter
+public class GptRechargeStatisticsRecordResp {
+	private String operator;
+
+	private Integer num;
+}

+ 14 - 0
netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml

@@ -478,4 +478,18 @@
         </foreach>
         and gr.expiry_time > #{now}
     </select>
+
+    <select id="selectRechargeRecordNum" resultType="com.cyksj.model.response.GptRechargeStatisticsRecordResp">
+        select gur.operator,count(1) as num from gpt_user_recharge_num_record gur left join groups_relation gr on gr.id = gur.relation_id
+        left join groups_trips gt on gt.id = gr.groups_id
+        left join goods_don_sku sku on sku.id = gt.sku_id
+        where gur.num &lt; 0
+        and gur.operator != ''
+        and gur.created_time between #{start} and #{end}
+        <if test="goodsId != null">
+            and sku.goods_id = #{goodsId}
+        </if>
+        group by gur.operator
+        order by num desc
+    </select>
 </mapper>

+ 53 - 5
netflix-web/src/main/java/com/cyksj/web/controller/manage/group/CmsGroupRelationController.java

@@ -23,10 +23,8 @@ import com.cyksj.model.excel.ExcelRechargeAccountData;
 import com.cyksj.model.manage.views.AccountView;
 import com.cyksj.model.manage.views.GroupsRelationBackView;
 import com.cyksj.model.request.*;
-import com.cyksj.model.views.DisableAccountView;
-import com.cyksj.model.views.GroupsRelationIndependentView;
-import com.cyksj.model.views.GroupsRelationRechargeView;
-import com.cyksj.model.views.OrderDonRenewView;
+import com.cyksj.model.response.GptRechargeStatisticsRecordResp;
+import com.cyksj.model.views.*;
 import com.cyksj.server.recharge.dto.TaskResult;
 import com.cyksj.server.recharge.dto.TokenParseResult;
 import com.cyksj.service.chatgpt.GptUserRechargeRecordService;
@@ -89,6 +87,8 @@ public class CmsGroupRelationController {
 
     private final GptRechargeService gptRechargeService;
 
+    private final GptRechargeOperatorChangeRecordMapper gptRechargeOperatorChangeRecordMapper;
+
     @GetMapping("/get")
     public Result<List<GroupsRelationBackView>> get(){
         List<GroupsRelationBackView> search = beanSearcher.searchAll(GroupsRelationBackView.class, MapUtils.flatBuilder(request.getParameterMap())
@@ -222,7 +222,7 @@ public class CmsGroupRelationController {
         //卡密
         String cardKey = rechargeView.getCardKey();
         if (StrUtil.isNotBlank(cardKey)) {
-            relation.setPassword(cardKey);
+            relation.setCardKey(cardKey);
         }
         String contact = rechargeView.getContact();
         if (StrUtil.isNotBlank(contact)) {
@@ -364,6 +364,54 @@ public class CmsGroupRelationController {
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
+    /**
+     * 编辑代充操作人员
+     */
+    @PutMapping("/update/recharge/operator")
+    public Result<String> updateRechargeOperator(@RequestBody GroupsRelation relation) {
+        Long adminId = StpUtil.getLoginIdAsLong();
+        Long relationId = relation.getId();
+        String af_operator = relation.getOperator();
+
+        GroupsRelation dbRelation = groupsRelationMapper.selectById(relationId);
+        String bfOperator = dbRelation.getOperator();
+        if (StrUtil.equals(bfOperator, af_operator)) {
+            return GatewayResponse.SUCCESS.newBuilder().toResult();
+        }
+        dbRelation.setOperator(af_operator);
+        groupsRelationMapper.updateById(dbRelation);
+
+        GptRechargeOperatorChangeRecord changeRecord = new GptRechargeOperatorChangeRecord();
+        changeRecord.setBf(bfOperator);
+        changeRecord.setAf(af_operator);
+        changeRecord.setRelationId(relationId);
+        changeRecord.setUserId(dbRelation.getUserId());
+        changeRecord.setOperator(cmsUserMapper.selectById(adminId).getNickname());
+        gptRechargeOperatorChangeRecordMapper.insert(changeRecord);
+
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 统计 代充操作数据
+     */
+    @GetMapping("/get/recharge/operate/statistics/data")
+    public Result<List<GptRechargeStatisticsRecordResp>> getRechargeStatisticsData(Long goodsId, String start, String end) {
+        if (StrUtil.isEmpty(start)) {
+            start = DateUtil.beginOfMonth(DateTime.now()).toString();
+            end = DateUtil.endOfMonth(DateTime.now()).toString();
+        }
+        List<CmsUserVO> customers = beanSearcher.searchAll(CmsUserVO.class, MapUtils.builder()
+                .field(CmsUserVO::getRoleNames, List.of("客服", "root")).op(Operator.InList)
+                .field(CmsUserVO::getStatus, Boolean.TRUE)
+                .build());
+        List<String> showUsers = customers.stream().map(CmsUserVO::getNickname).collect(Collectors.toList());
+        List<GptRechargeStatisticsRecordResp> recordResps = groupsRelationMapper.selectRechargeRecordNum(goodsId, start, end);
+        //过滤
+        recordResps = recordResps.stream().filter(rsp -> showUsers.contains(rsp.getOperator())).collect(Collectors.toList());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(recordResps);
+    }
+
     /**
      * 编辑代充备注
      */