diff --git a/pom.xml b/pom.xml index 1eef049..a329465 100644 --- a/pom.xml +++ b/pom.xml @@ -166,6 +166,21 @@ jaxb-api 2.3.1 + + com.stripe + stripe-java + 30.0.0 + + + org.apache.httpcomponents.client5 + httpclient5 + 5.3.1 + + + com.alibaba + fastjson + 1.2.83 + diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java index f0b2475..f190b38 100644 --- a/src/main/java/com/example/demo/Export/ExportService.java +++ b/src/main/java/com/example/demo/Export/ExportService.java @@ -28,4 +28,8 @@ public interface ExportService { Result addExportBean(BeanRechargeDTO dto); Result addExportOnline(OnlineDTO dto); + //现金负责人退款导出 + Result addExportFinance(FinanceDTO dto); + + Result addExportCash(CashDTO dto); } diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index d4eb27c..e86d041 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -124,6 +124,16 @@ public class ExportServiceImpl implements ExportService { articleDTO.setUrl(""); articleDTO.setFileName(generateFileName("文章明细", adminName)); articleDTO.setDataNum(0); + } else if(dto instanceof FinanceDTO financeDTO){ + financeDTO.setAccount(Integer.valueOf(account)); + financeDTO.setUrl(""); + financeDTO.setFileName(generateFileName("现金退款明细", adminName)); + financeDTO.setDataNum(0); + } else if(dto instanceof CashDTO cashDTO){ + cashDTO.setAccount(Integer.valueOf(account)); + cashDTO.setUrl(""); + cashDTO.setFileName(generateFileName("现金收款明细", adminName)); + cashDTO.setDataNum(0); } } @@ -211,6 +221,26 @@ public class ExportServiceImpl implements ExportService { onlineDTO.getFileName(), onlineDTO.getDataNum() ); + }else if (dto instanceof FinanceDTO financeDTO){ + goldDetailMapper.insertExportRecord( + idHolder, + account, + financeDTO.getType(), + financeDTO.getState(), + financeDTO.getUrl(), + financeDTO.getFileName(), + financeDTO.getDataNum() + ); + }else if (dto instanceof CashDTO cashDTO){ + goldDetailMapper.insertExportRecord( + idHolder, + account, + cashDTO.getType(), + cashDTO.getState(), + cashDTO.getUrl(), + cashDTO.getFileName(), + cashDTO.getDataNum() + ); } } @@ -239,6 +269,10 @@ public class ExportServiceImpl implements ExportService { requestData.put(requestDataKey, beanRechargeDTO.getBeanSystemRechargeInfo()); } else if (dto instanceof OnlineDTO onlineDTO){ requestData.put(requestDataKey, onlineDTO.getBeanOnlineRechargeInfo()); + }else if(dto instanceof FinanceDTO financeDTO){ + requestData.put(requestDataKey, financeDTO.getCashRecordDTO()); + }else if (dto instanceof CashDTO cashDTO){ + requestData.put(requestDataKey, cashDTO.getCashCollection()); } exportData.put("requestData", requestData); @@ -294,4 +328,14 @@ public class ExportServiceImpl implements ExportService { public Result addExportOnline(OnlineDTO dto) { return addExport(dto, "在线明细", "online:queue:export_queue", "beanOnlineRechargeInfo"); } + + @Override + public Result addExportFinance(FinanceDTO dto) { + return addExport(dto, "现金退款明细", "finance:queue:export_queue", "cashRecordDTO"); + } + + @Override + public Result addExportCash(CashDTO dto) { + return addExport(dto, "现金收款明细", "cash:queue:export_queue", "cashCollection"); + } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/config/AppConfig.java b/src/main/java/com/example/demo/config/AppConfig.java index a50aa5b..3c2f690 100644 --- a/src/main/java/com/example/demo/config/AppConfig.java +++ b/src/main/java/com/example/demo/config/AppConfig.java @@ -2,16 +2,60 @@ package com.example.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; +import javax.net.ssl.*; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; + @Configuration public class AppConfig { @Bean - public RestTemplate restTemplate() { + public RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyManagementException { RestTemplate restTemplate = new RestTemplate(); + + // 配置SSL支持 + restTemplate.setRequestFactory(createSSLRequestFactory()); + restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); return restTemplate; } + + /** + * 创建支持SSL的HTTP请求工厂 + */ + private ClientHttpRequestFactory createSSLRequestFactory() throws NoSuchAlgorithmException, KeyManagementException { + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + public void checkClientTrusted(X509Certificate[] certs, String authType) { + } + public void checkServerTrusted(X509Certificate[] certs, String authType) { + } + } + }; + + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); + + HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); + + // 创建主机名验证器,信任所有主机 + HostnameVerifier allHostsValid = (hostname, session) -> true; + HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); + + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setConnectTimeout(30000); // 30秒连接超时 + factory.setReadTimeout(60000); // 60秒读取超时 + + return factory; + } } + diff --git a/src/main/java/com/example/demo/controller/cash/CashCollectionController.java b/src/main/java/com/example/demo/controller/cash/CashCollectionController.java index 34f80b8..4930f4a 100644 --- a/src/main/java/com/example/demo/controller/cash/CashCollectionController.java +++ b/src/main/java/com/example/demo/controller/cash/CashCollectionController.java @@ -3,6 +3,7 @@ package com.example.demo.controller.cash; import com.example.demo.Util.JWTUtil; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.CashRecord; +import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.coin.Page; @@ -52,7 +53,7 @@ public class CashCollectionController { @PostMapping("/getActivityList") public Result getActivityList() { - List list = cashCollectionService.getActivityList(); + List list = cashCollectionService.getActivityList(); return Result.success(list); } //新增收款订单 @@ -127,6 +128,14 @@ public class CashCollectionController { }catch (Exception e){ return Result.error(e.getMessage()); } - + } + //根据id查询收款订单 + @PostMapping("/selectById") + public Result selectById(@RequestBody CashCollection cashCollection) { + try { + return Result.success(cashCollectionService.selectById(cashCollection)); + }catch (Exception e){ + return Result.error(e.getMessage()); + } } } diff --git a/src/main/java/com/example/demo/controller/cash/CashRefundController.java b/src/main/java/com/example/demo/controller/cash/CashRefundController.java index e8d459c..bced193 100644 --- a/src/main/java/com/example/demo/controller/cash/CashRefundController.java +++ b/src/main/java/com/example/demo/controller/cash/CashRefundController.java @@ -3,7 +3,9 @@ package com.example.demo.controller.cash; import com.example.demo.Util.JWTUtil; import com.example.demo.domain.entity.Admin; +import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.cash.CashRecordDone; +import com.example.demo.domain.vo.cash.CashRecordRefund; import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.RechargeUser; import com.example.demo.domain.vo.coin.Result; @@ -44,6 +46,10 @@ public class CashRefundController { @Autowired MarketService marketService; + +/** + * 当地财务负责人退款记录 + */ @PostMapping("/select") public Result select(@RequestBody Page page) throws Exception { // 获取当前请求对象 @@ -64,37 +70,87 @@ public class CashRefundController { } // 获取传入的市场列表 - List requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null; + List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null; // 权限校验逻辑 if (markets.contains("9") || markets.contains("9999")) { // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets // 如果业务需要,也可以在这里做空值处理 - if (page.getCashRecordDone() != null) { + if (page.getCashRecordDTO() != null) { // 保持 requestedMarkets 不变,原样接受 // 可选:如果 requestedMarkets 为 null,可设为默认值或保持 null } } else { // 普通用户:必须校验权限 if (requestedMarkets == null || requestedMarkets.isEmpty()) { - page.getCashRecordDone().setMarkets(markets); + page.getCashRecordDTO().setMarkets(markets); } if (!markets.containsAll(requestedMarkets)) { return Result.error("无权限!请求的市场不在授权范围内。"); } // 校验通过,保持 requestedMarkets 不变 } - return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDone())); + return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); } + /** + * 添加退款现金记录 + */ @PostMapping("/add") - public Result add(@RequestBody CashRecordDone cashRecordDone) throws Exception { + public Result add(@RequestBody CashRecordRefund cashRecordRefund) throws Exception { try { - return Result.success(refundService.add(cashRecordDone)); + return Result.success(refundService.add(cashRecordRefund)); } catch (Exception e) { return Result.error(e.getMessage()); } } + /** + * 执行人查看退款现金记录 + */ + @PostMapping("/exSelect") + public Result executor(@RequestBody Page page) throws Exception { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + +// 解析 token 获取用户信息 + Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + List userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ",")); + List markets = marketService.getMarketIds(userMarkets); + +// 校验分页参数 + if (ObjectUtils.isEmpty(page.getPageNum())) { + return Result.error("页码数为空!"); + } + if (ObjectUtils.isEmpty(page.getPageSize())) { + return Result.error("页大小为空!"); + } + +// 获取传入的市场列表 + List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null; + +// 权限校验逻辑 + if (markets.contains("9") || markets.contains("9999")) { + // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets + // 如果业务需要,也可以在这里做空值处理 + if (page.getCashRecordDTO() != null) { + // 保持 requestedMarkets 不变,原样接受 + // 可选:如果 requestedMarkets 为 null,可设为默认值或保持 null + } + } else { + // 普通用户:必须校验权限 + if (requestedMarkets == null || requestedMarkets.isEmpty()) { + page.getCashRecordDTO().setMarkets(markets); + } + if (!markets.containsAll(requestedMarkets)) { + return Result.error("无权限!请求的市场不在授权范围内。"); + } + // 校验通过,保持 requestedMarkets 不变 + } + return Result.success(refundService.exSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + } + /** + * 查询客服提交现金记录 + */ @PostMapping("/selecta") public Result selecta(@RequestBody Page page) { @@ -107,9 +163,9 @@ public class CashRefundController { return Result.error("页大小为空!"); } // 获取传入的市场列表 - List requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null; + List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null; - return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDone())); + return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); } @PostMapping("/update") public Result update(@RequestBody CashRecordDone cashRecordDone)throws Exception { @@ -152,4 +208,33 @@ public class CashRefundController { } } + /** + * 新增线上退款订单 + */ + @PostMapping("/addOnline") + public Result addOnline(@RequestBody CashRecordRefund cashRecordRefund){ + try { + return Result.success(refundService.add(cashRecordRefund)); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + @PostMapping("/export") + public Result export(@RequestBody Page page) throws Exception { + +// 校验分页参数 + if (ObjectUtils.isEmpty(page.getPageNum())) { + return Result.error("页码数为空!"); + } + if (ObjectUtils.isEmpty(page.getPageSize())) { + return Result.error("页大小为空!"); + } + + return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + } + @PostMapping("/ceshi") + public Result ceshi() { + return Result.success("测试消息"); + } } diff --git a/src/main/java/com/example/demo/controller/coin/ExportController.java b/src/main/java/com/example/demo/controller/coin/ExportController.java index d6e120f..07b9eca 100644 --- a/src/main/java/com/example/demo/controller/coin/ExportController.java +++ b/src/main/java/com/example/demo/controller/coin/ExportController.java @@ -6,6 +6,7 @@ import com.example.demo.Util.RedisLockUtil; import com.example.demo.domain.DTO.*; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Export; +import com.example.demo.domain.DTO.CashDTO; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.ExportExcelService; import com.example.demo.service.coin.GoldDetailService; @@ -195,4 +196,41 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + /** + * 负责人退款导出 + */ + @PostMapping("/exportFinance") + public Result exportFinance(@Valid @RequestBody FinanceDTO dto) { + String lockKey = "export:lock:" + dto.getToken(); + String requestId = UUID.randomUUID().toString(); + long expireTime = 5000; + try { + // 尝试获取锁 + if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { + throw new BusinessException("操作太频繁,请稍后重试"); + } + // 执行业务逻辑 + return exportService.addExportFinance(dto); + } finally { + // 释放锁 + redisLockUtil.unlock(lockKey, requestId); + } + } + @PostMapping("/exportCash") + public Result exportCash(@Valid @RequestBody CashDTO dto) { + String lockKey = "export:lock:" + dto.getToken(); + String requestId = UUID.randomUUID().toString(); + long expireTime = 5000; + try { + // 尝试获取锁 + if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { + throw new BusinessException("操作太频繁,请稍后重试"); + } + // 执行业务逻辑 + return exportService.addExportCash(dto); + }finally { + // 释放锁 + redisLockUtil.unlock(lockKey, requestId); + } + } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java b/src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java new file mode 100644 index 0000000..2d42566 --- /dev/null +++ b/src/main/java/com/example/demo/controller/coin/RechargeActivityCenterController.java @@ -0,0 +1,192 @@ +package com.example.demo.controller.coin; + +import com.example.demo.config.interfac.Log; +import com.example.demo.domain.vo.coin.Page; +import com.example.demo.domain.vo.coin.RechargeActivity; +import com.example.demo.domain.vo.coin.Result; +import com.example.demo.service.coin.RechargeActivityCenterService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @program: gold-java + * @ClassName RechargeActivityCenterController + * @description: 充值活动中心管理 + * @author: Double + * @create: 2025−11-04 14:23 + * @Version 1.0 + **/ + +@RestController +@RequestMapping("/admin/coin/rechargeActivityCenter") +@RequiredArgsConstructor +@Slf4j +@CrossOrigin +public class RechargeActivityCenterController { + + @Autowired + private RechargeActivityCenterService rechargeActivityCenterService; + + + /** + * 导出用户权限数据 + * + * @param page 导出请求参数) + * @return 导出结果(成功返回活动信息,失败返回错误信息) + * @throws NullPointerException 当参数为空时抛出(如activity为null、关键属性为null) + * @throws IllegalArgumentException 当参数无效时抛出(如活动ID非法、参数格式错误) + */ + @Log("条件查询充值活动") + @PostMapping("/queryActivity") + public Result queryActivity(@RequestBody Page page) { + try { + //校验参数 + if (ObjectUtils.isEmpty(page.getPageNum())) { + return Result.error("页码数为空!"); + } + if (ObjectUtils.isEmpty(page.getPageSize())) { + return Result.error("页大小为空!"); + } + if (page.getRechargeActivity() == null) { + return Result.error("查询失败:活动信息不能为空"); + } + return Result.success(rechargeActivityCenterService.queryActivity(page.getPageNum(), page.getPageSize(),page.getRechargeActivity())); + } catch (NullPointerException e) { + log.error("查询活动失败:空指针异常", e); + return Result.error("查询失败:数据为空"); + } catch (IllegalArgumentException e) { + log.error("查询活动失败:参数异常", e); + return Result.error("查询失败:" + e.getMessage()); + } + } + + /** + * 新增充值活动 + * + * @param activity 充值活动请求参数(包含活动名称、活动规则等信息) + * @return 新增结果(成功返回提示信息,失败返回错误原因) + * @throws NullPointerException 当请求参数为空时抛出(如activity为null、活动名称等关键属性为null) + * @throws IllegalArgumentException 当请求参数无效时抛出(如活动名称为空字符串、参数格式不符合要求等) + */ + @Log("新增充值活动") + @PostMapping("/addActivity") + public Result addActivity(@RequestBody RechargeActivity activity) { + try { + if (activity == null) { + return Result.error("添加失败:活动信息不能为空"); + } + if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) { + return Result.error("添加失败:活动名称不能为空"); + } + if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) { + return Result.error("添加失败:业绩归属地不能为空"); + }else if (activity.getBusinessBelong().equals("活动归属地")) { + if (activity.getArea() == null || activity.getArea().trim().isEmpty()) { + return Result.error("添加失败:地区不能为空"); + } + } + if (activity.getStartTime() == null) { + return Result.error("添加失败:活动开始时间不能为空"); + } + if (activity.getEndTime() == null) { + return Result.error("添加失败:活动结束时间不能为空"); + } + if (activity.getEndTime().before(activity.getStartTime())) { + return Result.error("添加失败:活动结束时间必须晚于活动开始时间"); + } + if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) { + return Result.error("添加失败:添加人不能为空"); + } + rechargeActivityCenterService.addActivity(activity); + return Result.success("添加活动成功"); + } catch (NullPointerException e) { + log.error("添加活动失败:空指针异常", e); + return Result.error("添加失败:数据为空"); + } catch (IllegalArgumentException e) { + log.error("添加活动失败:参数异常", e); + return Result.error("添加失败:" + e.getMessage()); + } + } + + /** + * 更新充值活动 + * + * @param activity 充值活动更新参数(包含活动ID、待更新的活动名称等信息) + * @return 更新结果(成功返回提示信息,失败返回错误原因) + * @throws NullPointerException 当请求参数为空时抛出(如activity为null、活动ID、活动名称等关键属性为null) + * @throws IllegalArgumentException 当请求参数无效时抛出(如活动名称为空字符串、活动ID格式错误等) + */ + @Log("更新充值活动") + @PostMapping("/updateActivity") + public Result updateActivity(@RequestBody RechargeActivity activity) { + try { + if (activity == null) { + return Result.error("添加失败:活动信息不能为空"); + } + if (activity.getId() == null) { + return Result.error("添加失败:活动ID不能为空"); + } + if (activity.getActivityName() == null || activity.getActivityName().trim().isEmpty()) { + return Result.error("添加失败:活动名称不能为空"); + } + if (activity.getBusinessBelong() == null || activity.getBusinessBelong().trim().isEmpty()) { + return Result.error("添加失败:业绩归属地不能为空"); + }else if (activity.getBusinessBelong().equals("活动归属地")) { + if (activity.getArea() == null || activity.getArea().trim().isEmpty()) { + return Result.error("添加失败:地区不能为空"); + } + } + if (activity.getStartTime() == null) { + return Result.error("添加失败:活动开始时间不能为空"); + } + if (activity.getEndTime() == null) { + return Result.error("添加失败:活动结束时间不能为空"); + } + if (activity.getEndTime().before(activity.getStartTime())) { + return Result.error("添加失败:活动结束时间必须晚于活动开始时间"); + } + if (activity.getCreator() == null || activity.getCreator().trim().isEmpty()) { + return Result.error("添加失败:添加人不能为空"); + } + rechargeActivityCenterService.updateActivity(activity); + return Result.success("更新活动成功"); + } catch (NullPointerException e) { + log.error("更新活动失败:空指针异常", e); + return Result.error("更新失败:数据为空"); + } catch (IllegalArgumentException e) { + log.error("更新活动失败:参数异常", e); + return Result.error("更新失败:" + e.getMessage()); + } + } + + /** + * 删除充值活动 + * + * @param activity 待删除的充值活动ID + * @return 删除结果(成功返回提示信息,失败返回错误原因) + * @throws NullPointerException 当活动ID为空时抛出(如id为null) + * @throws IllegalArgumentException 当活动ID无效时抛出(如id为负数、非整数格式等不符合业务要求的情况) + */ + @Log("删除充值活动") + @PostMapping("/deleteActivity") + public Result deleteActivity(@RequestBody RechargeActivity activity) { + try { + if (activity.getId() == null) { + return Result.error("删除失败:活动ID不能为空"); + } + rechargeActivityCenterService.deleteActivity(activity); + return Result.success("删除活动成功"); + } catch (NullPointerException e) { + log.error("删除活动失败:空指针异常", e); + return Result.error("删除失败:数据为空"); + } catch (IllegalArgumentException e) { + log.error("删除活动失败:参数异常", e); + return Result.error("删除失败:" + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/coin/RoleController.java b/src/main/java/com/example/demo/controller/coin/RoleController.java index 36e3786..89f220e 100644 --- a/src/main/java/com/example/demo/controller/coin/RoleController.java +++ b/src/main/java/com/example/demo/controller/coin/RoleController.java @@ -115,4 +115,21 @@ public class RoleController { } } + + //查询所有直播渠道 + @PostMapping("/getChannel") + public Result getChannel(){ + return Result.success(roleService.getChannel()); + } + + + @Log("获取频道列表") + @PostMapping("/selectChannel") + public Result selectChannel(@RequestBody RoleVo roleVo) { + Integer id = roleVo.getId(); + List list=roleService.selectSubRole(id); + return Result.success(list); + } + + } diff --git a/src/main/java/com/example/demo/domain/DTO/CashDTO.java b/src/main/java/com/example/demo/domain/DTO/CashDTO.java new file mode 100644 index 0000000..09aeea1 --- /dev/null +++ b/src/main/java/com/example/demo/domain/DTO/CashDTO.java @@ -0,0 +1,39 @@ +package com.example.demo.domain.DTO; + +import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo; +import com.example.demo.domain.vo.cash.CashCollection; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: GOLD + * @ClassName CashDTO + * @description: + * @author: huangqizhen + * @create: 2025−11-09 09:26 + * @Version 1.0 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CashDTO { + private String token; + private String url = ""; + private String fileName = ""; + private Integer sort = 0; + private String field = ""; + private Integer account; + private Integer type = 13; //类型 + private Integer state = 0; //状态 + private String text = ""; //关键词搜索 + private Integer dataNum = 0; + private String deptid = ""; + + @NotNull(message = "page不能为空") + private Integer page = 1; + @NotNull(message = "pageSize不能为空") + private Integer pageSize = 20; + private CashCollection cashCollection; +} diff --git a/src/main/java/com/example/demo/domain/DTO/FinanceDTO.java b/src/main/java/com/example/demo/domain/DTO/FinanceDTO.java new file mode 100644 index 0000000..d98283a --- /dev/null +++ b/src/main/java/com/example/demo/domain/DTO/FinanceDTO.java @@ -0,0 +1,36 @@ +package com.example.demo.domain.DTO; + +import com.example.demo.domain.vo.cash.CashRecordDTO; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: GOLD + * @ClassName FinanceDTO + * @description: + * @author: huangqizhen + * @create: 2025−11-06 21:22 + * @Version 1.0 + **/ +@Data +@NoArgsConstructor +public class FinanceDTO { + private String token; + private String url = ""; + private String fileName = ""; + private Integer sort = 0; + private String field = ""; + private Integer account; + private Integer type = 12; //类型 + private Integer state = 0; //状态 + private String text = ""; //关键词搜索 + private Integer dataNum = 0; + private String deptid = ""; + private CashRecordDTO cashRecordDTO; + + @NotNull(message = "page不能为空") + private Integer page = 1; + @NotNull(message = "pageSize不能为空") + private Integer pageSize = 5000; +} diff --git a/src/main/java/com/example/demo/domain/entity/CashRecord.java b/src/main/java/com/example/demo/domain/entity/CashRecord.java index 958f5bb..d570bea 100644 --- a/src/main/java/com/example/demo/domain/entity/CashRecord.java +++ b/src/main/java/com/example/demo/domain/entity/CashRecord.java @@ -35,6 +35,7 @@ public class CashRecord implements Serializable { private String bankCode; // 银行流水订单号 private String goodsName; // 商品名称 private Integer goodNum; // 产品数量 + private String NumUnit; // 数量单位 个/月/年 private Integer permanentGold; // 永久金币数量 private Integer freeGold; // 免费金币数量 diff --git a/src/main/java/com/example/demo/domain/entity/RechargeActivity.java b/src/main/java/com/example/demo/domain/entity/RechargeActivity.java new file mode 100644 index 0000000..32e76b7 --- /dev/null +++ b/src/main/java/com/example/demo/domain/entity/RechargeActivity.java @@ -0,0 +1,35 @@ +package com.example.demo.domain.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @program: gold-java + * @ClassName RechargeActivity + * @description: + * @author: Ethan + * @create: 2025−11-04 11:48 + * @Version 1.0 + **/ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RechargeActivity { + private Integer id; //活动id + private String activityName; //活动名称 + private String businessBelong; //业绩归属地 + private Integer status; //状态 0未开始 1进行中 2已结束(不是实时更新的,仅展示,不要拿这个做校验) + private Integer creator; //添加人 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime startTime; // 开始时间(到秒) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime endTime; // 结束时间(到秒) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime createTime; // 创建日期(到秒) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime updateTime; // 更新日期(到秒) +} diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java b/src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java index bed1057..d3d123d 100644 --- a/src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java +++ b/src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java @@ -46,4 +46,5 @@ public class BeanAuditInfo { private Date auditEndTime; // 结束时间 private String sortField; // 排序字段 private String sortOrder; // 排序顺序 + private String flag; // 员工数据 } diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java index 4a64ff6..6936047 100644 --- a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java +++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java @@ -34,6 +34,8 @@ public class BeanConsumeArticle { private String type; //类型source_type 9、10打赏,11付费 @ExcelIgnore private Integer payMode; // 0 打赏 1 付费 2 其他 + @ExcelIgnore + private Integer flag; @ExcelProperty("金豆总数") private String beanNum; //金豆数量 @ExcelProperty("付费金豆数") diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java index 5dd5be6..8ca5277 100644 --- a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java +++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java @@ -44,6 +44,8 @@ public class BeanConsumeFan { @ExcelIgnore private Integer payType; //支付方式(直播:12345,铁粉:7,文章:8) @ExcelIgnore + private Integer flag; //是否包含员工 + @ExcelIgnore private String sortField; //排序字段 @ExcelIgnore private String sortOrder; //排序顺序 diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java index 177d7b9..f39d893 100644 --- a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java +++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java @@ -36,6 +36,8 @@ public class BeanConsumeLive { //文章: 1. 打赏2. 付费 //@ExcelProperty("类型" ) @ExcelIgnore + private Integer flag; + @ExcelIgnore private String type; //类型 @ExcelProperty("礼物") private String gift; //礼物名称 diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanUser.java b/src/main/java/com/example/demo/domain/vo/bean/BeanUser.java index 3230e04..725ea1b 100644 --- a/src/main/java/com/example/demo/domain/vo/bean/BeanUser.java +++ b/src/main/java/com/example/demo/domain/vo/bean/BeanUser.java @@ -20,6 +20,7 @@ public class BeanUser { private String name; //姓名 private Integer jwcode; //精网号 private String dept; //分部 + private String flag; //是否包含员工 private Integer beanNum; //金豆数量 private Integer buyBean; //付费金豆 private Integer freeBean; //免费金豆 diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java index bfdccd3..b25d472 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java +++ b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java @@ -36,6 +36,7 @@ public class CashCollection implements Serializable { private String bankCode; // 银行流水订单号 private String goodsName; // 商品名称 private Integer goodNum; // 商品数量 + private String numUnit; //数量单位 个/月/年 private Integer permanentGold; // 永久金币数量 private Integer freeGold; // 免费金币数量 //金额信息 diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java new file mode 100644 index 0000000..6f46211 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java @@ -0,0 +1,248 @@ +package com.example.demo.domain.vo.cash; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + * @program: GOLD + * @ClassName CashRecordDTO + * @description: + * @author: huangqizhen + * @create: 2025−11-04 17:03 + * @Version 1.0 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CashRecordDTO{ + private String activity;// 活动 + private String goodsName;// 商品名称 + private Integer goodsNum;// 商品数量 + private String numUnit;// 商品单位 + private BigDecimal gold;//永久金币 + private BigDecimal free;//免费金币 + private String paymentCurrency;// 支付币种 + private BigDecimal paymentAmount;// 支付金额 + private String receivedCurrency;// 收款币种 + private BigDecimal receivedAmount;// 收款金额 + private BigDecimal handlingCharge;// 手续费 + private String payBankCode;// 付款银行 + private String payType;// 支付方式 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime payTime;// 付款时间 + private String receivedMarket;// 收款地区 + private String payVoucher;// 支付凭证 + private String payRemark;// 支付备注 + //提交人 + private String paySubmitter; + //提交人 + private String Submitter; + //审核人 + private String audit; + //到账日期 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime receivedTime; + @ExcelIgnore + private List goodsNames;// 商品名称 + @ExcelIgnore + private List markets;// 地区 + + + /** + * 序号 + */ + private Integer id; + + /** + * 精网号 + */ + private Integer jwcode; + + /** + * 姓名 + */ + private String userName; + private String name; + + /** + * 所属地区 + */ + private Integer market; + + /** + * 金币订单号 + */ + private String orderCode; + + /** + * 银行流水订单号 + */ + private String bankCode; + + /** + * 永久金币 + */ + private BigDecimal permanentGold; + + /** + * 免费金币 + */ + private BigDecimal freeGold; + + /** + * 审核人id + */ + @ExcelIgnore + private Integer auditId; + + /** + * 订单状态(1位代表收款,2位代表退款) + 0:线下财务待审核;1:线下财务审核通过待填手续费;2线下财务审核驳回;5:手动撤回待编辑提交 + 3:link线上财务复核待填手续费 + 4:收款流程全部结束 + 6:退款 + --------------------------------------------- + 10:地区财务待审核;11:地区财务手动撤回待编辑提交12:地区财务驳回; + 20:地区负责人待审核;22:地区负责人驳回; + 30:总部财务待审核;32:总部财务驳回; + 40:执行人待处理;41:执行人已处理,退款结束 + */ + private Integer status; + + /** + * 提交人id + */ + @ExcelIgnore + private Integer submitterId; + + /** + * 提交人地区 + */ + private String submitterMarket; + + /** + * 转账凭证 + */ + private String voucher; + + /** + * 备注 + */ + private String remark; + + /** + * 驳回理由 + */ + private String rejectReason; + + /** + * 退款备注(理由),客服填写 + */ + private String refundReason; + + /** + * 退款方式(0全额/1部分) + */ + private Integer refundModel; + + /** + * 退款执行人OA号 + */ + private Integer executor; + + /** + * 退款途径 + */ + private String refundChannels; + + /** + * 退款日期(到天) + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date refundTime; + + /** + * 退款备注(执行人填写) + */ + private String refundRemark; + + /** + * 退款截图 + */ + private String refundVoucher; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date updateTime; + + /** + * 审核时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date auditTime; + + /** + * 退款币种 + */ + private String refundCurrency; + + /** + * 退款金额 + */ + private String refundAmount; + + /** + * 关联收款id + */ + @ExcelIgnore + private Integer relatedId; + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date startTime; // 开始时间 + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date endTime; // 结束时间 + private String submitterName; + private String auditName; + private String executorName; + private String marketName; + @ExcelIgnore + private List statuses; + @ExcelIgnore + private String processInstanceId; // 流程实例ID + @ExcelIgnore + private String currentTaskId; // 当前任务ID + + private String areaServise; + private String areaFinance; + private String areaCharge; + private String headFinance; + @ExcelIgnore + private String sortField; + @ExcelIgnore + private String sortOrder; + + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date sTime; // 开始时间 + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date eTime; // 结束时间 + +} diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java new file mode 100644 index 0000000..7e4f6bf --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java @@ -0,0 +1,203 @@ +package com.example.demo.domain.vo.cash; + + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @TableName cash_record_refund + */ +@Data +@NoArgsConstructor +public class CashRecordRefund { + /** + * 序号 + */ + private Integer id; + + /** + * 精网号 + */ + private Integer jwcode; + + /** + * 姓名 + */ + private String userName; + private String name; + + /** + * 所属地区 + */ + private String market; + + /** + * 金币订单号 + */ + private String orderCode; + + /** + * 银行流水订单号 + */ + private String bankCode; + + /** + * 永久金币 + */ + private Integer permanentGold; + + /** + * 免费金币 + */ + private Integer freeGold; + + /** + * 审核人id + */ + private Integer auditId; + + /** + * 订单状态(1位代表收款,2位代表退款) +0:线下财务待审核;1:线下财务审核通过待填手续费;2线下财务审核驳回;5:手动撤回待编辑提交 +3:link线上财务复核待填手续费 +4:收款流程全部结束 +6:退款 +--------------------------------------------- +10:地区财务待审核;11:地区财务手动撤回待编辑提交12:地区财务驳回; +20:地区负责人待审核;22:地区负责人驳回; +30:总部财务待审核;32:总部财务驳回; +40:执行人待处理;41:执行人已处理,退款结束 + */ + private Integer status; + + /** + * 提交人id + */ + private Integer submitterId; + + /** + * 提交人地区 + */ + private String submitterMarket; + + /** + * 转账凭证 + */ + private String voucher; + + /** + * 备注 + */ + private String remark; + + /** + * 驳回理由 + */ + private String rejectReason; + + /** + * 退款备注(理由),客服填写 + */ + private String refundReason; + + /** + * 退款方式(0全额/1部分) + */ + private Integer refundModel; + + /** + * 退款执行人OA号 + */ + private Integer executor; + + /** + * 退款途径 + */ + private String refundChannels; + + /** + * 退款日期(到天) + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date refundTime; + + /** + * 退款备注(执行人填写) + */ + private String refundRemark; + + /** + * 退款截图 + */ + private String refundVoucher; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date updateTime; + + /** + * 审核时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date auditTime; + + /** + * 退款币种 + */ + private String refundCurrency; + + /** + * 退款金额 + */ + private String refundAmount; + + /** + * 关联收款id + */ + private Integer relatedId; + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date startTime; // 开始时间 + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date endTime; // 结束时间 + private String submitterName; + private String auditName; + private String executorName; + private String marketName; + private List statuses; + + private String processInstanceId; // 流程实例ID + private String currentTaskId; // 当前任务ID + + private String areaServise; + private String areaFinance; + private String areaCharge; + private String headFinance; + private String sortField; + private String sortOrder; + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date sTime; // 开始时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date eTime; // 结束时间 + private Integer partRefundGold; + private Integer partRefundFree; + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java b/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java new file mode 100644 index 0000000..d2a66e5 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java @@ -0,0 +1,24 @@ +package com.example.demo.domain.vo.cash; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: GOLD + * @ClassName LhlAudit + * @description: + * @author: huangqizhen + * @create: 2025−11-05 16:45 + * @Version 1.0 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LhlAudit { + private Integer id; + private String areaServise;// + private String areaFinance; + private String areaCharge; + private String headFinace; +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/coin/IdName.java b/src/main/java/com/example/demo/domain/vo/coin/IdName.java new file mode 100644 index 0000000..fa550d3 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/coin/IdName.java @@ -0,0 +1,13 @@ +package com.example.demo.domain.vo.coin; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class IdName { + private Integer id; + private String name; +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/coin/Page.java b/src/main/java/com/example/demo/domain/vo/coin/Page.java index ec84775..840b1c2 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/Page.java +++ b/src/main/java/com/example/demo/domain/vo/coin/Page.java @@ -3,6 +3,7 @@ package com.example.demo.domain.vo.coin; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.bean.*; import com.example.demo.domain.vo.cash.CashCollection; +import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.cash.CashRecordDone; import lombok.Data; import lombok.NoArgsConstructor; @@ -44,5 +45,7 @@ public class Page { private HistoryRecord historyRecord; //历史记录 private CashCollection cashCollection; //现金收款 private CashRecordDone cashRecordDone; + private RechargeActivity rechargeActivity; //充值活动 + private CashRecordDTO cashRecordDTO; } diff --git a/src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java b/src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java new file mode 100644 index 0000000..97a2ae3 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/coin/RechargeActivity.java @@ -0,0 +1,65 @@ +package com.example.demo.domain.vo.coin; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @program: gold-java + * @ClassName RechargeActivity + * @description: 充值活动信息VO类 + * @author: Double + * @create: 2025−10-28 15:00 + * @Version 1.0 + **/ + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RechargeActivity { + + @ExcelProperty("活动ID") + private Integer id; // 活动唯一标识 + + @ExcelProperty("活动名称") + private String activityName; // 活动名称 + + @ExcelProperty("业绩归属地") + private String businessBelong; // 业绩归属地 + + private String area; // 地区 + + @ExcelProperty("地区") + private String areaName; // 地区名 + + @ExcelProperty("活动开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date startTime; // 活动开始时间 + + @ExcelProperty("活动结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date endTime; // 活动结束时间 + + @ExcelProperty("活动状态") + private String status; // 活动状态(进行中、已结束、未开始) + + private String creator; // 添加人 + + @ExcelProperty("添加人") + private String creatorName; // 添加人名字 + + @ExcelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; // 创建时间 + + @ExcelProperty("更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date updateTime; // 更新时间 + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date activityTime; // 活动时间 +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java b/src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java index 7483312..3c009db 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java +++ b/src/main/java/com/example/demo/domain/vo/coin/RechargeAudit.java @@ -55,7 +55,7 @@ public class RechargeAudit { private String auditName; //审核人姓名 private Byte type; //类型 private String rejectReason; //驳回理由 - // private Integer flag; //是否为员工号 0员工号 1非员工号 + private Integer flag; //是否为员工号 0员工号 1非员工号 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private String payTime; //支付时间 diff --git a/src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java b/src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java index 658c8d4..1d04c13 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java +++ b/src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java @@ -51,7 +51,7 @@ public class RefundAudit { private String auditName; //审核人姓名 private String rejectReason; //驳回理由 private Byte type; //类型 - // private Integer flag; //是否为员工号 0-员工号 1-非员工号 + private Integer flag; //是否为员工号 0-员工号 1-非员工号 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") diff --git a/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java b/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java index d0f29c7..984c8e2 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java +++ b/src/main/java/com/example/demo/domain/vo/coin/RoleVo.java @@ -34,6 +34,7 @@ public class RoleVo implements Serializable { private String fatherMarket;//父级角色市场 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date createTime; // 创建时间 + private String channel;//所属渠道 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date updateTime; // 更新时间 diff --git a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java index 7c598fb..139c995 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java @@ -1,12 +1,16 @@ package com.example.demo.mapper.cash; +import cn.hutool.core.lang.Opt; import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.GOrder; +import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.vo.cash.CashCollection; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.time.LocalDateTime; import java.util.List; +import java.util.Set; /** * @program: gold-java @@ -45,10 +49,13 @@ public interface CashCollectionMapper { //根据精网号获取市场名 String getMarketNameByJwcode(Integer jwcode); //获取收款活动列表 - List getActivityList(); + List getActivityList(@Param("now")LocalDateTime now); //查找未同步的订单 ListgetUnSync(@Param("size")int size); //给同步过去的gOrder设置同步状态 int markSynced(@Param("orderId") Integer orderId); + //根据id查询收款订单 + CashCollection selectById(Integer id); + List selectBatchIds(Set relatedIds); } diff --git a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java index 70cffe4..ee5fa3a 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java @@ -1,11 +1,12 @@ package com.example.demo.mapper.cash; -import com.example.demo.domain.vo.cash.CashCollection; -import com.example.demo.domain.vo.cash.CashRecordDone; +import cn.hutool.core.lang.Opt; +import com.example.demo.domain.vo.cash.*; import com.example.demo.domain.vo.coin.RefundUser; import org.apache.ibatis.annotations.Mapper; import java.util.List; +import java.util.Set; /** * @program: GOLD @@ -17,9 +18,9 @@ import java.util.List; **/ @Mapper public interface CashRefundMapper { - List select(CashRecordDone cashRecordDone); + List select(CashRecordDTO cashRecordDTO); int update(CashRecordDone cashRecordDone); - int insert(CashRecordDone cashRecordDone); + int insert(CashRecordRefund cashRecordRefund); int withdraw(Integer id); int review(CashRecordDone cashRecordDone); @@ -29,4 +30,10 @@ public interface CashRefundMapper { int updateStatus(CashRecordDone cashRecordDone); void addAudit(CashRecordDone cashRecordDone); void updateAudit(CashRecordDone cashRecordDone); -} + List financeSelect(CashRecordDTO cashRecordDTO); + //获取各阶段审核人 + LhlAudit getAudit(Integer id); + List exSelect(CashRecordDTO cashRecordDTO); + + List getAuditBatch(Set auditIds); +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/mapper/coin/AuditMapper.java b/src/main/java/com/example/demo/mapper/coin/AuditMapper.java index f6a07d1..97ded8f 100644 --- a/src/main/java/com/example/demo/mapper/coin/AuditMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/AuditMapper.java @@ -1,5 +1,7 @@ package com.example.demo.mapper.coin; +import cn.hutool.core.lang.Opt; +import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.coin.RechargeAudit; @@ -9,6 +11,7 @@ import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; +import java.util.Set; /** * @program: gold-java @@ -46,6 +49,8 @@ public interface AuditMapper { String getName(Integer auditId); //更新首充日期 void updateFirstRecharge(Integer jwcode); + + List getNamesByIds(Set submitterIds); //添加错误订单 void addErrorRecord(UserGoldRecord order); } diff --git a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java index 9102db8..99adcd3 100644 --- a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java @@ -1,8 +1,11 @@ package com.example.demo.mapper.coin; +import cn.hutool.core.lang.Opt; import com.example.demo.domain.entity.Market; +import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; public interface MarketMapper { List getMarket(); @@ -14,4 +17,6 @@ public interface MarketMapper { Market getMarketIdDao(String country); Market getMarketIdBytype(String market); + String getMarketById(String market); + List getMarketByIds(@Param("marketIds") Set marketIds); } \ No newline at end of file diff --git a/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java b/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java new file mode 100644 index 0000000..27e527e --- /dev/null +++ b/src/main/java/com/example/demo/mapper/coin/RechargeActivityCenterMapper.java @@ -0,0 +1,35 @@ +package com.example.demo.mapper.coin; + +import com.example.demo.domain.vo.coin.RechargeActivity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @program: gold-java + * @ClassName RechargeActivityCenterMapper + * @description: 充值活动中心Mapper接口 + * @author: Double + * @create: 2025−10-28 14:42 + * @Version 1.0 + **/ + +@Mapper +public interface RechargeActivityCenterMapper { + + // 查询所有活动(用于批量更新状态) + List listActivities(); + + // 根据ID查询活动 + List queryActivity(RechargeActivity activity); + + // 新增活动 + void addActivity(RechargeActivity activity); + + // 更新活动 + void updateActivity(RechargeActivity activity); + + // 删除活动 + void deleteActivity(RechargeActivity activity); +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/mapper/live/LiveMapper.java b/src/main/java/com/example/demo/mapper/live/LiveMapper.java index 223b64e..5715096 100644 --- a/src/main/java/com/example/demo/mapper/live/LiveMapper.java +++ b/src/main/java/com/example/demo/mapper/live/LiveMapper.java @@ -21,6 +21,8 @@ public interface LiveMapper { List selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive); //获取直播礼物列表 List getLiveGift(); + //获取频道列表 + List getChannel(); //获取直播频道列表 List getLiveChannel(); //计算直播消费金豆合计数 diff --git a/src/main/java/com/example/demo/service/cash/CashCollectionService.java b/src/main/java/com/example/demo/service/cash/CashCollectionService.java index 1401499..81a1226 100644 --- a/src/main/java/com/example/demo/service/cash/CashCollectionService.java +++ b/src/main/java/com/example/demo/service/cash/CashCollectionService.java @@ -1,6 +1,7 @@ package com.example.demo.service.cash; import com.example.demo.domain.entity.CashRecord; +import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.coin.Result; @@ -31,7 +32,9 @@ public interface CashCollectionService { //根据精网号获取姓名和地区 User getNameAndMarket(Integer jwcode); //获取活动列表 - List getActivityList(); + List getActivityList(); //同步g_order订单到cash_record表 Object syncToCashRecord(); + //根据id查询收款订单 + CashCollection selectById(CashCollection cashCollection); } diff --git a/src/main/java/com/example/demo/service/cash/RefundService.java b/src/main/java/com/example/demo/service/cash/RefundService.java index 3612678..389b237 100644 --- a/src/main/java/com/example/demo/service/cash/RefundService.java +++ b/src/main/java/com/example/demo/service/cash/RefundService.java @@ -1,6 +1,9 @@ package com.example.demo.service.cash; +import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.cash.CashRecordDone; +import com.example.demo.domain.vo.cash.CashRecordRefund; +import com.example.demo.domain.vo.coin.Page; import com.github.pagehelper.PageInfo; /** @@ -12,10 +15,10 @@ import com.github.pagehelper.PageInfo; * @Version 1.0 **/ public interface RefundService { - //多条件查询 - PageInfo select(Integer pageNum, Integer pageSize, CashRecordDone cashRecordDone); + //多条件查询(qi'yong) + PageInfo select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); //添加 - int add(CashRecordDone cashRecordDone) throws Exception; + int add(CashRecordRefund cashRecordRefund) throws Exception; //修改 int update(CashRecordDone cashRecordDone) throws Exception; // @@ -28,4 +31,9 @@ public interface RefundService { int updateStatus(CashRecordDone cashRecordDone); int finalreview(CashRecordDone cashRecordDone); + PageInfo financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); + + PageInfo exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); + //新增线上退款记录 + void addOnline(CashRecordRefund cashRecordRefund); } diff --git a/src/main/java/com/example/demo/service/coin/ExportExcelService.java b/src/main/java/com/example/demo/service/coin/ExportExcelService.java index c0d316b..c65b87e 100644 --- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java +++ b/src/main/java/com/example/demo/service/coin/ExportExcelService.java @@ -34,4 +34,8 @@ public interface ExportExcelService { Exception OnlineExcel(String message) throws Exception; + //负责人退款导出 + Exception FinanceExcel(String message) throws Exception; + + Exception CashExcel(String message) throws Exception; } \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java b/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java new file mode 100644 index 0000000..5e97a88 --- /dev/null +++ b/src/main/java/com/example/demo/service/coin/RechargeActivityCenterService.java @@ -0,0 +1,34 @@ +package com.example.demo.service.coin; + +import com.example.demo.domain.vo.coin.RechargeActivity; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @program: gold-java + * @ClassName RechargeActivityCenterService + * @description: 充值活动中心服务接口 + * @author: Double + * @create: 2025−10-28 14:40 + * @Version 1.0 + **/ + +public interface RechargeActivityCenterService { + + + // 根据ID查询活动 + PageInfo queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity); + + // 新增活动 + void addActivity(RechargeActivity activity); + + // 更新活动 + void updateActivity(RechargeActivity activity); + + // 更新状态 + void updateStatus(); + + // 删除活动 + void deleteActivity(RechargeActivity activity); +} diff --git a/src/main/java/com/example/demo/service/coin/RoleService.java b/src/main/java/com/example/demo/service/coin/RoleService.java index c47e595..268cdef 100644 --- a/src/main/java/com/example/demo/service/coin/RoleService.java +++ b/src/main/java/com/example/demo/service/coin/RoleService.java @@ -19,6 +19,8 @@ import java.util.List; public interface RoleService { + //查询频道 + List getChannel(); //新增角色 Result addRole(RoleVo roleVo); //新增角色二期替补 diff --git a/src/main/java/com/example/demo/service/listen/CashListener.java b/src/main/java/com/example/demo/service/listen/CashListener.java new file mode 100644 index 0000000..16cdfbc --- /dev/null +++ b/src/main/java/com/example/demo/service/listen/CashListener.java @@ -0,0 +1,36 @@ +package com.example.demo.service.listen; + +import com.example.demo.Util.RedisUtil; +import com.example.demo.service.coin.ExportExcelService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @program: GOLD + * @ClassName CashListener + * @description: + * @author: huangqizhen + * @create: 2025−11-09 09:42 + * @Version 1.0 + **/ +@Component +public class CashListener extends BaseMessageListener { + @Autowired + private ExportExcelService exportExcelService; + + protected CashListener(RedisUtil redisQueueUtil) { + super(redisQueueUtil, "cash:queue:export_queue"); + } + + @Override + protected void handleMessage(String message) { + validateMessage( message); + try { + Thread.sleep(5000); + exportExcelService.CashExcel(message); + } catch (Exception e) { + handleException(e, message); + + } + } +} diff --git a/src/main/java/com/example/demo/service/listen/FinanceListener.java b/src/main/java/com/example/demo/service/listen/FinanceListener.java new file mode 100644 index 0000000..b72b110 --- /dev/null +++ b/src/main/java/com/example/demo/service/listen/FinanceListener.java @@ -0,0 +1,36 @@ +package com.example.demo.service.listen; + +import com.example.demo.Util.RedisUtil; +import com.example.demo.service.coin.ExportExcelService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @program: GOLD + * @ClassName FinanceListener + * @description: + * @author: huangqizhen + * @create: 2025−11-06 21:35 + * @Version 1.0 + **/ +@Component +public class FinanceListener extends BaseMessageListener{ + @Autowired + private ExportExcelService exportExcelService; + + @Autowired + public FinanceListener(RedisUtil redisQueueUtil) { + super(redisQueueUtil, "finance:queue:export_queue"); + } + + @Override + protected void handleMessage(String message) { + validateMessage( message); + try { + Thread.sleep(5000); + exportExcelService.FinanceExcel(message); + } catch (Exception e) { + handleException(e, message); + } + } +} diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java index 5ab58b9..3f83e6c 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java @@ -2,6 +2,7 @@ package com.example.demo.serviceImpl.cash; import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.GOrder; +import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.coin.Result; @@ -64,6 +65,9 @@ public class CashCollectionServiceImpl implements CashCollectionService { if (!cashCollection.getGoodsName().equals("金币充值")){ if( cashCollection.getGoodNum()== 0 ){ throw new IllegalArgumentException("产品数量不能为空");} + if(cashCollection.getNumUnit()== null){ + throw new IllegalArgumentException("数量单位不能为空"); + } } if(cashCollection.getPaymentCurrency()== null){ throw new IllegalArgumentException("支付币种不能为空"); @@ -80,12 +84,6 @@ public class CashCollectionServiceImpl implements CashCollectionService { if(cashCollection.getPayTime()== null){ throw new IllegalArgumentException("付款时间不能为空"); } - if (cashCollection.getVoucher()== null){ - throw new IllegalArgumentException("转账凭证不能为空"); - } - if (cashCollection.getRemark()==null){ - throw new IllegalArgumentException("备注不能为空"); - } //生成订单号后半部分 String orderNumber = UUID.randomUUID().toString().replaceAll("-", ""); CashRecord cashRecord = new CashRecord(); @@ -96,6 +94,7 @@ public class CashCollectionServiceImpl implements CashCollectionService { cashRecord.setActivity(cashCollection.getActivity()); // 活动 cashRecord.setGoodsName(cashCollection.getGoodsName()); //商品名称 cashRecord.setGoodNum(cashCollection.getGoodNum()); //商品数量 + cashRecord.setNumUnit(cashCollection.getNumUnit()); //数量单位 cashRecord.setPermanentGold(cashCollection.getPermanentGold()); //永久金币 cashRecord.setFreeGold(cashCollection.getFreeGold()); //免费金币 cashRecord.setPaymentCurrency(cashCollection.getPaymentCurrency()); //付款币种 @@ -153,10 +152,14 @@ public class CashCollectionServiceImpl implements CashCollectionService { if (cashRecord.getGoodsName().equals("金币充值")){ if( cashRecord.getPermanentGold()== 0 && cashRecord.getFreeGold()== 0){ throw new IllegalArgumentException("金币数量不能为空");} + } if (!cashRecord.getGoodsName().equals("金币充值")){ if( cashRecord.getGoodNum()== 0 ){ throw new IllegalArgumentException("产品数量不能为空");} + if(cashRecord.getNumUnit()== null){ + throw new IllegalArgumentException("数量单位不能为空"); + } } if(cashRecord.getPaymentCurrency()== null){ throw new IllegalArgumentException("支付币种不能为空"); @@ -173,12 +176,7 @@ public class CashCollectionServiceImpl implements CashCollectionService { if(cashRecord.getPayTime()== null){ throw new IllegalArgumentException("付款时间不能为空"); } - if (cashRecord.getVoucher()== null){ - throw new IllegalArgumentException("转账凭证不能为空"); - } - if (cashRecord.getRemark()==null){ - throw new IllegalArgumentException("备注不能为空"); - } + CashRecord status=cashCollectionMapper.selectByOrderCode(cashRecord.getOrderCode()); if (!status.getStatus().equals(5)){ throw new IllegalArgumentException("只允许编辑已撤回订单"); @@ -253,8 +251,9 @@ public class CashCollectionServiceImpl implements CashCollectionService { } //获取收款活动列表 @Override - public List getActivityList() { - return cashCollectionMapper.getActivityList(); + public List getActivityList() { + LocalDateTime now = LocalDateTime.now(); + return cashCollectionMapper.getActivityList(now); } //同步g_order订单到cash_record表 @Override @@ -318,4 +317,11 @@ public class CashCollectionServiceImpl implements CashCollectionService { break; // 最后一批 } }return "同步完毕"; - }} + } + + @Override + public CashCollection selectById(CashCollection cashCollection) { + + return cashCollectionMapper.selectById(cashCollection.getId()); + } +} diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java index 53ea1ee..5d9b9f4 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java @@ -1,10 +1,15 @@ package com.example.demo.serviceImpl.cash; - +import com.example.demo.domain.entity.Admin; +import com.example.demo.Util.BusinessException; import com.example.demo.Util.GoldTistV2; +import com.example.demo.controller.coin.AuditController; +import com.example.demo.domain.entity.Market; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; -import com.example.demo.domain.vo.cash.CashRecordDone; +import com.example.demo.domain.vo.cash.*; import com.example.demo.domain.vo.coin.Result; +import com.example.demo.exception.SystemException; +import com.example.demo.mapper.cash.CashCollectionMapper; import com.example.demo.mapper.cash.CashRefundMapper; import com.example.demo.mapper.coin.AuditMapper; import com.example.demo.mapper.coin.MarketMapper; @@ -16,10 +21,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDate; -import java.util.Date; -import java.util.List; -import java.util.UUID; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; import static org.apache.commons.lang3.StringUtils.substring; @@ -43,50 +49,130 @@ public class CashRefundServiceImpl implements RefundService { private AuditMapper auditMapper; @Autowired private MarketMapper marketMapper; + @Autowired + private CashCollectionMapper cashCollectionMapper; + @Autowired + private AuditController auditController; + @Override - public PageInfo select(Integer pageNum, Integer pageSize, CashRecordDone cashRecordDone) { + public PageInfo select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { PageHelper.startPage(pageNum, pageSize); -// System.out.println(goldDetail.getMarkets()); - List list = cashRefundMapper.select(cashRecordDone); + List list = cashRefundMapper.select(cashRecordDTO); + + if (list.isEmpty()) { + return new PageInfo<>(list); + } + + // 批量收集ID + Set relatedIds = new HashSet<>(); + Set marketIds = new HashSet<>(); + Set submitterIds = new HashSet<>(); + Set auditIds = new HashSet<>(); + + list.forEach(item -> { + if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); + if (item.getMarket() != null) marketIds.add(item.getMarket()); + if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); + if (item.getAuditId() != null) auditIds.add(item.getAuditId()); + }); + + // 批量查询 + Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds) + .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity())); + + Map marketNameMap = marketMapper.getMarketByIds(marketIds) + .stream().collect(Collectors.toMap(Market::getId, Market::getName)); + + Map submitterNameMap = auditMapper.getNamesByIds(submitterIds) + .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName)); + + Map auditMap = cashRefundMapper.getAuditBatch(auditIds) + .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity())); + + // 处理数据 + list.forEach(item -> { + CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId()); + if (cashCollection != null) { + processCashCollection(item, cashCollection); + } + + String marketName = marketNameMap.get(item.getMarket()); + String submitter = submitterNameMap.get(item.getSubmitterId()); + LhlAudit lhlAudit = auditMap.get(item.getAuditId()); + + item.setMarketName(marketName != null ? marketName : ""); + item.setSubmitter(submitter != null ? submitter : ""); + + if (lhlAudit != null) { + item.setAreaServise(lhlAudit.getAreaServise()); + item.setAreaFinance(lhlAudit.getAreaFinance()); + item.setAreaCharge(lhlAudit.getAreaCharge()); + item.setHeadFinance(lhlAudit.getHeadFinace()); + } + }); + return new PageInfo<>(list); } - @Override - public int add(CashRecordDone cashRecordDone) throws Exception { - if(cashRecordDone.getHandlingCharge()== null){ - throw new Exception("未输入手续费") ; - } - if(cashRecordDone.getJwcode()==null){ - throw new Exception("未输入精网号") ; + private void processCashCollection(CashRecordDTO item, CashCollection cashCollection) { + // 设置默认值 + Integer freeGold = cashCollection.getFreeGold() != null ? cashCollection.getFreeGold() : 0; + Integer permanentGold = cashCollection.getPermanentGold() != null ? cashCollection.getPermanentGold() : 0; + + BigDecimal free = new BigDecimal(freeGold).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + BigDecimal permanent = new BigDecimal(permanentGold).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + + item.setGold(permanent); + item.setFree(free); + item.setActivity(cashCollection.getActivity()); + item.setPaymentCurrency(cashCollection.getPaymentCurrency()); + item.setPaymentAmount(cashCollection.getPaymentAmount()); + item.setReceivedCurrency(cashCollection.getReceivedCurrency()); + item.setReceivedAmount(cashCollection.getReceivedAmount()); + item.setPayType(cashCollection.getPayType()); + item.setPayTime(cashCollection.getPayTime()); + item.setPayBankCode(cashCollection.getBankCode()); + item.setPaySubmitter(cashCollection.getSubmitterName()); + item.setAudit(cashCollection.getAuditName()); + item.setReceivedTime(cashCollection.getReceivedTime()); + item.setPayVoucher(cashCollection.getVoucher()); + item.setPayRemark(cashCollection.getRemark()); + item.setHandlingCharge(cashCollection.getHandlingCharge()); + + // 处理金币金额 + if (item.getPermanentGold() != null) { + item.setPermanentGold(item.getPermanentGold().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)); } - if(cashRecordDone.getPaymentAmount()== null){ - throw new Exception("未输入付款金额") ; + if (item.getFreeGold() != null) { + item.setFreeGold(item.getFreeGold().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)); } - if(cashRecordDone.getPaymentCurrency()== null){ - throw new Exception("未输入付款币种") ; + } + + @Override + public int add(CashRecordRefund cashRecordRefund) throws Exception { + if(cashRecordRefund.getJwcode()==null){ + throw new Exception("未输入精网号") ; } - if(cashRecordDone.getRefundModel()== null){ + if(cashRecordRefund.getRefundModel()== null){ throw new Exception("请填充退款类型") ; } - if(cashRecordDone.getRefundReason()== null){ + if(cashRecordRefund.getRefundReason()== null){ throw new Exception("请填写退款理由") ; } CashRecordDone cashRecordDonetwo = new CashRecordDone(); - cashRecordDonetwo.setAreaServise(cashRecordDone.getAreaServise()); + cashRecordDonetwo.setAreaServise(cashRecordRefund.getAreaServise()); cashRefundMapper.addAudit(cashRecordDonetwo); - cashRecordDone.setAuditId(cashRecordDonetwo.getId()); + cashRecordRefund.setAuditId(cashRecordDonetwo.getId()); - cashRecordDone.setOrderType(2); - cashRecordDone.setStatus(10); + cashRecordRefund.setStatus(10); //生成订单号后半部分 - String orderNumber = cashRecordDone.getOrderCode(); + String orderNumber = cashRecordRefund.getOrderCode(); //构建订单信息 - cashRecordDone.setOrderCode("TK" + orderNumber); //订单号 - cashRecordDone.setMarket(marketMapper.getMarketId(cashRecordDone.getMarket())); - cashRecordDone.setReceivedMarket(marketMapper.getMarketId(cashRecordDone.getReceivedMarket())); - cashRefundMapper.insert(cashRecordDone); + cashRecordRefund.setOrderCode("TK" + orderNumber); //订单号 + cashRecordRefund.setMarket(String.valueOf(Integer.valueOf(marketMapper.getMarketId(cashRecordRefund.getMarket())))); + cashRefundMapper.insert(cashRecordRefund); CashRecordDone cashRecordDone1 = new CashRecordDone(); - cashRecordDone1.setId(cashRecordDone.getId()); + cashRecordDone1.setId(cashRecordRefund.getId()); cashRecordDone1.setStatus(6); if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null) return cashRefundMapper.updateStatus(cashRecordDone1); @@ -226,4 +312,155 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); int result = cashRefundMapper.review(cashRecordDone); return (result > 0 ? Result.success("提交成功") : Result.error("提交失败")).getCode(); } + + @Override + public PageInfo financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { + PageHelper.startPage(pageNum, pageSize); +// System.out.println(goldDetail.getMarkets()); + List list = cashRefundMapper.financeSelect(cashRecordDTO); + if (list.isEmpty()) { + return new PageInfo<>(list); + } + + // 批量收集ID + Set relatedIds = new HashSet<>(); + Set marketIds = new HashSet<>(); + Set submitterIds = new HashSet<>(); + Set auditIds = new HashSet<>(); + + list.forEach(item -> { + if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); + if (item.getMarket() != null) marketIds.add(item.getMarket()); + if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); + if (item.getAuditId() != null) auditIds.add(item.getAuditId()); + }); + + // 批量查询 + Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds) + .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity())); + + Map marketNameMap = marketMapper.getMarketByIds(marketIds) + .stream().collect(Collectors.toMap(Market::getId, Market::getName)); + + Map submitterNameMap = auditMapper.getNamesByIds(submitterIds) + .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName)); + + Map auditMap = cashRefundMapper.getAuditBatch(auditIds) + .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity())); + + // 处理数据 + list.forEach(item -> { + CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId()); + if (cashCollection != null) { + processCashCollection(item, cashCollection); + } + + String marketName = marketNameMap.get(item.getMarket()); + String submitter = submitterNameMap.get(item.getSubmitterId()); + LhlAudit lhlAudit = auditMap.get(item.getAuditId()); + + item.setMarketName(marketName != null ? marketName : ""); + item.setSubmitter(submitter != null ? submitter : ""); + + if (lhlAudit != null) { + item.setAreaServise(lhlAudit.getAreaServise()); + item.setAreaFinance(lhlAudit.getAreaFinance()); + item.setAreaCharge(lhlAudit.getAreaCharge()); + item.setHeadFinance(lhlAudit.getHeadFinace()); + } + }); + + return new PageInfo<>(list); + } + + @Override + public PageInfo exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { + PageHelper.startPage(pageNum, pageSize); +// System.out.println(goldDetail.getMarkets()); + List list = cashRefundMapper.exSelect(cashRecordDTO); + if (list.isEmpty()) { + return new PageInfo<>(list); + } + + // 批量收集ID + Set relatedIds = new HashSet<>(); + Set marketIds = new HashSet<>(); + Set submitterIds = new HashSet<>(); + Set auditIds = new HashSet<>(); + + list.forEach(item -> { + if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); + if (item.getMarket() != null) marketIds.add(item.getMarket()); + if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); + if (item.getAuditId() != null) auditIds.add(item.getAuditId()); + }); + + // 批量查询 + Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds) + .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity())); + + Map marketNameMap = marketMapper.getMarketByIds(marketIds) + .stream().collect(Collectors.toMap(Market::getId, Market::getName)); + + Map submitterNameMap = auditMapper.getNamesByIds(submitterIds) + .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName)); + + Map auditMap = cashRefundMapper.getAuditBatch(auditIds) + .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity())); + + // 处理数据 + list.forEach(item -> { + CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId()); + if (cashCollection != null) { + processCashCollection(item, cashCollection); + } + + String marketName = marketNameMap.get(item.getMarket()); + String submitter = submitterNameMap.get(item.getSubmitterId()); + LhlAudit lhlAudit = auditMap.get(item.getAuditId()); + + item.setMarketName(marketName != null ? marketName : ""); + item.setSubmitter(submitter != null ? submitter : ""); + + if (lhlAudit != null) { + item.setAreaServise(lhlAudit.getAreaServise()); + item.setAreaFinance(lhlAudit.getAreaFinance()); + item.setAreaCharge(lhlAudit.getAreaCharge()); + item.setHeadFinance(lhlAudit.getHeadFinace()); + } + }); + + return new PageInfo<>(list); + } + + @Override + public void addOnline(CashRecordRefund cashRecordRefund) { + if(cashRecordRefund.getJwcode()==null){ + throw new BusinessException("未输入精网号") ; + } + if(cashRecordRefund.getRefundModel()== null){ + throw new BusinessException("请填充退款类型") ; + } + if(cashRecordRefund.getRefundReason()== null){ + throw new BusinessException("请填写退款理由") ; + } + CashRecordDone cashRecordDonetwo = new CashRecordDone(); + cashRecordDonetwo.setAreaServise(cashRecordRefund.getAreaServise()); + cashRefundMapper.addAudit(cashRecordDonetwo); + cashRecordRefund.setAuditId(cashRecordDonetwo.getId()); + + cashRecordRefund.setStatus(20); + //生成订单号后半部分 + String orderNumber = cashRecordRefund.getOrderCode(); + //构建订单信息 + cashRecordRefund.setOrderCode("TK" + orderNumber); //订单号 + cashRecordRefund.setMarket(String.valueOf(Integer.valueOf(marketMapper.getMarketId(cashRecordRefund.getMarket())))); + cashRefundMapper.insert(cashRecordRefund); + CashRecordDone cashRecordDone1 = new CashRecordDone(); + cashRecordDone1.setId(cashRecordRefund.getId()); + cashRecordDone1.setStatus(6); + if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null) + cashRefundMapper.updateStatus(cashRecordDone1); + else throw new SystemException("提交失败") ; + } } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java index 862ec37..0b4b6d0 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -8,6 +8,7 @@ import com.example.demo.Util.ExcelUploadUtil; import com.example.demo.Util.JWTUtil; import com.example.demo.controller.bean.BeanConsumeController; import com.example.demo.controller.bean.BeanRechargeController; +import com.example.demo.controller.cash.CashRefundController; import com.example.demo.controller.coin.ConsumeController; import com.example.demo.controller.coin.GoldDetailController; import com.example.demo.controller.coin.RechargeController; @@ -18,10 +19,15 @@ import com.example.demo.domain.entity.User; import com.example.demo.domain.export.Goldmingxi; import com.example.demo.domain.vo.bean.*; +import com.example.demo.domain.vo.cash.CashCollection; +import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.coin.*; +import com.example.demo.mapper.cash.CashRefundMapper; import com.example.demo.mapper.coin.ExportMapper; +import com.example.demo.service.cash.RefundService; import com.example.demo.service.coin.ExportExcelService; +import com.example.demo.serviceImpl.cash.CashRefundServiceImpl; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -32,6 +38,7 @@ import com.example.demo.service.coin.AiEmotionService; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.formula.functions.Finance; import org.apache.xmlbeans.impl.xb.xsdschema.Attribute; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -76,6 +83,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { private BeanRechargeController beanRechargeController; @Autowired private AuthenticationManager authenticationManager; + @Autowired + private CashRefundController cashRefundController; // 每页查询的数据量 private static final int PAGE_SIZE = 5000; @Autowired @@ -261,6 +270,38 @@ public class ExportExcelServiceImpl implements ExportExcelService { } @Override + public Exception FinanceExcel(String message) throws Exception { + return exportExcelGeneric(message, "financeUser", page -> { + try { + JsonNode rootNode = objectMapper.readTree(message); + JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode beanRechargeNode = requestDataNode.path("cashRecordDTO"); + CashRecordDTO cashRecordDTO = objectMapper.treeToValue(beanRechargeNode, CashRecordDTO.class); + page.setCashRecordDTO(cashRecordDTO); + return cashRefundController.export(page); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + @Override + public Exception CashExcel(String message) throws Exception { + return exportExcelGeneric(message, "cashUser", page -> { + try { + JsonNode rootNode = objectMapper.readTree(message); + JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode beanRechargeNode = requestDataNode.path("cashCollection"); + CashCollection cashCollection = objectMapper.treeToValue(beanRechargeNode, CashCollection.class); + page.setCashCollection(cashCollection); + return cashRefundController.export(page); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + @Override public List getExcel(Export export) { List list = exportMapper.getExportRecord(export.getAccount(),export.getType()); System.out.println(list+"-------------------------------"); @@ -497,6 +538,10 @@ public class ExportExcelServiceImpl implements ExportExcelService { return BeanSystemRechargeInfo.class; case "onlineUser": return BeanOnlineRechargeInfo.class; + case "financeUser": + return CashRecordDTO.class; + case "cashUser": + return CashCollection.class; default: throw new IllegalArgumentException("不支持的导出类型: " + exportType); } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java new file mode 100644 index 0000000..2281e38 --- /dev/null +++ b/src/main/java/com/example/demo/serviceImpl/coin/RechargeActivityCenterServiceImpl.java @@ -0,0 +1,134 @@ +package com.example.demo.serviceImpl.coin; + +import com.example.demo.domain.vo.coin.RechargeActivity; +import com.example.demo.mapper.coin.RechargeActivityCenterMapper; +import com.example.demo.service.coin.RechargeActivityCenterService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + * @program: gold-java + * @ClassName RechargeActivityCenterServiceImpl + * @description: 充值活动中心服务实现类 + * @author: Double + * @create: 2025−10-28 14:40 + * @Version 1.0 + **/ + +@Service +public class RechargeActivityCenterServiceImpl implements RechargeActivityCenterService { + + @Autowired + private RechargeActivityCenterMapper rechargeActivityCenterMapper; + + + // 根据ID查询活动 + @Override + public PageInfo queryActivity(Integer pageNum, Integer pageSize, RechargeActivity activity) { + updateStatus(); + PageHelper.startPage(pageNum, pageSize); + List activityList = rechargeActivityCenterMapper.queryActivity(activity); + return new PageInfo<>(activityList); + } + + // 新增活动 + @Override + public void addActivity(RechargeActivity activity) { + Date startTime = activity.getStartTime(); + Date endTime = activity.getEndTime(); + + //获取当前系统时间(本地时间,与活动时间时区保持一致) + Date now = new Date(); + + //时间范围判断,设置对应状态 + if (now.before(startTime)) { + // 当前时间 < 开始时间 → 未开始(状态0) + activity.setStatus("0"); + } else if (now.after(endTime)) { + // 当前时间 > 结束时间 → 已结束(状态2) + activity.setStatus("2"); + } else { + // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1) + activity.setStatus("1"); + } + rechargeActivityCenterMapper.addActivity(activity); + } + + // 更新活动 + @Override + public void updateActivity(RechargeActivity activity) { + Date startTime = activity.getStartTime(); + Date endTime = activity.getEndTime(); + + //获取当前系统时间(本地时间,与活动时间时区保持一致) + Date now = new Date(); + + //时间范围判断,设置对应状态 + if (now.before(startTime)) { + // 当前时间 < 开始时间 → 未开始(状态0) + activity.setStatus("0"); + } else if (now.after(endTime)) { + // 当前时间 > 结束时间 → 已结束(状态2) + activity.setStatus("2"); + } else { + // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1) + activity.setStatus("1"); + } + rechargeActivityCenterMapper.updateActivity(activity); + } + + @Override + public void updateStatus() { + // 查询所有活动 + List activityList = rechargeActivityCenterMapper.listActivities(); + + if (activityList == null || activityList.isEmpty()) { + return; + } + + Date now = new Date(); + + // 遍历所有活动,更新状态 + for (RechargeActivity activity : activityList) { + Date startTime = activity.getStartTime(); + Date endTime = activity.getEndTime(); + + // 跳过时间为空的活动 + if (startTime == null || endTime == null) { + continue; + } + + String newStatus; + + // 时间范围判断,设置对应状态 + if (now.before(startTime)) { + // 当前时间 < 开始时间 → 未开始(状态0) + newStatus = "0"; + } else if (now.after(endTime)) { + // 当前时间 > 结束时间 → 已结束(状态2) + newStatus = "2"; + } else { + // 开始时间 ≤ 当前时间 ≤ 结束时间 → 进行中(状态1) + newStatus = "1"; + } + + // 只有当状态发生变化时才更新 + if (!newStatus.equals(activity.getStatus())) { + activity.setStatus(newStatus); + rechargeActivityCenterMapper.updateActivity(activity); + } + } + } + + // 删除活动 + @Override + public void deleteActivity(RechargeActivity activity) { + rechargeActivityCenterMapper.deleteActivity(activity); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java index 5478854..d2ca389 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java @@ -9,6 +9,7 @@ import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.RoleVo; import com.example.demo.mapper.coin.MenuMapper; import com.example.demo.mapper.coin.RoleMapper; +import com.example.demo.mapper.live.LiveMapper; import com.example.demo.service.coin.MenuService; import com.example.demo.service.coin.RoleService; import com.github.pagehelper.PageHelper; @@ -40,6 +41,16 @@ public class RoleServiceImpl implements RoleService { private MenuService menuService; @Autowired private MenuMapper menuMapper; + @Autowired + private LiveMapper liveMapper; + + + + //查询直播礼物 + @Override + public List getChannel() { + return liveMapper.getChannel(); + } //新增角色 @Override @@ -62,13 +73,12 @@ public class RoleServiceImpl implements RoleService { if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) { return Result.error("权限为空"); } - if (roleVo.getMarket() == null || roleVo.getMarket().isEmpty()) { - return Result.error("所属市场为空"); - } + + if (roleVo.getFatherId() == null || roleVo.getFatherId() != 2) { for (Integer menuId : roleVo.getMenuIds()) { - if (menuId == 11) { + if (menuId == 128) { return Result.error("上级角色非管理员用户不能赋予权限管理"); } } diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml index 144833f..ce94b08 100644 --- a/src/main/resources/cashMapper/CashCollectionMapper.xml +++ b/src/main/resources/cashMapper/CashCollectionMapper.xml @@ -7,12 +7,12 @@ useGeneratedKeys="true" keyProperty="id"> insert into cash_record(order_type,jwcode,name,market,activity, - order_code,goods_name,good_num,permanent_gold,free_gold, + order_code,goods_name,good_num,num_unit,permanent_gold,free_gold, payment_currency,payment_amount,received_market, pay_type,pay_time,status,submitter_id,submitter_market, voucher,remark) values(#{orderType},#{jwcode},#{name},#{market},#{activity}, - #{orderCode},#{goodsName},#{goodNum},#{permanentGold},#{freeGold},#{paymentCurrency}, + #{orderCode},#{goodsName},#{goodNum},#{NumUnit},#{permanentGold},#{freeGold},#{paymentCurrency}, #{paymentAmount},#{receivedMarket},#{payType},#{payTime}, #{status},#{submitterId},#{submitterMarket},#{voucher},#{remark}) @@ -43,6 +43,10 @@ activity = #{cashRecord.activity}, goods_name = #{cashRecord.goodsName}, good_num = #{cashRecord.goodNum}, + num_unit = #{cashRecord.NumUnit}, + permanent_gold = #{cashRecord.permanentGold}, + free_gold = #{cashRecord.freeGold}, + Num_unit = #{cashRecord.NumUnit}, payment_currency = #{cashRecord.paymentCurrency}, payment_amount = #{cashRecord.paymentAmount}, received_market = #{cashRecord.receivedMarket}, @@ -114,8 +118,9 @@ select m.name from user u left join market m on u.market=m.id where u.jwcode=#{jwcode} - + select id,activity_name,business_belong,status + from recharge_activity + where #{now} between start_time and end_time + + \ No newline at end of file diff --git a/src/main/resources/cashMapper/CashRefundMapper.xml b/src/main/resources/cashMapper/CashRefundMapper.xml index ab6d627..8887167 100644 --- a/src/main/resources/cashMapper/CashRefundMapper.xml +++ b/src/main/resources/cashMapper/CashRefundMapper.xml @@ -2,72 +2,56 @@ - INSERT INTO cash_record ( - order_type, - jwcode, - name, - market, - activity, - order_code, - bank_code, - goods_name, - good_num, - audit_id, - payment_currency, - payment_amount, - received_currency, - received_amount, - handling_charge, - received_market, - pay_type, - pay_time, - received_time, - status, - submitter_id, - voucher, - remark, - refund_reason, - refund_model, - executor, - refund_channels, - refund_time, - refund_remark, - refund_voucher, - permanent_gold, - free_gold + INSERT INTO cash_record_refund ( + jwcode, + name, + market, + order_code, + bank_code, + permanent_gold, + free_gold, + submitter_id, + submitter_market, + voucher, + remark, + reject_reason, + refund_reason, + refund_model, + executor, + refund_channels, + refund_time, + refund_remark, + refund_voucher, + refund_currency, + refund_amount, + related_id, + audit_id, + status ) VALUES ( - #{orderType}, - #{jwcode}, - #{name}, - #{market}, - #{activity}, - #{orderCode}, - #{bankCode}, - #{goodsName}, - #{goodNum}, - #{auditId}, - #{paymentCurrency}, - #{paymentAmount}, - #{receivedCurrency}, - #{receivedAmount}, - #{handlingCharge}, - #{receivedMarket}, - #{payType}, - #{payTime}, - #{receivedTime}, - #{status}, - #{submitterId}, - #{voucher}, - #{remark}, - #{refundReason}, - #{refundModel}, - #{executor}, - #{refundChannels}, - #{refundTime}, - #{refundRemark}, - #{refundVoucher}, - #{permanentGold}, - #{freeGold} + #{jwcode}, + #{name}, + #{market}, + #{orderCode}, + #{bankCode}, + #{partRefundGold}, + #{partRefundFree}, + #{submitterId}, + #{submitterMarket}, + #{voucher}, + #{remark}, + #{rejectReason}, + #{refundReason}, + #{refundModel}, + #{executor}, + #{refundChannels}, + #{refundTime}, + #{refundRemark}, + #{refundVoucher}, + #{refundCurrency}, + #{refundAmount}, + #{id}, + #{auditId}, + #{status} ); @@ -89,7 +73,7 @@ - update cash_record + update cash_record_refund set status = 10, refund_model = #{refundModel}, @@ -97,15 +81,15 @@ where id = #{id} - update cash_record set status = 11 - where order_type =2 and id = #{id} + update cash_record_refund set status = 11 + where id = #{id} - update cash_record set status = #{status},executor = #{executor},reject_reason = #{rejectReason} - where order_type =2 and id = #{id} + update cash_record_refund set status = #{status},executor = #{executor},reject_reason = #{rejectReason} + where id = #{id} - update cash_record set refund_currency = #{refundCurrency}, + update cash_record_refund set refund_currency = #{refundCurrency}, refund_amount = #{refundAmount}, refund_channels = #{refundChannels}, refund_time = #{refundTime}, @@ -113,10 +97,10 @@ refund_voucher = #{refundVoucher}, status = #{status}, executor = #{executor} - where order_type =2 and id = #{id} + where id = #{id} - update cash_record + update cash_record_collection set status = #{status} @@ -147,118 +131,241 @@ - + select + crr.id, + crr.jwcode, + crr.name, + crr.market, + crr.permanent_gold, + crr.free_gold, + crr.audit_id, + crr.status, + crr.submitter_id, + crr.submitter_market, + crr.executor, + crr.refund_channels, + crr.refund_time, + crr.create_time, + crr.update_time, + crr.audit_time, + crr.related_id, + la.area_servise, + la.area_finance, + la.area_charge, + la.head_finance, + crc.activity, + crc.goods_name, + crc.good_num as goodsNum, + crc.num_unit, + crc.pay_type, + crc.pay_time, + crc.voucher, + crc.remark, + crc.payment_currency, + crc.payment_amount + from cash_record_refund crr + left join lhl_audit la on la.id = crr.audit_id + left join cash_record_collection crc on crc.id = crr.related_id - cr.order_type = 2 - and cr.status = #{status} + and crr.status = #{status} - - and cr.order_code = #{orderCode} - - and cr.name = #{name} + and crr.name = #{name} - and cr.jwcode = #{jwcode} + and crr.jwcode = #{jwcode} - AND cr.market IN + AND crr.market IN #{markets} - AND cr.status IN + AND crr.status IN #{statuses} - AND cr.payment_currency LIKE CONCAT('%', #{paymentCurrency}, '%') + AND crc.payment_currency LIKE CONCAT('%', #{paymentCurrency}, '%') - AND cr.goods_name IN + AND crc.goods_name IN #{goodsNames} - and cr.pay_type = #{payType} - - - and cr.received_market = #{receivedMarket} - - - and cr.refundModel = #{refundModel} + and crc.pay_type = #{payType} - and cr.`pay_time` BETWEEN #{startTime} AND #{endTime} + and crc.`pay_time` BETWEEN #{startTime} AND #{endTime} - and cr.submitter_id = #{submitterId} + and crr.submitter_id = #{submitterId} - - and cr.refund_currency = #{refundCurrency} - - - and cr.refund_channels = #{refundChannels} - - - and cr.`refund_time` BETWEEN #{sTime} AND #{eTime} + + + + ORDER BY ${sortField} ${sortOrder} + + + ORDER BY crr.create_time DESC + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/jindouMapper/BeanConsumeMapper.xml b/src/main/resources/jindouMapper/BeanConsumeMapper.xml index 6130efb..8bb547e 100644 --- a/src/main/resources/jindouMapper/BeanConsumeMapper.xml +++ b/src/main/resources/jindouMapper/BeanConsumeMapper.xml @@ -142,6 +142,9 @@ AND fm.jwcode = #{beanConsumeFan.jwcode} + + AND fm.employee = 0 + AND fm.dept = #{beanConsumeFan.dept} @@ -182,6 +185,9 @@ AND fm.jwcode = #{beanConsumeFan.jwcode} + + AND fm.employee = 0 + AND fm.dept = #{beanConsumeFan.dept} @@ -222,6 +228,9 @@ AND fm.jwcode = #{beanConsumeArticle.jwcode} + + AND fm.employee = 0 + AND fm.dept = #{beanConsumeArticle.dept} @@ -283,6 +292,9 @@ AND fm.jwcode = #{beanConsumeArticle.jwcode} + + AND fm.employee = 0 + AND fm.dept = #{beanConsumeArticle.dept} diff --git a/src/main/resources/jindouMapper/BeanUser.xml b/src/main/resources/jindouMapper/BeanUser.xml index 6d3ceeb..ae5785b 100644 --- a/src/main/resources/jindouMapper/BeanUser.xml +++ b/src/main/resources/jindouMapper/BeanUser.xml @@ -33,13 +33,16 @@ FROM fx_member fm INNER JOIN fx_yaoqing fy ON fy.uid = fm.id + 1=1 AND fm.jwcode = #{beanUser.jwcode} + + AND fm.employee = 0 + AND fm.dept = #{beanUser.dept} - @@ -72,6 +75,9 @@ AND fm.jwcode = #{beanUser.jwcode} + + AND fm.employee = 0 + AND fm.dept = #{beanUser.dept} diff --git a/src/main/resources/liveMapper/LiveMapper.xml b/src/main/resources/liveMapper/LiveMapper.xml index eafd297..69589b0 100644 --- a/src/main/resources/liveMapper/LiveMapper.xml +++ b/src/main/resources/liveMapper/LiveMapper.xml @@ -22,9 +22,13 @@ LEFT JOIN live_pindao lp ON lp.pd_id = l.channel_id LEFT JOIN member_info mi ON mi.jwcode = lgg.jwcode + 1=1 AND lgg.jwcode = #{beanConsumeLive.jwcode} + /*是否看员工数据,live表1是员工,0是非员工,与金币表相反*/ + AND mi.employee = 0 + AND mi.deptName = #{beanConsumeLive.dept} @@ -59,6 +63,13 @@ + - select * from user_gold_record - where order_code = #{orderCode} and audit_status = 0 - and flag=1 - ORDER BY create_time DESC - limit 1 - - - - - - - - + + + + + update user set first_recharge = now() where jwcode = #{jwcode} and first_recharge is null + + \ No newline at end of file diff --git a/src/main/resources/mapper/BeanAuditMapper.xml b/src/main/resources/mapper/BeanAuditMapper.xml index 9d39d35..3756014 100644 --- a/src/main/resources/mapper/BeanAuditMapper.xml +++ b/src/main/resources/mapper/BeanAuditMapper.xml @@ -20,6 +20,9 @@ LEFT JOIN market m ON u.market = m.id a.audit_status = #{status} + + AND u.flag = #{flag} + AND a.jwcode = #{jwcode} diff --git a/src/main/resources/mapper/MarketMapper.xml b/src/main/resources/mapper/MarketMapper.xml index 734f78a..496fe44 100644 --- a/src/main/resources/mapper/MarketMapper.xml +++ b/src/main/resources/mapper/MarketMapper.xml @@ -35,4 +35,13 @@ + + \ No newline at end of file diff --git a/src/main/resources/mapper/RechargeActivityCenterMapper.xml b/src/main/resources/mapper/RechargeActivityCenterMapper.xml new file mode 100644 index 0000000..06f23d3 --- /dev/null +++ b/src/main/resources/mapper/RechargeActivityCenterMapper.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + INSERT INTO recharge_activity ( + activity_name, + business_belong, + area, + start_time, + end_time, + status, + creator, + create_time + ) VALUES ( + #{activityName}, + #{businessBelong}, + #{area}, + #{startTime}, + #{endTime}, + #{status}, + #{creator}, + NOW() + ) + + + + + UPDATE recharge_activity + + activity_name = #{activityName}, + business_belong = #{businessBelong}, + area = #{area}, + start_time = #{startTime}, + end_time = #{endTime}, + status = #{status}, + creator = #{creator}, + update_time = NOW() + + WHERE id = #{id} + + + + + + UPDATE recharge_activity + + flag = 0, + update_time = NOW() + + WHERE id = #{id} + + + \ No newline at end of file diff --git a/src/main/resources/mapper/RoleMapper.xml b/src/main/resources/mapper/RoleMapper.xml index ec1ddda..019044e 100644 --- a/src/main/resources/mapper/RoleMapper.xml +++ b/src/main/resources/mapper/RoleMapper.xml @@ -7,7 +7,12 @@ role_name = #{roleName}, - + + market = #{market}, + + + channel = #{channel}, + father_id = #{fatherId}, @@ -32,7 +37,7 @@