Newspaper 1 ano atrás
pai
commit
c5e9751595

+ 12 - 0
src/main/java/com/huimv/wine/entity/vo/TradeQueryForAdminResult.java

@@ -0,0 +1,12 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class TradeQueryForAdminResult {
+    private String id,device,wine,reason;
+    private LocalDateTime time;
+    private Integer price,weight,cash,refund;
+}

+ 3 - 0
src/main/java/com/huimv/wine/mapper/TradeMapper.java

@@ -2,11 +2,13 @@ package com.huimv.wine.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.wine.entity.Trade;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huimv.wine.entity.vo.QueryAdminVo;
 import com.huimv.wine.entity.vo.RankAdminsVo;
 import com.huimv.wine.entity.vo.RankDevicesVo;
+import com.huimv.wine.entity.vo.TradeQueryForAdminResult;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -35,4 +37,5 @@ public interface TradeMapper extends BaseMapper<Trade> {
 
     List<QueryAdminVo> queryAdmins4(String id, Integer days,String type);
 
+    Page<TradeQueryForAdminResult> tradeQueryForAdmin(Page<TradeQueryForAdminResult> page, String managerId, String like, String uid);
 }

+ 56 - 8
src/main/java/com/huimv/wine/ws/admin/AdminTrade.java

@@ -1,12 +1,14 @@
 package com.huimv.wine.ws.admin;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.wine.common.EventWsErrUtil;
-import com.huimv.wine.entity.Manager;
-import com.huimv.wine.entity.User;
-import com.huimv.wine.entity.vo.AdminTradeQueryUserParam;
-import com.huimv.wine.entity.vo.WsEvent;
+import com.huimv.wine.entity.*;
+import com.huimv.wine.entity.vo.*;
+import com.huimv.wine.mapper.OperationMapper;
+import com.huimv.wine.mapper.RefundMapper;
+import com.huimv.wine.mapper.TradeMapper;
 import com.huimv.wine.mapper.UserMapper;
 import com.huimv.wine.utils.Result;
 import com.huimv.wine.utils.SpringContextUtil;
@@ -21,15 +23,18 @@ public class AdminTrade {
         String event = message.getString("event");
         JSONObject data = message.getJSONObject("data");
         UserMapper userMapper = SpringContextUtil.getBean(UserMapper.class);
+        TradeMapper tradeMapper = SpringContextUtil.getBean(TradeMapper.class);
+        RefundMapper refundMapper = SpringContextUtil.getBean(RefundMapper.class);
+        OperationMapper operationMapper = SpringContextUtil.getBean(OperationMapper.class);
         switch (event) {
             case "adminTradeQueryUser":
                 queryUser(session, manager, data, userMapper);
                 break;
             case "adminTradeQueryTrade":
-                queryTrade(session, data);
+                queryTrade(session, manager, data,tradeMapper);
                 break;
             case "adminTradeRefund":
-                refund(session, manager, data);
+                refund(session, manager, data, tradeMapper, refundMapper, userMapper, operationMapper);
                 break;
             default:
                 WsEvent wsEvent = EventWsErrUtil.getWsErr("unrecognized event");
@@ -48,10 +53,53 @@ public class AdminTrade {
         WebsocketManagerUtil.sendMessage(session,wsEvent);
     }
 
-    private void queryTrade(Session session, JSONObject data) {
+    private void queryTrade(Session session, Manager manager, JSONObject data, TradeMapper tradeMapper) {
+        AdminTradeQueryTradeParam queryTradeParam = JSONObject.toJavaObject(data, AdminTradeQueryTradeParam.class);
+        Page<TradeQueryForAdminResult> page = new Page<>(queryTradeParam.getPage(),queryTradeParam.getLimit());
+        String like = "%" + queryTradeParam.getCond() + "%";
+        Page<TradeQueryForAdminResult> resultPage = tradeMapper.tradeQueryForAdmin(page,manager.getId(),like,queryTradeParam.getUid());
 
+        WsEvent wsEvent = new WsEvent("adminTradeQueryTradeRes", Result.success(resultPage));
+        WebsocketManagerUtil.sendMessage(session,wsEvent);
     }
 
-    private void refund(Session session, Manager manager, JSONObject data) {
+    private void refund(Session session, Manager manager, JSONObject data, TradeMapper tradeMapper, RefundMapper refundMapper, UserMapper userMapper, OperationMapper operationMapper) {
+        AdminTradeRefundParam refundParam = JSONObject.toJavaObject(data, AdminTradeRefundParam.class);
+        Trade trade = tradeMapper.selectById(refundParam.getTid());
+        if (ObjectUtil.isEmpty(trade)){
+            WsEvent wsEvent = new WsEvent("adminTradeRefundRes", Result.fail("订单查询失败"));
+            WebsocketManagerUtil.sendMessage(session,wsEvent);
+            return;
+        }
+        if (trade.getCash() < refundParam.getCash()){
+            WsEvent wsEvent = new WsEvent("adminTradeRefundRes", Result.fail("超出原订单金额"));
+            WebsocketManagerUtil.sendMessage(session,wsEvent);
+            return;
+        }
+        Refund refund = new Refund();
+        refund.setTid(refundParam.getTid());
+        refund.setManager(manager.getId());
+        refund.setCash(refundParam.getCash());
+        refund.setReason(refundParam.getReason());
+
+        if (refundMapper.insert(refund) != 1) {
+            refund = refundMapper.selectById(refundParam.getTid());
+            refund.setManager(manager.getId());
+            refund.setCash(refundParam.getCash());
+            refund.setReason(refundParam.getReason());
+            refundMapper.updateById(refund);
+        }
+        WsEvent wsEvent = new WsEvent("adminTradeRefundRes", Result.success(null));
+        WebsocketManagerUtil.sendMessage(session,wsEvent);
+
+        User user = userMapper.selectById(trade.getPayer());
+        user.setRefundCount(user.getRefundCount() + 1);
+        user.setBuyCost(user.getBuyCost() - refundParam.getCash());
+        user.setRefundCost(user.getRefundCost() + refundParam.getCash());
+        userMapper.updateById(user);
+
+        Operation operation = new Operation(0,manager.getId(),5,2,String.format("订单号:%s,用户:%s,退款金额:%d",refundParam.getTid(),trade.getPayer(),refundParam.getCash()));
+        operationMapper.insert(operation);
+
     }
 }

+ 5 - 0
src/main/resources/com/huimv/wine/mapper/TradeMapper.xml

@@ -54,4 +54,9 @@
          WHERE `wine`=#{id} AND (`time` BETWEEN DATE_SUB(CURRENT_TIMESTAMP,INTERVAL #{days} DAY) AND CURRENT_TIMESTAMP)
          GROUP BY 'time'
     </select>
+    <select id="tradeQueryForAdmin" resultType="com.huimv.wine.entity.vo.TradeQueryForAdminResult">
+        SELECT t.`id`,t.`device`,t.`time`,w.`name` as 'wine',t.`price`,t.`weight`,t.`cash`,r.`cash` as 'refund',r.`reason`
+        FROM `trade` AS t LEFT JOIN `wine` AS w ON t.`wine`=w.`id` LEFT JOIN `refund` AS r ON t.`id`=r.`tid`
+        WHERE t.`manager`= #{managerId} AND t.`payer`= #{uid} AND (t.`id` LIKE #{like} OR w.`name` LIKE #{like}) ORDER BY t.`time` DESC
+    </select>
 </mapper>