baiyun 1 год назад
Родитель
Сommit
2dee84c0ca

+ 9 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/mapper/XfCreditAccountMapper.java

@@ -1,9 +1,17 @@
 package org.dromara.backstage.consumption.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 import org.dromara.backstage.consumption.domain.XfCreditAccount;
 import org.dromara.backstage.consumption.domain.vo.XfCreditAccountVo;
+import org.dromara.backstage.payment.domain.PtUserAccount;
+import org.dromara.backstage.payment.domain.PtUserAccount4SelectVo;
+import org.dromara.backstage.payment.domain.bo.PtUserAccountBo;
+import org.dromara.backstage.wx.domain.vo.WxCreditAccountVo;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 
+import java.util.Date;
+
 /**
  * 资金收支明细Mapper接口
  *
@@ -11,5 +19,5 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
  * @date 2024-08-15
  */
 public interface XfCreditAccountMapper extends BaseMapperPlus<XfCreditAccount, XfCreditAccountVo> {
-
+    Page<WxCreditAccountVo> selectCreditAccountPage(Page page, Long userId, String startTime, String endTime);
 }

+ 57 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/wx/contorller/WxController.java

@@ -0,0 +1,57 @@
+package org.dromara.backstage.wx.contorller;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
+import org.dromara.backstage.wx.domain.vo.WxCreditAccountVo;
+import org.dromara.backstage.wx.service.IWxService;
+import org.dromara.common.core.api.ResponseResult;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+
+/**
+ * 微信
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@ResponseResult
+@RequestMapping("/wx")
+public class WxController extends BaseController {
+
+    private final IWxService wxService;
+
+    /**
+     * 查询用户账户信息
+     * @param userId
+     * @return
+     */
+    @GetMapping("/getUserInfo/{userId}")
+    public R<PtUserAccountVo> getUserInfo(@NotNull(message = "用户ID不能为空")
+                               @PathVariable Long userId) {
+        return R.ok(wxService.getUserInfoByUserId(userId));
+    }
+
+    /**
+     * 查询账单明细
+     * @param userId
+     * @return
+     */
+    @GetMapping("/findCreditAccount/{userId}")
+    public TableDataInfo<WxCreditAccountVo> findCreditAccount(@NotNull(message = "用户ID不能为空")
+                                          @PathVariable Long userId, String startTime, String endTime,
+                                                              PageQuery pageQuery) {
+        return wxService.findCreditAccount(userId, startTime, endTime, pageQuery);
+    }
+
+    @PutMapping("/updateCardStatus/{userId}")
+    public R<Void> lockPtCard(@PathVariable Long userId, String cardStatus) {
+        return toAjax(wxService.updateCardStatus(userId, cardStatus));
+    }
+}

+ 26 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/wx/domain/vo/WxCreditAccountVo.java

@@ -0,0 +1,26 @@
+package org.dromara.backstage.wx.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 微信账单VO
+ * @author Hz
+ * @date 2025/1/14
+ * @description TODO
+ */
+
+@Data
+public class WxCreditAccountVo {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long userNumb;
+    private String realName;
+    private BigDecimal receiptMoney;
+    private String creditType;
+    private Date creditTime;
+}

+ 21 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/wx/service/IWxService.java

@@ -0,0 +1,21 @@
+package org.dromara.backstage.wx.service;
+
+import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
+import org.dromara.backstage.wx.domain.vo.WxCreditAccountVo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+import java.util.Date;
+
+/**
+ * 微信Service接口
+ *
+ */
+public interface IWxService {
+
+    PtUserAccountVo getUserInfoByUserId(Long userId);
+
+    TableDataInfo<WxCreditAccountVo> findCreditAccount(Long userId, String startTime, String endTime, PageQuery pageQuery);
+
+    boolean updateCardStatus(Long userId, String cardStatus);
+}

+ 60 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/wx/service/impl/WxServiceImpl.java

@@ -0,0 +1,60 @@
+package org.dromara.backstage.wx.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import lombok.RequiredArgsConstructor;
+import org.dromara.backstage.cardCenter.domain.PtCard;
+import org.dromara.backstage.cardCenter.mapper.PtCardMapper;
+import org.dromara.backstage.consumption.mapper.XfCreditAccountMapper;
+import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
+import org.dromara.backstage.payment.mapper.PtUserAccountMapper;
+import org.dromara.backstage.wx.domain.vo.WxCreditAccountVo;
+import org.dromara.backstage.wx.service.IWxService;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.system.api.RemoteDictService;
+import org.dromara.system.api.domain.vo.RemoteDictDataVo;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 微信Service业务层处理
+ *
+ */
+@RequiredArgsConstructor
+@Service
+public class WxServiceImpl implements IWxService {
+
+    private final PtUserAccountMapper accountMapper;
+    private final XfCreditAccountMapper creditAccountMapper;
+    private final PtCardMapper cardMapper;
+    private final RemoteDictService dictService;
+
+    @Override
+    public PtUserAccountVo getUserInfoByUserId(Long userId) {
+        Map<String, String> dictMap = dictService.selectDictDataByType("account_open_status")
+            .stream()
+            .collect(
+                Collectors.toMap(RemoteDictDataVo::getDictValue, RemoteDictDataVo::getDictLabel));
+        PtUserAccountVo vo = accountMapper.selectVoById(userId);
+        vo.setAccountStatus(dictMap.getOrDefault(vo.getAccountStatus(), ""));
+        return vo;
+    }
+
+    @Override
+    public TableDataInfo<WxCreditAccountVo> findCreditAccount(Long userId, String startTime, String endTime, PageQuery pageQuery) {
+
+        return TableDataInfo.build(creditAccountMapper.selectCreditAccountPage(pageQuery.build(), userId, startTime,endTime));
+    }
+
+    @Override
+    public boolean updateCardStatus(Long userId, String cardStatus) {
+        int count = cardMapper.update(new LambdaUpdateWrapper<PtCard>()
+            .set(PtCard::getStatus, cardStatus)
+            .set(PtCard::getChangeTime, DateUtil.date())
+            .eq(PtCard::getUserId, userId));
+        return count > 0;
+    }
+}

+ 41 - 0
ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/consumption/XfCreditAccountMapper.xml

@@ -46,4 +46,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <result property="updateBy"    column="update_by"    />
             <result property="updateTime"    column="update_time"    />
     </resultMap>
+
+    <select id="selectCreditAccountPage" resultType="org.dromara.backstage.wx.domain.vo.WxCreditAccountVo">
+        SELECT
+            *
+        FROM
+            (
+                (
+                    SELECT
+                        a.user_numb AS userNumb,
+                        a.real_name AS realName,
+                        a.receipt_money AS receiptMoney,
+                        dict.dict_label AS creditType,
+                        a.credit_time AS creditTime
+                    FROM
+                        t_xf_creditaccount a
+                            LEFT JOIN ( SELECT dict_value, dict_label FROM t_sys_dictdata WHERE dict_type =
+        'CREDITTYPE' AND del_flag = '0' ) dict ON a.credit_type = dict.dict_value
+                    WHERE
+                        a.user_id = #{userId} AND del_flag = '0'
+                ) UNION ALL
+                (
+                    SELECT
+                        b.user_numb AS userNumb,
+                        b.real_name AS realName,
+                        b.consume_money AS receiptMoney,
+                        '在线消费' AS creditType,
+                        b.consume_date AS creditTime
+                    FROM
+                        t_xf_consumedetail b
+                    WHERE
+                        b.user_id = #{userId} AND del_flag = '0'
+                )
+            ) temp
+        <where>
+            <if test="startTime != null and endTime != null">
+                AND creditTime BETWEEN #{startTime} AND #{endTime}
+            </if>
+        </where>
+        ORDER BY
+            creditTime DESC
+    </select>
 </mapper>