From deb91eb570baecdae92aeeb105661209f59e06e2 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 01 四月 2025 14:23:46 +0800
Subject: [PATCH] Merge branch '2.0' of http://120.76.84.145:10101/gitblit/r/java/PlayPai into 2.0
---
cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminAgreementController.java | 3
cloud-server-activity/src/main/java/com/dsh/activity/model/response/SalesDetailVO.java | 37 +
cloud-server-activity/src/main/resources/mapper/PayHuiminMapper.xml | 175 +++++++++
cloud-server-activity/src/main/java/com/dsh/activity/entity/HuiminPayQuery.java | 39 ++
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/OperatorClient.java | 5
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/HuiminPayQuery.java | 40 ++
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TPayHuiminController.java | 217 ++++++++--
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java | 10
cloud-server-management/src/main/webapp/static/modular/system/tPayHuimin/tPayHuimin.js | 123 +++++
cloud-server-activity/src/main/java/com/dsh/activity/mapper/PayHuiminMapper.java | 26 +
cloud-server-activity/src/main/java/com/dsh/activity/controller/PayHuiminController.java | 73 +++
cloud-server-activity/src/main/java/com/dsh/activity/service/PayHuiminService.java | 34 +
cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java | 51 ++
cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminAgreementSetting.java | 2
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/StudentClient.java | 2
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PayHuiminClient.java | 36 +
cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminAgreement/tHuiminAgreement.html | 1
cloud-server-management/src/main/webapp/WEB-INF/view/system/tPayHuimin/tPayHuimin.html | 100 ++++
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PayHuiminServiceImpl.java | 108 +++++
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SalesDetailVO.java | 37 +
cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java | 6
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java | 5
22 files changed, 1,028 insertions(+), 102 deletions(-)
diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
index c4a454e..ab51ce9 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
@@ -1,17 +1,33 @@
package com.dsh.account.controller;
-import com.alibaba.nacos.common.utils.Md5Utils;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.account.dto.BindDto;
import com.dsh.account.dto.IntroduceUserQuery;
import com.dsh.account.dto.SelectDto;
import com.dsh.account.dto.UpdateInfoDto;
-import com.dsh.account.entity.*;
-import com.dsh.account.model.*;
+import com.dsh.account.entity.IntroduceUser;
+import com.dsh.account.entity.TAppGift;
+import com.dsh.account.entity.TAppUser;
+import com.dsh.account.entity.TCourseInfoRecord;
+import com.dsh.account.entity.TStudent;
+import com.dsh.account.entity.UserIntegralChanges;
+import com.dsh.account.model.AddAppUserVo;
+import com.dsh.account.model.AdvertisementChangeStateDTO;
+import com.dsh.account.model.AppUserByNameAndPhoneDTO;
+import com.dsh.account.model.AppUserIdsByCityName;
+import com.dsh.account.model.JoinPlayPaiVo;
+import com.dsh.account.model.LoginSMSCodeVo;
+import com.dsh.account.model.LoginWeChatVo;
+import com.dsh.account.model.QueryByNamePhone;
import com.dsh.account.model.query.appUserQuery.QueryAppUser;
import com.dsh.account.model.vo.QueryAppUserVO;
-import com.dsh.account.service.*;
+import com.dsh.account.service.IVipPaymentService;
+import com.dsh.account.service.TAppGiftService;
+import com.dsh.account.service.TAppUserService;
+import com.dsh.account.service.TCourseInfoRecordService;
+import com.dsh.account.service.TStudentService;
+import com.dsh.account.service.UserIntegralChangesService;
import com.dsh.account.util.PayMoneyUtil;
import com.dsh.account.util.ResultUtil;
import com.dsh.account.util.TokenUtil;
@@ -19,15 +35,22 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
-import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+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.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -503,7 +526,17 @@
return null;
}
}
-
+ /**
+ * 根据用户id获取用户信息
+ *
+ * @param appUserIdList
+ * @return
+ */
+ @ResponseBody
+ @PostMapping("/base/appUser/queryAppUserBatch")
+ List<TAppUser> queryAppUserBatch(@RequestBody List<Integer> appUserIdList){
+ return appUserService.listByIds(appUserIdList);
+ }
@Autowired
private UserIntegralChangesService userIntegralChangesService;
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminAgreementController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminAgreementController.java
index 0e58ec6..f835ca2 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminAgreementController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/HuiminAgreementController.java
@@ -34,8 +34,7 @@
/**
* 根据当前用户类型查询惠民卡协议
- * @param objectType
- * @param operatorId
+ * @param query
* @return
*/
@ResponseBody
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PayHuiminController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PayHuiminController.java
new file mode 100644
index 0000000..80722a6
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PayHuiminController.java
@@ -0,0 +1,73 @@
+package com.dsh.activity.controller;
+
+import com.alipay.api.AlipayApiException;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.activity.entity.HuiminPayQuery;
+import com.dsh.activity.model.response.SalesDetailVO;
+import com.dsh.activity.service.PayHuiminService;
+import com.dsh.activity.util.ResultUtil;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+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 javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 惠民卡支付记录
+ * @author mitao
+ * @date 2025/3/31
+ */
+@RestController
+@RequestMapping("")
+public class PayHuiminController {
+ @Resource
+ private PayHuiminService payHuiminService;
+
+ /**
+ * 售卖明细分页列表
+ * @param query
+ * @return
+ */
+ @PostMapping("/base/huimin-record/list")
+ public Page<SalesDetailVO> selectPage(@RequestBody HuiminPayQuery query){
+ return payHuiminService.selectPage(query);
+ }
+
+ /**
+ * 统计数据
+ * @param query
+ * @return
+ */
+ @PostMapping("/base/getStaticsData")
+ public Map<String, BigDecimal> getStaticsData(@RequestBody HuiminPayQuery query){
+ return payHuiminService.getStaticsData(query);
+ }
+ /**
+ * 退款惠民卡
+ * @param id
+ */
+ @GetMapping("/base/tPayHuimin/refund/{id}")
+ public ResultUtil<?> refund(@PathVariable("id") Integer id){
+ try {
+ return payHuiminService.refund(id);
+ } catch (AlipayApiException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * 导出数据
+ * @param query
+ * @return
+ */
+ @PostMapping("/base/tPayHuimin/export-data")
+ public List<SalesDetailVO> exportData(@RequestBody HuiminPayQuery query){
+ return payHuiminService.exportData(query);
+ }
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/HuiminPayQuery.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/HuiminPayQuery.java
new file mode 100644
index 0000000..3cae174
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/HuiminPayQuery.java
@@ -0,0 +1,39 @@
+package com.dsh.activity.entity;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class HuiminPayQuery {
+ // 基础查询条件
+ private String huiMinName; // 惠民名称
+ private String huiMinType; // 惠民类型
+ private Long operatorId; // 运营商ID
+ private Long useId; // 使用记录ID
+
+ // 用户信息
+ private String userName; // 用户名
+ private String phone; // 联系方式
+
+ // 时间范围
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date paymentTimeStart; // 支付时间-开始
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date paymentTimeEnd; // 支付时间-结束
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTimeStart; // 结束时间-开始
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTimeEnd; // 结束时间-结束
+
+ // 状态查询
+ private Integer status; // 使用状态
+ //购买用户
+ private List<Integer> appUserIds;
+
+ private long current;
+ private long size;
+
+}
\ No newline at end of file
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminAgreementSetting.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminAgreementSetting.java
index 4f14fb0..4800e9c 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminAgreementSetting.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminAgreementSetting.java
@@ -33,8 +33,6 @@
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
- @TableField("agreementId")
- private Integer agreementId;
/**
* 协议名称
*/
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java
index 2111991..10896e4 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java
@@ -164,6 +164,12 @@
@TableField("storeId")
private Integer storeId;
/**
+ *运营商id
+ */
+ @ApiModelProperty(value = "运营商id")
+ @TableField("operatorId")
+ private Integer operatorId;
+ /**
*状态 1已上架 2已下架 3已删除
*/
@ApiModelProperty(value = "状态 1已上架 2已下架 3已删除 ")
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java
index ca3c03b..62880dd 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/AppUserClient.java
@@ -6,7 +6,6 @@
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@@ -32,4 +31,13 @@
*/
@PostMapping("/base/appUser/queryAppUserList")
public List<TAppUser> queryAppUserList(@RequestBody AppUserByNameAndPhoneDTO dto);
+
+ /**
+ * 根据用户id获取用户信息
+ *
+ * @param appUserIdList
+ * @return
+ */
+ @PostMapping("/base/appUser/queryAppUserBatch")
+ List<AppUser> queryAppUserBatch(@RequestBody List<Integer> appUserIdList);
}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/StudentClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/StudentClient.java
index 4d85c71..58ac733 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/StudentClient.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/StudentClient.java
@@ -1,12 +1,10 @@
package com.dsh.activity.feignclient.account;
import com.dsh.activity.entity.TStudent;
-import com.dsh.activity.feignclient.account.model.Student;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/OperatorClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/OperatorClient.java
index c7b98bc..01544a0 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/OperatorClient.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/OperatorClient.java
@@ -1,10 +1,9 @@
package com.dsh.activity.feignclient.other;
-import com.dsh.activity.feignclient.other.model.Store;
-import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse;
import com.dsh.activity.feignclient.other.model.TOperatorCity;
import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PayHuiminMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PayHuiminMapper.java
index c2c01b5..c693d9a 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PayHuiminMapper.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PayHuiminMapper.java
@@ -1,17 +1,39 @@
package com.dsh.activity.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.dsh.activity.entity.THuiminCard;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.activity.entity.HuiminPayQuery;
import com.dsh.activity.entity.TPayHuimin;
-import com.dsh.activity.model.response.HuiminCardVO;
+import com.dsh.activity.model.response.SalesDetailVO;
import org.apache.ibatis.annotations.Param;
+import java.math.BigDecimal;
import java.util.List;
+import java.util.Map;
/**
* @author zhibing.pu
* @date 2023/7/11 17:30
*/
public interface PayHuiminMapper extends BaseMapper<TPayHuimin> {
+ /**
+ * 售卖明细分页列表
+ * @param query
+ * @return
+ */
+ Page<SalesDetailVO> selectSalesDetailPage(Page<SalesDetailVO> page,@Param("query") HuiminPayQuery query);
+ /**
+ * 获取售卖明细统计数据
+ * @param query
+ * @return
+ */
+ Map<String, BigDecimal> getStaticsData(@Param("query") HuiminPayQuery query);
+
+ /**
+ * 导出数据
+ * @param query
+ * @return
+ */
+ List<SalesDetailVO> exportData(@Param("query") HuiminPayQuery query);
}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/response/SalesDetailVO.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/response/SalesDetailVO.java
new file mode 100644
index 0000000..d218cdc
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/response/SalesDetailVO.java
@@ -0,0 +1,37 @@
+package com.dsh.activity.model.response;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class SalesDetailVO {
+ // 基础信息
+ private Long id; // 主键ID[8]
+ private String huiMinName; // 惠民卡名称
+ private Integer huiMinType; // 惠民卡类型(1:年度卡,2:年内卡)
+ private BigDecimal salesMoney; // 售卖金额(精确计算)
+
+ // 关联信息
+ private Integer operatorId;
+ private String operatorName; // 所属运营商
+ private Integer storeId;
+ private String storeName; // 可用门店
+ private Integer appUserId; // 购买用户ID
+ private String userName; // 购买用户
+ private String phone; // 联系电话
+
+ // 时间信息
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date paymentTime; // 购买时间[1,8](@ref)
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTime; // 有效期
+
+ // 使用信息
+ private String studentName; // 绑定人员
+ private String studentId; // 绑定人员ID
+ private Integer useTimes; // 已用次数
+ private Integer status; // 状态(1:使用中,2:已退款)
+}
\ No newline at end of file
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/PayHuiminService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/PayHuiminService.java
index 7e417fd..116f264 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/PayHuiminService.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/PayHuiminService.java
@@ -1,11 +1,16 @@
package com.dsh.activity.service;
+import com.alipay.api.AlipayApiException;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
-import com.dsh.activity.entity.THuiminCard;
+import com.dsh.activity.entity.HuiminPayQuery;
import com.dsh.activity.entity.TPayHuimin;
-import com.dsh.activity.model.response.HuiminCardVO;
+import com.dsh.activity.model.response.SalesDetailVO;
+import com.dsh.activity.util.ResultUtil;
+import java.math.BigDecimal;
import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -16,5 +21,30 @@
* @since 2023-07-06
*/
public interface PayHuiminService extends IService<TPayHuimin> {
+ /**
+ * 售卖明细分页列表
+ * @param query
+ * @return
+ */
+ Page<SalesDetailVO> selectPage(HuiminPayQuery query);
+ /**
+ * 获取统计数据
+ * @param query
+ * @return
+ */
+ Map<String, BigDecimal> getStaticsData(HuiminPayQuery query);
+
+ /**
+ * 退款惠民卡
+ * @param id
+ */
+ ResultUtil<?> refund(Integer id) throws AlipayApiException;
+
+ /**
+ * 获取导出数据
+ * @param query
+ * @return
+ */
+ List<SalesDetailVO> exportData(HuiminPayQuery query);
}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PayHuiminServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PayHuiminServiceImpl.java
index baa0086..481ac9f 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PayHuiminServiceImpl.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PayHuiminServiceImpl.java
@@ -1,13 +1,33 @@
package com.dsh.activity.service.impl;
+import cn.hutool.core.collection.CollUtil;
+import com.alipay.api.AlipayApiException;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dsh.activity.entity.THuiminAgreement;
+import com.dsh.activity.entity.HuiminPayQuery;
+import com.dsh.activity.entity.THuiminRecord;
import com.dsh.activity.entity.TPayHuimin;
-import com.dsh.activity.mapper.HuiminAgreementMapper;
+import com.dsh.activity.entity.TStudent;
+import com.dsh.activity.feignclient.account.AppUserClient;
+import com.dsh.activity.feignclient.account.StudentClient;
+import com.dsh.activity.feignclient.account.model.AppUser;
import com.dsh.activity.mapper.PayHuiminMapper;
-import com.dsh.activity.service.HuiminAgreementService;
+import com.dsh.activity.model.response.SalesDetailVO;
+import com.dsh.activity.service.HuiminRecordService;
import com.dsh.activity.service.PayHuiminService;
+import com.dsh.activity.util.DateUtil;
+import com.dsh.activity.util.PayMoneyUtil;
+import com.dsh.activity.util.ResultUtil;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
/**
* @author zhibing.pu
@@ -15,5 +35,87 @@
*/
@Service
public class PayHuiminServiceImpl extends ServiceImpl<PayHuiminMapper, TPayHuimin> implements PayHuiminService {
+ @Autowired
+ private AppUserClient appUserClient;
+ @Autowired
+ private StudentClient studentClient;
+ @Autowired
+ private HuiminRecordService huiminRecordService;
+ @Resource
+ private PayMoneyUtil payMoneyUtil;
+ @Override
+ public Page<SalesDetailVO> selectPage(HuiminPayQuery query) {
+ Page<SalesDetailVO> salesDetailVOPage = baseMapper.selectSalesDetailPage(new Page<>(query.getCurrent(), query.getSize()), query);
+ List<SalesDetailVO> records = salesDetailVOPage.getRecords();
+ if (CollUtil.isNotEmpty(records)){
+ List<Integer> appUserIdList = records.stream().map(SalesDetailVO::getAppUserId).collect(Collectors.toList());
+ List<AppUser> appUserList = appUserClient.queryAppUserBatch(appUserIdList);
+ Map<Integer, AppUser> appUserMap = appUserList.stream().collect(Collectors.toMap(AppUser::getId, appUser -> appUser));
+ records.forEach(item->{
+ AppUser appUser = appUserMap.get(item.getAppUserId());
+ if (Objects.nonNull(appUser)){
+ item.setUserName(appUser.getName());
+ item.setPhone(appUser.getPhone());
+ }
+ List<TStudent> studentList = studentClient.getStudentByIds(item.getStudentId());
+ if (CollUtil.isNotEmpty(studentList)){
+ item.setStudentName(studentList.stream().map(TStudent::getName).collect(Collectors.joining(",")));
+ }
+ });
+ }
+ return salesDetailVOPage;
+ }
+ @Override
+ public Map<String, BigDecimal> getStaticsData(HuiminPayQuery query) {
+ return baseMapper.getStaticsData(query);
+ }
+
+ @Override
+ public ResultUtil<?> refund(Integer id) throws AlipayApiException {
+ TPayHuimin payHuimin = this.getById(id);
+ if (Objects.nonNull(payHuimin)) {
+ Integer count = huiminRecordService.lambdaQuery().eq(THuiminRecord::getAppUserId, payHuimin.getAppUserId())
+ .eq(THuiminRecord::getHuiminCardId, payHuimin.getCardId())
+ .lt(THuiminRecord::getInsertTime, DateUtil.addDay(payHuimin.getPaymentTime(),7))
+ .count();
+ if (count > 0 || new Date().after(DateUtil.addDay(payHuimin.getPaymentTime(),7))) {
+ //超过七日或者七日内有使用记录的退款:更改状态,实际退款线下操作。
+ payHuimin.setRefundStatus(3);
+ } else {
+ if (payHuimin.getPaymentType() == 1) {
+ Map<String, String> map = payMoneyUtil.wxRefund(payHuimin.getOrderNumber(), payHuimin.getCode(),
+ payHuimin.getSalesMoney().toString(), payHuimin.getSalesMoney().toString(), "/base/worldCup/wxRefundWorldCupCallback");
+ if (!"SUCCESS".equals(map.get("return_code"))) {
+ System.err.println("-------------微信退款失败---------");
+ System.err.println(map.get("return_msg"));
+ return ResultUtil.error("微信退款失败");
+ }
+ } else {
+ Map<String, String> map = payMoneyUtil.aliRefund(payHuimin.getOrderNumber(), payHuimin.getSalesMoney().toString());
+ String return_code = map.get("code");
+ if (!"10000".equals(return_code)) {
+ return ResultUtil.error(map.get("msg"));
+ }
+ String refund_id = map.get("trade_no");
+ payHuimin.setRefundNumber(refund_id);
+ }
+ payHuimin.setRefundStatus(2);
+ }
+ payHuimin.setStatus(3);
+ payHuimin.setRefundTime(new Date());
+ this.updateById(payHuimin);
+ }
+ return ResultUtil.success();
+ }
+
+ /**
+ * 导出数据
+ * @param query
+ * @return
+ */
+ @Override
+ public List<SalesDetailVO> exportData(HuiminPayQuery query) {
+ return baseMapper.exportData(query);
+ }
}
diff --git a/cloud-server-activity/src/main/resources/mapper/PayHuiminMapper.xml b/cloud-server-activity/src/main/resources/mapper/PayHuiminMapper.xml
index 39d32f1..41def9f 100644
--- a/cloud-server-activity/src/main/resources/mapper/PayHuiminMapper.xml
+++ b/cloud-server-activity/src/main/resources/mapper/PayHuiminMapper.xml
@@ -3,5 +3,180 @@
<mapper namespace="com.dsh.activity.mapper.PayHuiminMapper">
+ <select id="selectSalesDetailPage" resultType="com.dsh.activity.model.response.SalesDetailVO">
+ SELECT
+ tph.id,
+ thc.huiMinName,
+ thc.huiMinType,
+ thc.salesMoney,
+ thc.operatorId,
+ thc.storeId,
+ tph.appUserId,
+ tph.paymentTime,
+ thc.endTime,
+ tph.studentId,
+ tph.status,
+ CASE
+ WHEN tph.id IS NULL THEN NULL
+ ELSE COALESCE(COUNT(thr.id), 0)
+ END AS useTimes
+ FROM
+ t_pay_huimin tph
+ LEFT JOIN t_huimin_card thc ON tph.cardId = thc.id
+ LEFT JOIN t_huimin_record thr ON tph.appUserId= thr.appUserId AND tph.cardId= thr.huiminCardId
+ <where>
+ tph.id IS NOT NULL
+ <if test="query.huiMinName !=null and query.huiMinName != ''">
+ AND thc.huiMinName LIKE CONCAT('%',#{query.huiMinName},'%')
+ </if>
+ <if test="query.huiMinType !=null and query.huiMinType != ''">
+ AND thc.huiMinType = #{query.huiMinType}
+ </if>
+ <if test="query.operatorId !=null and query.operatorId != ''">
+ AND thc.huiMinType = #{query.huiMinType}
+ </if>
+ <if test="query.useId !=null and query.useId != ''">
+ AND FIND_IN_SET(#{query.useId},thc.useIds)
+ </if>
+ <if test="query.useId !=null and query.useId != ''">
+ AND FIND_IN_SET(#{query.useId},thc.useIds)
+ </if>
+ <if test="query.appUserIds != null and query.appUserIds.size()>0">
+ AND tph.appUserId IN
+ <foreach collection="query.appUserIds" item="appUserId" open="(" separator="," close=")">
+ #{appUserId}
+ </foreach>
+ </if>
+ <if test="query.paymentTimeStart != null and query.paymentTimeEnd!=null">
+ AND tph.paymentTime BETWEEN #{query.paymentTimeStart} AND #{query.paymentTimeEnd}
+ </if>
+ <if test="query.endTimeStart != null and query.endTimeEnd!=null">
+ AND tph.endTime BETWEEN #{query.endTimeStart} AND #{query.endTimeEnd}
+ </if>
+ <if test="query.status!=null and query.status !=''">
+ <choose>
+ <when test="query.status == 1">
+ AND tph.status = 2
+ </when>
+ <when test="query.status == 2">
+ AND tph.status = 3
+ </when>
+ </choose>
+ </if>
+ </where>
+ ORDER BY tph.insertTime DESC
+ </select>
+ <select id="getStaticsData" resultType="java.util.Map"
+ parameterType="com.dsh.activity.entity.HuiminPayQuery">
+ SELECT
+ COALESCE(SUM( tph.salesMoney),0) AS totalAmount,
+ COALESCE(SUM(CASE WHEN refundStatus IN (2, 3) THEN tph.salesMoney ELSE 0 END),0) AS refundAmount
+ FROM t_pay_huimin tph
+ LEFT JOIN t_huimin_card thc ON tph.cardId = thc.id
+ <where>
+ tph.id IS NOT NULL
+ <if test="query.huiMinName !=null and query.huiMinName != ''">
+ AND thc.huiMinName LIKE CONCAT('%',#{query.huiMinName},'%')
+ </if>
+ <if test="query.huiMinType !=null and query.huiMinType != ''">
+ AND thc.huiMinType = #{query.huiMinType}
+ </if>
+ <if test="query.operatorId !=null and query.operatorId != ''">
+ AND thc.huiMinType = #{query.huiMinType}
+ </if>
+ <if test="query.useId !=null and query.useId != ''">
+ AND FIND_IN_SET(#{query.useId},thc.useIds)
+ </if>
+ <if test="query.useId !=null and query.useId != ''">
+ AND FIND_IN_SET(#{query.useId},thc.useIds)
+ </if>
+ <if test="query.appUserIds != null and query.appUserIds.size()>0">
+ AND tph.appUserId IN
+ <foreach collection="query.appUserIds" item="appUserId" open="(" separator="," close=")">
+ #{appUserId}
+ </foreach>
+ </if>
+ <if test="query.paymentTimeStart != null and query.paymentTimeEnd!=null">
+ AND tph.paymentTime BETWEEN #{query.paymentTimeStart} AND #{query.paymentTimeEnd}
+ </if>
+ <if test="query.endTimeStart != null and query.endTimeEnd!=null">
+ AND tph.endTime BETWEEN #{query.endTimeStart} AND #{query.endTimeEnd}
+ </if>
+ <if test="query.status!=null and query.status !=''">
+ <choose>
+ <when test="query.status == 1">
+ AND tph.status = 2
+ </when>
+ <when test="query.status == 2">
+ AND tph.status = 3
+ </when>
+ </choose>
+ </if>
+ </where>
+ </select>
+ <select id="exportData" resultType="com.dsh.activity.model.response.SalesDetailVO"
+ parameterType="com.dsh.activity.entity.HuiminPayQuery">
+ SELECT
+ tph.id,
+ thc.huiMinName,
+ thc.huiMinType,
+ thc.salesMoney,
+ thc.operatorId,
+ thc.storeId,
+ tph.appUserId,
+ tph.paymentTime,
+ thc.endTime,
+ tph.studentId,
+ tph.status,
+ CASE
+ WHEN tph.id IS NULL THEN NULL
+ ELSE COALESCE(COUNT(thr.id), 0)
+ END AS useTimes
+ FROM
+ t_pay_huimin tph
+ LEFT JOIN t_huimin_card thc ON tph.cardId = thc.id
+ LEFT JOIN t_huimin_record thr ON tph.appUserId= thr.appUserId AND tph.cardId= thr.huiminCardId
+ <where>
+ tph.id IS NOT NULL
+ <if test="query.huiMinName !=null and query.huiMinName != ''">
+ AND thc.huiMinName LIKE CONCAT('%',#{query.huiMinName},'%')
+ </if>
+ <if test="query.huiMinType !=null and query.huiMinType != ''">
+ AND thc.huiMinType = #{query.huiMinType}
+ </if>
+ <if test="query.operatorId !=null and query.operatorId != ''">
+ AND thc.huiMinType = #{query.huiMinType}
+ </if>
+ <if test="query.useId !=null and query.useId != ''">
+ AND FIND_IN_SET(#{query.useId},thc.useIds)
+ </if>
+ <if test="query.useId !=null and query.useId != ''">
+ AND FIND_IN_SET(#{query.useId},thc.useIds)
+ </if>
+ <if test="query.appUserIds != null and query.appUserIds.size()>0">
+ AND tph.appUserId IN
+ <foreach collection="query.appUserIds" item="appUserId" open="(" separator="," close=")">
+ #{appUserId}
+ </foreach>
+ </if>
+ <if test="query.paymentTimeStart != null and query.paymentTimeEnd!=null">
+ AND tph.paymentTime BETWEEN #{query.paymentTimeStart} AND #{query.paymentTimeEnd}
+ </if>
+ <if test="query.endTimeStart != null and query.endTimeEnd!=null">
+ AND tph.endTime BETWEEN #{query.endTimeStart} AND #{query.endTimeEnd}
+ </if>
+ <if test="query.status!=null and query.status !=''">
+ <choose>
+ <when test="query.status == 1">
+ AND tph.status = 2
+ </when>
+ <when test="query.status == 2">
+ AND tph.status = 3
+ </when>
+ </choose>
+ </if>
+ </where>
+ ORDER BY tph.insertTime DESC
+ </select>
</mapper>
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PayHuiminClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PayHuiminClient.java
index 4080339..2a96015 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PayHuiminClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PayHuiminClient.java
@@ -1,6 +1,17 @@
package com.dsh.course.feignClient.activity;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.activity.model.HuiminPayQuery;
+import com.dsh.guns.modular.system.model.SalesDetailVO;
+import com.dsh.guns.modular.system.util.ResultUtil;
import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
/**
* @author mitao
@@ -8,4 +19,29 @@
*/
@FeignClient(value = "mb-cloud-activity")
public interface PayHuiminClient {
+ /**
+ * 获取售卖明细
+ * @param query
+ * @return
+ */
+ @PostMapping("/base/huimin-record/list")
+ Page<SalesDetailVO> selectPage(@RequestBody HuiminPayQuery query);
+
+ /**
+ * 获取售卖明细统计数据
+ * @param query
+ * @return
+ */
+ @PostMapping("/base/getStaticsData")
+ Map<String, BigDecimal> getStaticsData(@RequestBody HuiminPayQuery query);
+
+ /**
+ * 退款惠民卡
+ * @param id
+ */
+ @GetMapping("/base/tPayHuimin/refund/{id}")
+ ResultUtil<?> refund(Integer id);
+
+ @PostMapping("/base/tPayHuimin/export-data")
+ List<SalesDetailVO> exportData(@RequestBody HuiminPayQuery query);
}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/HuiminPayQuery.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/HuiminPayQuery.java
new file mode 100644
index 0000000..1b04018
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/HuiminPayQuery.java
@@ -0,0 +1,40 @@
+package com.dsh.course.feignClient.activity.model;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class HuiminPayQuery {
+ // 基础查询条件
+ private String huiMinName; // 惠民名称
+ private String huiMinType; // 惠民类型
+ private Long operatorId; // 运营商ID
+ private Long useId; // 使用记录ID
+
+ // 用户信息
+ private String userName; // 用户名
+ private String phone; // 联系方式
+
+ // 时间范围
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date paymentTimeStart; // 支付时间-开始
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date paymentTimeEnd; // 支付时间-结束
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTimeStart; // 结束时间-开始
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTimeEnd; // 结束时间-结束
+
+ // 状态查询
+ private Integer status; // 使用状态
+
+ //购买用户
+ private List<Integer> appUserIds;
+
+ private long current;
+ private long size;
+
+}
\ No newline at end of file
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java
index 0ad8a8f..d50b289 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java
@@ -129,6 +129,11 @@
*/
@TableField("storeId")
private Integer storeId;
+ /**
+ *运营商id
+ */
+ @TableField("operatorId")
+ private Integer operatorId;
@Override
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TPayHuiminController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TPayHuiminController.java
index 28f8e6b..0d2f20b 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TPayHuiminController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TPayHuiminController.java
@@ -1,10 +1,44 @@
package com.dsh.guns.modular.system.controller.code;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.account.AppUserClient;
+import com.dsh.course.feignClient.account.model.TAppUser;
import com.dsh.course.feignClient.activity.PayHuiminClient;
+import com.dsh.course.feignClient.activity.model.HuiminPayQuery;
+import com.dsh.course.feignClient.activity.model.TPayHuimin;
import com.dsh.guns.core.base.controller.BaseController;
+import com.dsh.guns.core.common.constant.factory.PageFactory;
+import com.dsh.guns.modular.system.model.AppUserByNameAndPhoneDTO;
+import com.dsh.guns.modular.system.model.SalesDetailVO;
+import com.dsh.guns.modular.system.model.TOperator;
+import com.dsh.guns.modular.system.model.TStore;
+import com.dsh.guns.modular.system.service.IStoreService;
+import com.dsh.guns.modular.system.service.TOperatorService;
+import com.dsh.guns.modular.system.util.DateUtil;
+import com.dsh.guns.modular.system.util.ExcelUtil;
+import com.dsh.guns.modular.system.util.ResultUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
/**
* 惠民卡控制器
@@ -20,12 +54,22 @@
@Autowired
private PayHuiminClient payHuiminClient;
+ @Autowired
+ private TOperatorService operatorService;
+ @Autowired
+ private IStoreService storeService;
+ @Autowired
+ private AppUserClient appUserClient;
+
/**
* 跳转到惠民卡首页
*/
@RequestMapping("")
- public String index() {
+ public String index(Model model) {
+ //查询运营商列表
+ model.addAttribute("operatorList", operatorService.list(new QueryWrapper<TOperator>().eq("state", 1)));
+ model.addAttribute("storeList", storeService.list(new QueryWrapper<TStore>().eq("state", 1)));
return PREFIX + "tPayHuimin.html";
}
@@ -37,62 +81,141 @@
return PREFIX + "tPayHuimin_add.html";
}
- /* *//**
- * 跳转到修改惠民卡
- *//*
- @RequestMapping("/tPayHuimin_update/{tPayHuiminId}")
- public String tPayHuiminUpdate(@PathVariable Integer tPayHuiminId, Model model) {
- TPayHuimin tPayHuimin = payHuiminClient.selectById(tPayHuiminId);
- model.addAttribute("item",tPayHuimin);
- LogObjectHolder.me().set(tPayHuimin);
- return PREFIX + "tPayHuimin_edit.html";
- }
-
- *//**
+ /**
* 获取惠民卡列表
- *//*
+ */
@RequestMapping(value = "/list")
@ResponseBody
- public Object list(String condition) {
- return payHuiminClient.selectList(null);
+ public Object list(HuiminPayQuery query) {
+ Page<TPayHuimin> tPayHuiminPage = new PageFactory<TPayHuimin>().defaultPage();
+ query.setCurrent(tPayHuiminPage.getCurrent());
+ query.setSize(tPayHuiminPage.getSize());
+ List<Integer> appUserIds = Collections.emptyList();
+ if (StringUtils.isNotBlank(query.getUserName()) || StringUtils.isNotBlank(query.getPhone())){
+ AppUserByNameAndPhoneDTO appUserByNameAndPhoneDTO = new AppUserByNameAndPhoneDTO();
+ appUserByNameAndPhoneDTO.setUserName(query.getUserName());
+ appUserByNameAndPhoneDTO.setPhone(query.getPhone());
+ List<TAppUser> tAppUsers = appUserClient.queryAPPUserByNameAndPhone(appUserByNameAndPhoneDTO);
+ appUserIds = tAppUsers.stream()
+ .map(TAppUser::getId)
+ .collect(Collectors.toList());
+ if (CollUtil.isEmpty(appUserIds)){
+ return new Page<>();
+ }
+ }
+ query.setAppUserIds(appUserIds);
+ Page<SalesDetailVO> salesDetailVOPage = payHuiminClient.selectPage(query);
+ List<SalesDetailVO> records = salesDetailVOPage.getRecords();
+ if (CollUtil.isNotEmpty(records)) {
+ List<Integer> operatorIdList = records.stream()
+ .map(SalesDetailVO::getOperatorId)
+ .collect(Collectors.toList());
+ List<Integer> storeIdList = records.stream()
+ .map(SalesDetailVO::getStoreId)
+ .collect(Collectors.toList());
+ Map<Integer, String> operatorMap = operatorService.listByIds(operatorIdList).stream()
+ .collect(Collectors.toMap(TOperator::getId, TOperator::getName));
+ Map<Integer, String> storeMap = storeService.listByIds(storeIdList).stream()
+ .collect(Collectors.toMap(TStore::getId, TStore::getName));
+ records.forEach(item->{
+ item.setOperatorName(operatorMap.getOrDefault(item.getOperatorId(),""));
+ item.setStoreName(storeMap.getOrDefault(item.getStoreId(),""));
+ });
+ }
+ return super.packForBT(salesDetailVOPage);
}
- *//**
- * 新增惠民卡
- *//*
- @RequestMapping(value = "/add")
+ /**
+ * 获取统计数据
+ * @param query
+ * @return
+ */
+ @RequestMapping("/getStaticsData")
@ResponseBody
- public Object add(TPayHuimin tPayHuimin) {
- payHuiminClient.insert(tPayHuimin);
- return SUCCESS_TIP;
+ public ResultUtil<Map<String, BigDecimal>> getStaticsData(HuiminPayQuery query) {
+ Map<String, BigDecimal> map = new HashMap<>();
+ map.put("totalAmount",BigDecimal.ZERO);
+ map.put("refundAmount",BigDecimal.ZERO);
+ List<Integer> appUserIds = Collections.emptyList();
+ if (StringUtils.isNotBlank(query.getUserName()) || StringUtils.isNotBlank(query.getPhone())){
+ AppUserByNameAndPhoneDTO appUserByNameAndPhoneDTO = new AppUserByNameAndPhoneDTO();
+ appUserByNameAndPhoneDTO.setUserName(query.getUserName());
+ appUserByNameAndPhoneDTO.setPhone(query.getPhone());
+ List<TAppUser> tAppUsers = appUserClient.queryAPPUserByNameAndPhone(appUserByNameAndPhoneDTO);
+ appUserIds = tAppUsers.stream()
+ .map(TAppUser::getId)
+ .collect(Collectors.toList());
+ if (CollUtil.isEmpty(appUserIds)){
+ return ResultUtil.success(map);
+ }
+ }
+ query.setAppUserIds(appUserIds);
+ map = payHuiminClient.getStaticsData(query);
+ return ResultUtil.success(map);
}
- *//**
- * 删除惠民卡
- *//*
- @RequestMapping(value = "/delete")
+ /**
+ * 退款
+ * @param id
+ * @return
+ */
+ @GetMapping("/refund/{id}")
@ResponseBody
- public Object delete(@RequestParam Integer tPayHuiminId) {
- payHuiminClient.deleteById(tPayHuiminId);
- return SUCCESS_TIP;
+ public ResultUtil<?> refund(@PathVariable("id") Integer id) {
+ return payHuiminClient.refund(id);
}
- *//**
- * 修改惠民卡
- *//*
- @RequestMapping(value = "/update")
- @ResponseBody
- public Object update(TPayHuimin tPayHuimin) {
- payHuiminClient.updateById(tPayHuimin);
- return SUCCESS_TIP;
+ /**
+ * 导出售卖明细
+ * @param query
+ */
+ @GetMapping("/export")
+ public void exportData(HuiminPayQuery query, HttpServletResponse response) {
+ List<SalesDetailVO> records = payHuiminClient.exportData(query);
+ records = records.stream().filter(Objects::nonNull).collect(Collectors.toList());
+ if (CollUtil.isNotEmpty(records)) {
+ List<Integer> operatorIdList = records.stream()
+ .map(SalesDetailVO::getOperatorId)
+ .collect(Collectors.toList());
+ List<Integer> storeIdList = records.stream()
+ .map(SalesDetailVO::getStoreId)
+ .collect(Collectors.toList());
+ Map<Integer, String> operatorMap = operatorService.listByIds(operatorIdList).stream()
+ .collect(Collectors.toMap(TOperator::getId, TOperator::getName));
+ Map<Integer, String> storeMap = storeService.listByIds(storeIdList).stream()
+ .collect(Collectors.toMap(TStore::getId, TStore::getName));
+ records.forEach(item -> {
+ item.setOperatorName(operatorMap.getOrDefault(item.getOperatorId(), ""));
+ item.setStoreName(storeMap.getOrDefault(item.getStoreId(), ""));
+ });
+ }
+ String[] titleArr = {"惠民卡名称", "惠民卡类型", "售卖金额", "所属运营商", "可用门店", "购买用户", "联系电话", "购买时间", "绑定人员", "已用次数", "有效期", "状态"};
+ String[][] values = new String[records.size()][];
+ for (int i = 0; i < records.size(); i++) {
+ SalesDetailVO salesDetailVO = records.get(i);
+ values[i] = new String[titleArr.length];
+ values[i][0] = salesDetailVO.getHuiMinName();
+ values[i][1] = salesDetailVO.getHuiMinType() == 1 ? "年度卡" : "年内卡";
+ values[i][2] = salesDetailVO.getSalesMoney().toString();
+ values[i][3] = salesDetailVO.getOperatorName();
+ values[i][4] = salesDetailVO.getStoreName();
+ values[i][5] = salesDetailVO.getUserName();
+ values[i][6] = salesDetailVO.getPhone();
+ values[i][7] = DateUtil.format(salesDetailVO.getPaymentTime(), "yyyy-MM-dd HH:mm:ss");
+ values[i][8] = salesDetailVO.getStudentName();
+ values[i][9] = salesDetailVO.getUseTimes().toString();
+ values[i][10] = DateUtil.format(salesDetailVO.getEndTime(), "yyyy-MM-dd HH:mm:ss");
+ values[i][11] = salesDetailVO.getStatus() == 2 ? "使用中" : "已退款";
+ }
+ try {
+ HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("售卖明细", titleArr, values, null);
+ ExcelUtil.setResponseHeader(response, "售卖明细.xls");
+ OutputStream os = response.getOutputStream();
+ wb.write(os);
+ os.flush();
+ os.close();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
-
- *//**
- * 惠民卡详情
- *//*
- @RequestMapping(value = "/detail/{tPayHuiminId}")
- @ResponseBody
- public Object detail(@PathVariable("tPayHuiminId") Integer tPayHuiminId) {
- return payHuiminClient.selectById(tPayHuiminId);
- }*/
}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SalesDetailVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SalesDetailVO.java
new file mode 100644
index 0000000..ecfc282
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SalesDetailVO.java
@@ -0,0 +1,37 @@
+package com.dsh.guns.modular.system.model;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class SalesDetailVO {
+ // 基础信息
+ private Long id; // 主键ID[8]
+ private String huiMinName; // 惠民卡名称
+ private Integer huiMinType; // 惠民卡类型(1:年度卡,2:年内卡)
+ private BigDecimal salesMoney; // 售卖金额(精确计算)
+
+ // 关联信息
+ private Integer operatorId;
+ private String operatorName; // 所属运营商
+ private Integer storeId;
+ private String storeName; // 可用门店
+ private Integer appUserId; // 购买用户ID
+ private String userName; // 购买用户
+ private String phone; // 联系电话
+
+ // 时间信息
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date paymentTime; // 购买时间[1,8](@ref)
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTime; // 有效期
+
+ // 使用信息
+ private String studentName; // 绑定人员
+ private String studentId; // 绑定人员ID
+ private Integer useTimes; // 已用次数
+ private Integer status; // 状态(1:使用中,2:已退款)
+}
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminAgreement/tHuiminAgreement.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminAgreement/tHuiminAgreement.html
index 42c31f1..7bbd8a5 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminAgreement/tHuiminAgreement.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminAgreement/tHuiminAgreement.html
@@ -27,6 +27,7 @@
<#button name="删除" icon="fa-remove" clickFun="THuiminAgreement.delete()" space="true"/>
@}
</div>
+
<#table id="THuiminAgreementTable"/>
</div>
</div>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tPayHuimin/tPayHuimin.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tPayHuimin/tPayHuimin.html
index fc699e8..37c091c 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tPayHuimin/tPayHuimin.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tPayHuimin/tPayHuimin.html
@@ -3,36 +3,114 @@
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
- <h5>惠民卡管理</h5>
+ <h5>售卖明细</h5>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="row">
- <div class="col-sm-3">
- <#NameCon id="condition" name="名称" />
+ <div class="form-group">
+ <div class="col-sm-3">
+ <#NameCon id="huiMinName" name="惠民卡名称:" />
+ </div>
+ <div class="col-sm-3">
+ <#SelectCon id="huiMinType" name="惠民卡类型:">
+ <option value="">全部</option>
+ <option value="1">年度卡</option>
+ <option value="2">年内卡</option>
+ </#SelectCon>
+ </div>
+ <div class="col-sm-3">
+ <#SelectCon id="operatorId" name="所属运营商:">
+ <option value="">全部</option>
+ @if(isNotEmpty(operatorList)){
+ @for(item in operatorList){
+ <option value="${item.id}">${item.name}</option>
+ @}
+ @}
+ </#SelectCon>
+ </div>
+ <div class="col-sm-3">
+ <#SelectCon id="useId" name="可用门店:">
+ <option value="">全部</option>
+ @if(isNotEmpty(storeList)){
+ @for(item in storeList){
+ <option value="${item.id}">${item.name}</option>
+ @}
+ @}
+ </#SelectCon>
+ </div>
</div>
+ <div class="form-group">
+ <div class="col-sm-3">
+ <#NameCon id="userName" name="购买用户:" />
+ </div>
+ <div class="col-sm-3">
+ <#NameCon id="phone" name="联系电话:" />
+ </div>
+ <div class="col-sm-3">
+ <#TimeCon id="paymentTimeStr" name="购买时间:" />
+ </div>
+ <div class="col-sm-3">
+ <#TimeCon id="endTimeStr" name="有效期至:" />
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-sm-3">
+ <#SelectCon id="status" name="使用状态:">
+ <option value="">全部</option>
+ <option value="1">使用中</option>
+ <option value="2">已退款</option>
+ </#SelectCon>
+ </div>
<div class="col-sm-3">
<#button name="搜索" icon="fa-search" clickFun="TPayHuimin.search()"/>
+ <#button name="重置" icon="fa-search" clickFun="TPayHuimin.resetSearch()"/>
</div>
+ </div>
+
</div>
<div class="hidden-xs" id="TPayHuiminTableToolbar" role="group">
- @if(shiro.hasPermission("/tPayHuimin/add")){
- <#button name="添加" icon="fa-plus" clickFun="TPayHuimin.openAddTPayHuimin()"/>
+ @if(shiro.hasPermission("/tPayHuimin/refund")){
+ <#button name="退款" icon="fa-plus" clickFun="TPayHuimin.refund()"/>
@}
- @if(shiro.hasPermission("/tPayHuimin/update")){
- <#button name="修改" icon="fa-edit" clickFun="TPayHuimin.openTPayHuiminDetail()" space="true"/>
+ @if(shiro.hasPermission("/tPayHuimin/export")){
+ <#button name="导出" icon="fa-edit" clickFun="TPayHuimin.export()" space="true"/>
@}
- @if(shiro.hasPermission("/tPayHuimin/delete")){
- <#button name="删除" icon="fa-remove" clickFun="TPayHuimin.delete()" space="true"/>
- @}
+ <div class="form-group">
+ <label> 售卖总金额:¥</label>
+ <label id="totalAmount">0</label>  
+ <label>已退款金额:¥</label>
+ <label id="refundAmount">0</label>
+ </div>
</div>
<#table id="TPayHuiminTable"/>
+
</div>
</div>
</div>
</div>
</div>
</div>
-<script src="${ctxPath}/static/modular/system/tPayHuimin/tPayHuimin.js"></script>
+
+<script src="${ctxPath}/modular/system/tPayHuimin/tPayHuimin.js"></script>
+<script>
+ //日期范围选择
+ laydate.render({
+ elem: '#paymentTimeStr',
+ type: 'date'
+ ,range: '~' //或 range: '~' 来自定义分割字符
+ ,trigger:'click'
+ });
+ //日期范围选择
+ laydate.render({
+ elem: '#endTimeStr',
+ type: 'date'
+ ,range: '~' //或 range: '~' 来自定义分割字符
+ ,trigger:'click'
+ });
+ $(function () {
+
+ });
+</script>
@}
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tPayHuimin/tPayHuimin.js b/cloud-server-management/src/main/webapp/static/modular/system/tPayHuimin/tPayHuimin.js
index da437a4..1c00185 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tPayHuimin/tPayHuimin.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tPayHuimin/tPayHuimin.js
@@ -14,20 +14,25 @@
TPayHuimin.initColumn = function () {
return [
{field: 'selectItem', radio: true},
- {title: '主键id', field: 'id', visible: true, align: 'center', valign: 'middle'},
- {title: '金额', field: 'salesMoney', visible: true, align: 'center', valign: 'middle'},
- {title: '购买用户id', field: 'appUserId', visible: true, align: 'center', valign: 'middle'},
- {title: '绑定人员id,多个逗号拼接,关联student表', field: 'studentId', visible: true, align: 'center', valign: 'middle'},
+ {title: '主键id', field: 'id', visible: false, align: 'center', valign: 'middle'},
+ {title: '惠民卡名称', field: 'huiMinName', visible: true, align: 'center', valign: 'middle'},
+ {title: '惠民卡类型', field: 'huiMinType', visible: true, align: 'center', valign: 'middle',
+ formatter:function(value,row,index){
+ return {1: '年度卡', 2: '年内卡'}[value];
+ }},
+ {title: '售卖金额', field: 'salesMoney', visible: true, align: 'center', valign: 'middle'},
+ {title: '所属运营商', field: 'operatorName', visible: true, align: 'center', valign: 'middle'},
+ {title: '可用门店', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
+ {title: '购买用户', field: 'userName', visible: true, align: 'center', valign: 'middle'},
+ {title: '联系电话', field: 'phone', visible: true, align: 'center', valign: 'middle'},
+ {title: '购买时间', field: 'paymentTime', visible: true, align: 'center', valign: 'middle'},
+ {title: '绑定人员', field: 'studentName', visible: true, align: 'center', valign: 'middle'},
+ {title: '已用次数', field: 'useTimes', visible: true, align: 'center', valign: 'middle'},
{title: '有效期', field: 'endTime', visible: true, align: 'center', valign: 'middle'},
- {title: '状态1使用中2已退款', field: 'status', visible: true, align: 'center', valign: 'middle'},
- {title: '创建时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
- {title: '付款时间', field: 'paymentTime', visible: true, align: 'center', valign: 'middle'},
- {title: '付款方式1微信2支付宝', field: 'paymentType', visible: true, align: 'center', valign: 'middle'},
- {title: '订单号', field: 'code', visible: true, align: 'center', valign: 'middle'},
- {title: '第三方支付流水号', field: 'orderNumber', visible: true, align: 'center', valign: 'middle'},
- {title: '退款时间', field: 'refundTime', visible: true, align: 'center', valign: 'middle'},
- {title: '退款状态 1未退款 2已退款 3线下退款(使用过或超过七日退款)', field: 'refundStatus', visible: true, align: 'center', valign: 'middle'},
- {title: '惠民卡id', field: 'cardId', visible: true, align: 'center', valign: 'middle'}
+ {title: '状态', field: 'status', visible: true, align: 'center', valign: 'middle',
+ formatter:function(value,row,index){
+ return {1: '使用中', 2: '已退款'}[value];
+ }}
];
};
@@ -92,19 +97,101 @@
ajax.start();
}
};
-
+TPayHuimin.getStaticsData = function (){
+ var queryData = TPayHuimin.getQueryParam();
+ //提交信息
+ var ajax = new $ax(Feng.ctxPath + "/tPayHuimin/getStaticsData", function(data){
+ if (data.data!=null && data.data !=''){
+ $('#totalAmount').text(data.data.totalAmount);
+ $('#refundAmount').text(data.data.refundAmount);
+ }
+ },function(data){
+ Feng.error("获取统计数据失败!" + data.responseJSON.message + "!");
+ });
+ ajax.setData(queryData);
+ ajax.start();
+}
+TPayHuimin.refund = function (){
+ if (this.check()) {
+ if (TPayHuimin.seItem.refundStatus != 1){
+ Feng.error("该商品已退款");
+ return;
+ }
+ let operation = function(){
+ let ajax = new $ax(Feng.ctxPath + "/tPayHuimin/refund", function () {
+ Feng.success("退款成功!");
+ TPayHuimin.table.refresh();
+ }, function (data) {
+ Feng.error("退款失败!" + data.responseJSON.message + "!");
+ });
+ ajax.set("id", TPayHuimin.seItem.id);
+ ajax.start();
+ };
+ Feng.confirm("确认退款所选惠民卡吗?",operation);
+ }
+}
+TPayHuimin.export = function (){
+ var queryData = TPayHuimin.getQueryParam();
+ // 生成带参数的完整URL
+ var exportUrl = Feng.ctxPath + "/tPayHuimin/export?" + $.param(queryData);
+ window.location.href = exportUrl;
+}
+/**
+ * 获取查询参数
+ * @returns {{}}
+ */
+TPayHuimin.getQueryParam = function () {
+ var queryData = {};
+ queryData['huiMinName'] = $("#huiMinName").val();
+ queryData['huiMinType'] = $("#huiMinType").val();
+ queryData['operatorId'] = $("#operatorId").val();
+ queryData['useId'] = $("#useId").val();
+ queryData['userName'] = $("#userName").val();
+ queryData['phone'] = $("#phone").val();
+ let paymentTimeStr = $("#paymentTimeStr").val();
+ if (paymentTimeStr){
+ queryData['paymentTimeStart'] = paymentTimeStr.split('~')[0]+' 00:00:00';
+ queryData['paymentTimeEnd'] = paymentTimeStr.split('~')[1]+' 23:59:59';
+ }
+ let endTimeStr = $("#endTimeStr").val();
+ if (endTimeStr){
+ queryData['endTimeStart'] = endTimeStr.split('~')[0]+' 00:00:00';
+ queryData['endTimeEnd'] = endTimeStr.split('~')[1]+' 23:59:59';
+ }
+ queryData['status'] = $("#status").val();
+ //过滤空值
+ Object.keys(queryData).forEach(key => {
+ if (queryData[key] === null || queryData[key] === '') {
+ delete queryData[key];
+ }
+ });
+ return queryData;
+}
/**
* 查询惠民卡列表
*/
TPayHuimin.search = function () {
- var queryData = {};
- queryData['condition'] = $("#condition").val();
+ var queryData = TPayHuimin.getQueryParam();
TPayHuimin.table.refresh({query: queryData});
+ TPayHuimin.getStaticsData();
};
-
+TPayHuimin.resetSearch = function () {
+ var queryData = {};
+ $("#huiMinName").val('');
+ $("#huiMinType option:first").prop("selected", true);
+ $("#operatorId option:first").prop("selected", true);
+ $("#useId option:first").prop("selected", true);
+ $("#userName").val('');
+ $("#phone").val('');
+ $("#paymentTimeStr").val('');
+ $("#endTimeStr").val('');
+ $("#status option:first").prop("selected", true);
+ TPayHuimin.search();
+};
$(function () {
var defaultColunms = TPayHuimin.initColumn();
var table = new BSTable(TPayHuimin.id, "/tPayHuimin/list", defaultColunms);
- table.setPaginationType("client");
+ table.setPaginationType("server");
TPayHuimin.table = table.init();
+ TPayHuimin.getStaticsData();
});
--
Gitblit v1.7.1