Browse Source

Merge remote-tracking branch 'origin/milestone-20251104-现金管理二期' into milestone-20251104-现金管理二期

# Conflicts:
#	src/main/java/com/example/demo/serviceImpl/cash/CashAuditServiceImpl.java
#	src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
#	src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
sunjiabei/feature-20251021102635-银行接口
wangguorui 2 weeks ago
parent
commit
69e4ae3d92
  1. 4
      src/main/java/com/example/demo/Export/ExportService.java
  2. 44
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  3. 9
      src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java
  4. 21
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  5. 82
      src/main/java/com/example/demo/controller/cash/CashRefundController.java
  6. 38
      src/main/java/com/example/demo/controller/coin/ExportController.java
  7. 17
      src/main/java/com/example/demo/controller/coin/RoleController.java
  8. 39
      src/main/java/com/example/demo/domain/DTO/CashDTO.java
  9. 36
      src/main/java/com/example/demo/domain/DTO/FinanceDTO.java
  10. 2
      src/main/java/com/example/demo/domain/vo/cash/CashCollection.java
  11. 245
      src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java
  12. 10
      src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java
  13. 24
      src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java
  14. 13
      src/main/java/com/example/demo/domain/vo/coin/IdName.java
  15. 1
      src/main/java/com/example/demo/domain/vo/coin/RoleVo.java
  16. 3
      src/main/java/com/example/demo/mapper/cash/CashAuditMapper.java
  17. 8
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  18. 12
      src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
  19. 5
      src/main/java/com/example/demo/mapper/coin/AuditMapper.java
  20. 5
      src/main/java/com/example/demo/mapper/coin/MarketMapper.java
  21. 2
      src/main/java/com/example/demo/mapper/live/LiveMapper.java
  22. 2
      src/main/java/com/example/demo/security/SecurityConfig.java
  23. 4
      src/main/java/com/example/demo/service/cash/CashCollectionService.java
  24. 4
      src/main/java/com/example/demo/service/cash/RefundService.java
  25. 4
      src/main/java/com/example/demo/service/coin/ExportExcelService.java
  26. 2
      src/main/java/com/example/demo/service/coin/RoleService.java
  27. 36
      src/main/java/com/example/demo/service/listen/CashListener.java
  28. 36
      src/main/java/com/example/demo/service/listen/FinanceListener.java
  29. 6
      src/main/java/com/example/demo/serviceImpl/coin/AdminServiceImpl.java
  30. 48
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  31. 16
      src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java
  32. 4
      src/main/resources/cashMapper/CashAuditMapper.xml
  33. 123
      src/main/resources/cashMapper/CashCollectionMapper.xml
  34. 141
      src/main/resources/cashMapper/CashRefundMapper.xml
  35. 7
      src/main/resources/liveMapper/LiveMapper.xml
  36. 74
      src/main/resources/mapper/AuditMapper.xml
  37. 14
      src/main/resources/mapper/MarketMapper.xml
  38. 16
      src/main/resources/mapper/RoleMapper.xml

4
src/main/java/com/example/demo/Export/ExportService.java

@ -28,4 +28,8 @@ public interface ExportService {
Result addExportBean(BeanRechargeDTO dto); Result addExportBean(BeanRechargeDTO dto);
Result addExportOnline(OnlineDTO dto); Result addExportOnline(OnlineDTO dto);
//现金负责人退款导出
Result addExportFinance(FinanceDTO dto);
Result addExportCash(CashDTO dto);
} }

44
src/main/java/com/example/demo/Export/ExportServiceImpl.java

@ -124,6 +124,16 @@ public class ExportServiceImpl implements ExportService {
articleDTO.setUrl(""); articleDTO.setUrl("");
articleDTO.setFileName(generateFileName("文章明细", adminName)); articleDTO.setFileName(generateFileName("文章明细", adminName));
articleDTO.setDataNum(0); 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.getFileName(),
onlineDTO.getDataNum() 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()); requestData.put(requestDataKey, beanRechargeDTO.getBeanSystemRechargeInfo());
} else if (dto instanceof OnlineDTO onlineDTO){ } else if (dto instanceof OnlineDTO onlineDTO){
requestData.put(requestDataKey, onlineDTO.getBeanOnlineRechargeInfo()); 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); exportData.put("requestData", requestData);
@ -294,4 +328,14 @@ public class ExportServiceImpl implements ExportService {
public Result addExportOnline(OnlineDTO dto) { public Result addExportOnline(OnlineDTO dto) {
return addExport(dto, "在线明细", "online:queue:export_queue", "beanOnlineRechargeInfo"); 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");
}
} }

9
src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java

@ -26,6 +26,7 @@ import java.time.LocalDateTime;
import java.time.Month; import java.time.Month;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.Date;
@Service @Service
@ -64,7 +65,7 @@ public class MysqlServiceImpl implements MysqlService {
@Override @Override
@Transactional(transactionManager = "mysqlTransactionManager") // 👈 保证插入和用户更新在一个事务
@Transactional(transactionManager = "mysqlTransactionManager",rollbackFor = Exception.class) // 👈 保证插入和用户更新在一个事务
public void getSqlserverData() throws Exception { public void getSqlserverData() throws Exception {
logger.info("开始从 SQL Server 同步数据到 MySQL"); logger.info("开始从 SQL Server 同步数据到 MySQL");
@ -357,7 +358,7 @@ public class MysqlServiceImpl implements MysqlService {
if (validZeroTypes.contains(data.gtype)) { if (validZeroTypes.contains(data.gtype)) {
stmt.setInt(13, 0); stmt.setInt(13, 0);
stmt.setNull(20, 0);
stmt.setInt(20, 0);
stmt.setString(1, "ERPCZ_" + data.orderNumber); stmt.setString(1, "ERPCZ_" + data.orderNumber);
} else if (validOneTypes.contains(data.gtype)) { } else if (validOneTypes.contains(data.gtype)) {
stmt.setInt(13, 1); stmt.setInt(13, 1);
@ -415,8 +416,8 @@ public class MysqlServiceImpl implements MysqlService {
} else { } else {
stmt.setInt(17, 1); stmt.setInt(17, 1);
} }
stmt.setTimestamp(18, data.cz_time);
Timestamp now = new Timestamp(System.currentTimeMillis());
stmt.setTimestamp(18, now);
stmt.setTimestamp(19, data.cz_time); stmt.setTimestamp(19, data.cz_time);
stmt.setString(21, data.uid); stmt.setString(21, data.uid);
} }

21
src/main/java/com/example/demo/controller/cash/CashCollectionController.java

@ -68,7 +68,7 @@ public class CashCollectionController {
} }
//撤回未审核的收款订单 //撤回未审核的收款订单
@PostMapping("/cancel") @PostMapping("/cancel")
public Result cancel(@RequestBody CashRecord cashRecord) {
public Result cancel(@RequestBody CashCollection cashRecord) {
try { try {
return Result.success( cashCollectionService.cancel(cashRecord.getOrderCode())); return Result.success( cashCollectionService.cancel(cashRecord.getOrderCode()));
@ -78,7 +78,7 @@ public class CashCollectionController {
} }
//重新提交审核的收款订单 //重新提交审核的收款订单
@PostMapping("/reSubmit") @PostMapping("/reSubmit")
public Result reSubmit(@RequestBody CashRecord cashRecord) {
public Result reSubmit(@RequestBody CashCollection cashRecord) {
try { try {
return Result.success(cashCollectionService.reSubmit(cashRecord)); return Result.success(cashCollectionService.reSubmit(cashRecord));
}catch (Exception e){ }catch (Exception e){
@ -111,9 +111,24 @@ public class CashCollectionController {
return Result.error(e.getMessage()); return Result.error(e.getMessage());
}} }}
@PostMapping("/export")
public Result export(@RequestBody Page page) throws Exception {
try {
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
}
return Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(),page.getCashCollection()));
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
//补全手续费等 //补全手续费等
@PostMapping("/complete") @PostMapping("/complete")
public Result complete(@RequestBody CashRecord cashRecord) {
public Result complete(@RequestBody CashCollection cashRecord) {
try { try {
return Result.success(cashCollectionService.complete(cashRecord)); return Result.success(cashCollectionService.complete(cashRecord));
}catch (Exception e){ }catch (Exception e){

82
src/main/java/com/example/demo/controller/cash/CashRefundController.java

@ -3,6 +3,7 @@ package com.example.demo.controller.cash;
import com.example.demo.Util.JWTUtil; import com.example.demo.Util.JWTUtil;
import com.example.demo.domain.entity.Admin; 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.CashRecordDone;
import com.example.demo.domain.vo.cash.CashRecordRefund; import com.example.demo.domain.vo.cash.CashRecordRefund;
import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.Page;
@ -44,6 +45,8 @@ public class CashRefundController {
private RefundService refundService; private RefundService refundService;
@Autowired @Autowired
MarketService marketService; MarketService marketService;
/** /**
* 当地财务负责人退款记录 * 当地财务负责人退款记录
*/ */
@ -67,20 +70,20 @@ public class CashRefundController {
} }
// 获取传入的市场列表 // 获取传入的市场列表
List<String> requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null;
List<String> requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null;
// 权限校验逻辑 // 权限校验逻辑
if (markets.contains("9") || markets.contains("9999")) { if (markets.contains("9") || markets.contains("9999")) {
// 特权市场9 9999跳过权限校验直接放行传入的 markets // 特权市场9 9999跳过权限校验直接放行传入的 markets
// 如果业务需要也可以在这里做空值处理 // 如果业务需要也可以在这里做空值处理
if (page.getCashRecordDone() != null) {
if (page.getCashRecordDTO() != null) {
// 保持 requestedMarkets 不变原样接受 // 保持 requestedMarkets 不变原样接受
// 可选如果 requestedMarkets null可设为默认值或保持 null // 可选如果 requestedMarkets null可设为默认值或保持 null
} }
} else { } else {
// 普通用户必须校验权限 // 普通用户必须校验权限
if (requestedMarkets == null || requestedMarkets.isEmpty()) { if (requestedMarkets == null || requestedMarkets.isEmpty()) {
page.getCashRecordDone().setMarkets(markets);
page.getCashRecordDTO().setMarkets(markets);
} }
if (!markets.containsAll(requestedMarkets)) { if (!markets.containsAll(requestedMarkets)) {
return Result.error("无权限!请求的市场不在授权范围内。"); return Result.error("无权限!请求的市场不在授权范围内。");
@ -102,6 +105,50 @@ public class CashRefundController {
} }
} }
/** /**
* 执行人查看退款现金记录
*/
@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<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
List<String> markets = marketService.getMarketIds(userMarkets);
// 校验分页参数
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
}
// 获取传入的市场列表
List<String> 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") @PostMapping("/selecta")
@ -161,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("测试消息");
}
} }

38
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.DTO.*;
import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.Export; 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.domain.vo.coin.Result;
import com.example.demo.service.coin.ExportExcelService; import com.example.demo.service.coin.ExportExcelService;
import com.example.demo.service.coin.GoldDetailService; import com.example.demo.service.coin.GoldDetailService;
@ -195,4 +196,41 @@ public class ExportController {
redisLockUtil.unlock(lockKey, requestId); 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);
}
}
} }

17
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<RoleVo> list=roleService.selectSubRole(id);
return Result.success(list);
}
} }

39
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: 202511-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;
}

36
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: 202511-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;
}

2
src/main/java/com/example/demo/domain/vo/cash/CashCollection.java

@ -61,7 +61,7 @@ public class CashCollection implements Serializable {
private String remark; // 备注 private String remark; // 备注
private String receivedRemark; //到账备注 private String receivedRemark; //到账备注
private String rejectReason; // 驳回理由 private String rejectReason; // 驳回理由
private String auditId; //审核人id
private Integer auditId; //审核人id
private String auditName; //审核人id private String auditName; //审核人id
private Integer cashRoleId; //角色id(0客服1地区财务/负责人2总部) private Integer cashRoleId; //角色id(0客服1地区财务/负责人2总部)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")

245
src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java

@ -1,9 +1,14 @@
package com.example.demo.domain.vo.cash; package com.example.demo.domain.vo.cash;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -16,24 +21,228 @@ import java.util.List;
**/ **/
@Data @Data
@AllArgsConstructor @AllArgsConstructor
public class CashRecordDTO extends CashRecordRefund{
private Integer activity;
private String goodsName;
private Integer goodsNum;
private String numUnit;
private BigDecimal gold;
private BigDecimal free;
private String paymentCurrency;
private BigDecimal paymentAmount;
private String receiveCurrency;
private BigDecimal receiveAmount;
private BigDecimal handlingCharges;
private String payType;
private String receivedMarket;
private String payVoucher;
private String payRemark;
private List<String> goodsNames;
private List<String> markets;
@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<String> goodsNames;// 商品名称
@ExcelIgnore
private List<String> 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手动撤回待编辑提交
3link线上财务复核待填手续费
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<Integer> 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; // 结束时间
} }

10
src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java

@ -17,7 +17,6 @@ import lombok.NoArgsConstructor;
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor
public class CashRecordRefund { public class CashRecordRefund {
/** /**
* 序号 * 序号
@ -32,6 +31,7 @@ public class CashRecordRefund {
/** /**
* 姓名 * 姓名
*/ */
private String userName;
private String name; private String name;
/** /**
@ -126,6 +126,7 @@ public class CashRecordRefund {
/** /**
* 退款日期到天 * 退款日期到天
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date refundTime; private Date refundTime;
/** /**
@ -141,16 +142,19 @@ public class CashRecordRefund {
/** /**
* 创建时间 * 创建时间
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; private Date createTime;
/** /**
* 更新时间 * 更新时间
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime; private Date updateTime;
/** /**
* 审核时间 * 审核时间
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditTime; private Date auditTime;
/** /**
@ -188,10 +192,12 @@ public class CashRecordRefund {
private String headFinance; private String headFinance;
private String sortField; private String sortField;
private String sortOrder; private String sortOrder;
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date sTime; // 开始时间 private Date sTime; // 开始时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date eTime; // 结束时间 private Date eTime; // 结束时间
private Integer partRefundGold;
private Integer partRefundFree;
} }

24
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: 202511-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;
}

13
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;
}

1
src/main/java/com/example/demo/domain/vo/coin/RoleVo.java

@ -34,6 +34,7 @@ public class RoleVo implements Serializable {
private String fatherMarket;//父级角色市场 private String fatherMarket;//父级角色市场
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; // 创建时间 private Date createTime; // 创建时间
private String channel;//所属渠道
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime; // 更新时间 private Date updateTime; // 更新时间

3
src/main/java/com/example/demo/mapper/cash/CashAuditMapper.java

@ -1,6 +1,7 @@
package com.example.demo.mapper.cash; package com.example.demo.mapper.cash;
import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.vo.cash.CashCollection;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -15,7 +16,7 @@ import org.apache.ibatis.annotations.Param;
@Mapper @Mapper
public interface CashAuditMapper { public interface CashAuditMapper {
//审核收款订单 //审核收款订单
void updateOrder (CashRecord updateOrder);
void updateOrder (CashCollection updateOrder);
//根据id获取审核人姓名 //根据id获取审核人姓名
String getAuditName(Integer auditId); String getAuditName(Integer auditId);
} }

8
src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java

@ -1,5 +1,6 @@
package com.example.demo.mapper.cash; 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.CashRecord;
import com.example.demo.domain.entity.GOrder; import com.example.demo.domain.entity.GOrder;
import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.entity.RechargeActivity;
@ -9,6 +10,7 @@ import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @program: gold-java * @program: gold-java
@ -32,7 +34,7 @@ public interface CashCollectionMapper {
@Param("status") Integer status); @Param("status") Integer status);
//编辑订单 //编辑订单
// 编辑订单状态=5后重新提交 // 编辑订单状态=5后重新提交
int updateByOrderCode(@Param("cashRecord") CashRecord cashRecord);
int updateByOrderCode(@Param("cashRecordCollection") CashCollection cashRecord);
//多条件查询收款订单列表 //多条件查询收款订单列表
List<CashCollection> selectCollection1(@Param("pageNum") Integer pageNum, List<CashCollection> selectCollection1(@Param("pageNum") Integer pageNum,
@Param("pageSize") Integer pageSize, @Param("pageSize") Integer pageSize,
@ -41,7 +43,7 @@ public interface CashCollectionMapper {
//根据订单号查询待审核的现金收款订单 //根据订单号查询待审核的现金收款订单
CashRecord selectAuditByOrderCode(@Param("orderCode") String orderCode); CashRecord selectAuditByOrderCode(@Param("orderCode") String orderCode);
//补全手续费等信息 //补全手续费等信息
int complete(@Param("cashRecord") CashRecord cashRecord);
int complete(@Param("cashRecordCollection") CashCollection cashRecord);
//根据精网号获取姓名 //根据精网号获取姓名
String getNameByJwcode(@Param("jwcode") Integer jwcode); String getNameByJwcode(@Param("jwcode") Integer jwcode);
//根据精网号获取市场名 //根据精网号获取市场名
@ -54,4 +56,6 @@ public interface CashCollectionMapper {
int markSynced(@Param("orderId") Integer orderId); int markSynced(@Param("orderId") Integer orderId);
//根据id查询收款订单 //根据id查询收款订单
CashCollection selectById(Integer id); CashCollection selectById(Integer id);
List<CashCollection> selectBatchIds(Set<Integer> relatedIds);
} }

12
src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java

@ -1,13 +1,12 @@
package com.example.demo.mapper.cash; package com.example.demo.mapper.cash;
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 com.example.demo.domain.vo.cash.CashRecordRefund;
import cn.hutool.core.lang.Opt;
import com.example.demo.domain.vo.cash.*;
import com.example.demo.domain.vo.coin.RefundUser; import com.example.demo.domain.vo.coin.RefundUser;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @program: GOLD * @program: GOLD
@ -32,4 +31,9 @@ public interface CashRefundMapper {
void addAudit(CashRecordDone cashRecordDone); void addAudit(CashRecordDone cashRecordDone);
void updateAudit(CashRecordDone cashRecordDone); void updateAudit(CashRecordDone cashRecordDone);
List<CashRecordDTO> financeSelect(CashRecordDTO cashRecordDTO); List<CashRecordDTO> financeSelect(CashRecordDTO cashRecordDTO);
//获取各阶段审核人
LhlAudit getAudit(Integer id);
List<CashRecordDTO> exSelect(CashRecordDTO cashRecordDTO);
List<LhlAudit> getAuditBatch(Set<Integer> auditIds);
} }

5
src/main/java/com/example/demo/mapper/coin/AuditMapper.java

@ -1,5 +1,7 @@
package com.example.demo.mapper.coin; 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.User;
import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.vo.coin.RechargeAudit; 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.Date;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @program: gold-java * @program: gold-java
@ -46,4 +49,6 @@ public interface AuditMapper {
String getName(Integer auditId); String getName(Integer auditId);
//更新首充日期 //更新首充日期
void updateFirstRecharge(Integer jwcode); void updateFirstRecharge(Integer jwcode);
List<Admin> getNamesByIds(Set<Integer> submitterIds);
} }

5
src/main/java/com/example/demo/mapper/coin/MarketMapper.java

@ -1,8 +1,11 @@
package com.example.demo.mapper.coin; package com.example.demo.mapper.coin;
import cn.hutool.core.lang.Opt;
import com.example.demo.domain.entity.Market; import com.example.demo.domain.entity.Market;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Set;
public interface MarketMapper { public interface MarketMapper {
List<Market> getMarket(); List<Market> getMarket();
@ -14,4 +17,6 @@ public interface MarketMapper {
Market getMarketIdDao(String country); Market getMarketIdDao(String country);
Market getMarketIdBytype(String market); Market getMarketIdBytype(String market);
String getMarketById(String market);
List<Market> getMarketByIds(@Param("marketIds") Set<Integer> marketIds);
} }

2
src/main/java/com/example/demo/mapper/live/LiveMapper.java

@ -21,6 +21,8 @@ public interface LiveMapper {
List<BeanConsumeLive> selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive); List<BeanConsumeLive> selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
//获取直播礼物列表 //获取直播礼物列表
List<String> getLiveGift(); List<String> getLiveGift();
//获取频道列表
List<String> getChannel();
//获取直播频道列表 //获取直播频道列表
List<String> getLiveChannel(); List<String> getLiveChannel();
//计算直播消费金豆合计数 //计算直播消费金豆合计数

2
src/main/java/com/example/demo/security/SecurityConfig.java

@ -60,7 +60,7 @@ public class SecurityConfig {
request request
.requestMatchers( HttpMethod.POST, .requestMatchers( HttpMethod.POST,
// 用户不登录就可以访问的路径 // 用户不登录就可以访问的路径
"/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**","/statistics/**","/Mysql").permitAll()
"/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**","/statistics/**","/Mysql/**").permitAll()
.requestMatchers( .requestMatchers(
"/error","alipay/**","/upload/**","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**" "/error","alipay/**","/upload/**","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**"
).permitAll() ).permitAll()

4
src/main/java/com/example/demo/service/cash/CashCollectionService.java

@ -24,11 +24,11 @@ public interface CashCollectionService {
//撤回未审核的收款订单 //撤回未审核的收款订单
String cancel(String orderCode); String cancel(String orderCode);
//编辑并重新提交收款订单 //编辑并重新提交收款订单
String reSubmit(CashRecord cashRecord);
String reSubmit(CashCollection cashRecord);
//多条件查询收款订单列表 //多条件查询收款订单列表
PageInfo<CashCollection> selectCollection(Integer pageNum, Integer pageSize, CashCollection cashCollection); PageInfo<CashCollection> selectCollection(Integer pageNum, Integer pageSize, CashCollection cashCollection);
//补全手续费等 //补全手续费等
String complete(CashRecord cashRecord);
String complete(CashCollection cashRecord);
//根据精网号获取姓名和地区 //根据精网号获取姓名和地区
User getNameAndMarket(Integer jwcode); User getNameAndMarket(Integer jwcode);
//获取活动列表 //获取活动列表

4
src/main/java/com/example/demo/service/cash/RefundService.java

@ -32,4 +32,8 @@ public interface RefundService {
int finalreview(CashRecordDone cashRecordDone); int finalreview(CashRecordDone cashRecordDone);
PageInfo<CashRecordDTO> financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); PageInfo<CashRecordDTO> financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
PageInfo<CashRecordDTO> exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
//新增线上退款记录
void addOnline(CashRecordRefund cashRecordRefund);
} }

4
src/main/java/com/example/demo/service/coin/ExportExcelService.java

@ -34,4 +34,8 @@ public interface ExportExcelService {
Exception OnlineExcel(String message) throws Exception; Exception OnlineExcel(String message) throws Exception;
//负责人退款导出
Exception FinanceExcel(String message) throws Exception;
Exception CashExcel(String message) throws Exception;
} }

2
src/main/java/com/example/demo/service/coin/RoleService.java

@ -19,6 +19,8 @@ import java.util.List;
public interface RoleService { public interface RoleService {
//查询频道
List<String> getChannel();
//新增角色 //新增角色
Result addRole(RoleVo roleVo); Result addRole(RoleVo roleVo);
//新增角色二期替补 //新增角色二期替补

36
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: 202511-09 09:42
* @Version 1.0
**/
@Component
public class CashListener extends BaseMessageListener<String> {
@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);
}
}
}

36
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: 202511-06 21:35
* @Version 1.0
**/
@Component
public class FinanceListener extends BaseMessageListener<String>{
@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);
}
}
}

6
src/main/java/com/example/demo/serviceImpl/coin/AdminServiceImpl.java

@ -94,7 +94,6 @@ public class AdminServiceImpl implements AdminService {
//更新密码 //更新密码
@Override @Override
public Result updatePassword(Password password) { public Result updatePassword(Password password) {
String oldPassword = password.getOldPassword(); String oldPassword = password.getOldPassword();
String newPassword = password.getNewPassword(); String newPassword = password.getNewPassword();
String againPassword = password.getAgainPassword(); String againPassword = password.getAgainPassword();
@ -129,15 +128,15 @@ public class AdminServiceImpl implements AdminService {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// 使用Spring管理的密码编码器不要手动new // 使用Spring管理的密码编码器不要手动new
String encodedPassword = passwordEncoder.encode(newPassword); String encodedPassword = passwordEncoder.encode(newPassword);
// 更新数据库中的密码 // 更新数据库中的密码
admin.setPassword(encodedPassword); admin.setPassword(encodedPassword);
admin.setUpdateTime(new Date()); // 更新修改时间 admin.setUpdateTime(new Date()); // 更新修改时间
adminMapper.updatePassword(admin); adminMapper.updatePassword(admin);
return Result.success("密码修改成功"); return Result.success("密码修改成功");
} catch (BadCredentialsException e) { } catch (BadCredentialsException e) {
// 旧密码验证失败 // 旧密码验证失败
return Result.error("原密码错误,请重新输入"); return Result.error("原密码错误,请重新输入");
@ -182,6 +181,7 @@ public class AdminServiceImpl implements AdminService {
} }
//获取当前登录的管理员账号
public String getCurrentAdminAccount() { public String getCurrentAdminAccount() {
// 1. Security 上下文获取认证信息 // 1. Security 上下文获取认证信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

48
src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

@ -8,6 +8,8 @@ import com.example.demo.Util.ExcelUploadUtil;
import com.example.demo.Util.JWTUtil; import com.example.demo.Util.JWTUtil;
import com.example.demo.controller.bean.BeanConsumeController; import com.example.demo.controller.bean.BeanConsumeController;
import com.example.demo.controller.bean.BeanRechargeController; import com.example.demo.controller.bean.BeanRechargeController;
import com.example.demo.controller.cash.CashCollectionController;
import com.example.demo.controller.cash.CashRefundController;
import com.example.demo.controller.coin.ConsumeController; import com.example.demo.controller.coin.ConsumeController;
import com.example.demo.controller.coin.GoldDetailController; import com.example.demo.controller.coin.GoldDetailController;
import com.example.demo.controller.coin.RechargeController; import com.example.demo.controller.coin.RechargeController;
@ -18,10 +20,15 @@ import com.example.demo.domain.entity.User;
import com.example.demo.domain.export.Goldmingxi; import com.example.demo.domain.export.Goldmingxi;
import com.example.demo.domain.vo.bean.*; 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.domain.vo.coin.*;
import com.example.demo.mapper.cash.CashRefundMapper;
import com.example.demo.mapper.coin.ExportMapper; 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.service.coin.ExportExcelService;
import com.example.demo.serviceImpl.cash.CashRefundServiceImpl;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@ -32,6 +39,7 @@ import com.example.demo.service.coin.AiEmotionService;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.Finance;
import org.apache.xmlbeans.impl.xb.xsdschema.Attribute; import org.apache.xmlbeans.impl.xb.xsdschema.Attribute;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -76,6 +84,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
private BeanRechargeController beanRechargeController; private BeanRechargeController beanRechargeController;
@Autowired @Autowired
private AuthenticationManager authenticationManager; private AuthenticationManager authenticationManager;
@Autowired
private CashRefundController cashRefundController;
@Autowired
private CashCollectionController cashCollectionController;
// 每页查询的数据量 // 每页查询的数据量
private static final int PAGE_SIZE = 5000; private static final int PAGE_SIZE = 5000;
@Autowired @Autowired
@ -261,6 +273,38 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
@Override @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 cashCollectionController.export(page);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@Override
public List<Export> getExcel(Export export) { public List<Export> getExcel(Export export) {
List<Export> list = exportMapper.getExportRecord(export.getAccount(),export.getType()); List<Export> list = exportMapper.getExportRecord(export.getAccount(),export.getType());
System.out.println(list+"-------------------------------"); System.out.println(list+"-------------------------------");
@ -497,6 +541,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
return BeanSystemRechargeInfo.class; return BeanSystemRechargeInfo.class;
case "onlineUser": case "onlineUser":
return BeanOnlineRechargeInfo.class; return BeanOnlineRechargeInfo.class;
case "financeUser":
return CashRecordDTO.class;
case "cashUser":
return CashCollection.class;
default: default:
throw new IllegalArgumentException("不支持的导出类型: " + exportType); throw new IllegalArgumentException("不支持的导出类型: " + exportType);
} }

16
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.domain.vo.coin.RoleVo;
import com.example.demo.mapper.coin.MenuMapper; import com.example.demo.mapper.coin.MenuMapper;
import com.example.demo.mapper.coin.RoleMapper; 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.MenuService;
import com.example.demo.service.coin.RoleService; import com.example.demo.service.coin.RoleService;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
@ -40,6 +41,16 @@ public class RoleServiceImpl implements RoleService {
private MenuService menuService; private MenuService menuService;
@Autowired @Autowired
private MenuMapper menuMapper; private MenuMapper menuMapper;
@Autowired
private LiveMapper liveMapper;
//查询直播礼物
@Override
public List<String> getChannel() {
return liveMapper.getChannel();
}
//新增角色 //新增角色
@Override @Override
@ -62,9 +73,8 @@ public class RoleServiceImpl implements RoleService {
if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) { if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) {
return Result.error("权限为空"); return Result.error("权限为空");
} }
if (roleVo.getMarket() == null || roleVo.getMarket().isEmpty()) {
return Result.error("所属市场为空");
}
if (roleVo.getFatherId() == null || roleVo.getFatherId() != 2) { if (roleVo.getFatherId() == null || roleVo.getFatherId() != 2) {
for (Integer menuId : roleVo.getMenuIds()) { for (Integer menuId : roleVo.getMenuIds()) {

4
src/main/resources/cashMapper/CashAuditMapper.xml

@ -4,7 +4,7 @@
<!--审核收款订单--> <!--审核收款订单-->
<update id="updateOrder"> <update id="updateOrder">
update cash_record
update cash_record_collection
set status=#{status}, set status=#{status},
reject_reason=#{rejectReason}, reject_reason=#{rejectReason},
audit_id=#{auditId}, audit_id=#{auditId},
@ -13,7 +13,7 @@
</update> </update>
<select id="getAuditName" resultType="java.lang.String"> <select id="getAuditName" resultType="java.lang.String">
select a.admin_name from admin as a left join select a.admin_name from admin as a left join
cash_record cr on a.id=cr.audit_id
cash_record_collection cr on a.id=cr.audit_id
where a.id=#{auditId} limit 1 where a.id=#{auditId} limit 1
</select> </select>
</mapper> </mapper>

123
src/main/resources/cashMapper/CashCollectionMapper.xml

@ -6,13 +6,13 @@
<insert id="add" parameterType="com.example.demo.domain.entity.CashRecord" <insert id="add" parameterType="com.example.demo.domain.entity.CashRecord"
useGeneratedKeys="true" keyProperty="id"> useGeneratedKeys="true" keyProperty="id">
insert into insert into
cash_record(order_type,jwcode,name,market,activity,
cash_record_collection(order_type,jwcode,name,market,activity,
order_code,goods_name,good_num,num_unit,permanent_gold,free_gold, order_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,received_market, payment_currency,payment_amount,received_market,
pay_type,pay_time,status,submitter_id,submitter_market, pay_type,pay_time,status,submitter_id,submitter_market,
voucher,remark) voucher,remark)
values(#{orderType},#{jwcode},#{name},#{market},#{activity}, values(#{orderType},#{jwcode},#{name},#{market},#{activity},
#{orderCode},#{goodsName},#{goodNum},#{NumUnit},#{permanentGold},#{freeGold},#{paymentCurrency},
#{orderCode},#{goodsName},#{goodNum},#{numUnit},#{permanentGold},#{freeGold},#{paymentCurrency},
#{paymentAmount},#{receivedMarket},#{payType},#{payTime}, #{paymentAmount},#{receivedMarket},#{payType},#{payTime},
#{status},#{submitterId},#{submitterMarket},#{voucher},#{remark}) #{status},#{submitterId},#{submitterMarket},#{voucher},#{remark})
</insert> </insert>
@ -29,57 +29,57 @@
<!--更新订单状态--> <!--更新订单状态-->
<update id="updateStatus"> <update id="updateStatus">
update cash_record
update cash_record_collection
set status=#{status} set status=#{status}
where order_code=#{orderCode} where order_code=#{orderCode}
</update> </update>
<!--更新订单--> <!--更新订单-->
<update id="updateByOrderCode"> <update id="updateByOrderCode">
UPDATE cash_record
UPDATE cash_record_collection
<set> <set>
jwcode = #{cashRecord.jwcode},
name = #{cashRecord.name},
market = #{cashRecord.market},
activity = #{cashRecord.activity},
goods_name = #{cashRecord.goodsName},
good_num = #{cashRecord.goodNum},
permanent_gold = #{cashRecord.permanentGold},
free_gold = #{cashRecord.freeGold},
Num_unit = #{cashRecord.NumUnit},
payment_currency = #{cashRecord.paymentCurrency},
payment_amount = #{cashRecord.paymentAmount},
received_market = #{cashRecord.receivedMarket},
pay_type = #{cashRecord.payType},
pay_time = #{cashRecord.payTime},
voucher = #{cashRecord.voucher},
remark = #{cashRecord.remark},
jwcode = #{cashRecordCollection.jwcode},
name = #{cashRecordCollection.name},
market = #{cashRecordCollection.market},
activity = #{cashRecordCollection.activity},
goods_name = #{cashRecordCollection.goodsName},
good_num = #{cashRecordCollection.goodNum},
num_unit = #{cashRecordCollection.numUnit},
permanent_gold = #{cashRecordCollection.permanentGold},
free_gold = #{cashRecordCollection.freeGold},
payment_currency = #{cashRecordCollection.paymentCurrency},
payment_amount = #{cashRecordCollection.paymentAmount},
received_market = #{cashRecordCollection.receivedMarket},
pay_type = #{cashRecordCollection.payType},
pay_time = #{cashRecordCollection.payTime},
voucher = #{cashRecordCollection.voucher},
remark = #{cashRecordCollection.remark},
status = 0, status = 0,
</set> </set>
WHERE order_code = #{cashRecord.orderCode}
WHERE order_code = #{cashRecordCollection.orderCode}
AND status = 5 AND status = 5
</update> </update>
<!--补全手续费等字段--> <!--补全手续费等字段-->
<update id="complete"> <update id="complete">
UPDATE cash_record
UPDATE cash_record_collection
<set> <set>
<if test="cashRecord.handlingCharge != null ">
handling_charge = #{cashRecord.handlingCharge},
<if test="cashRecordCollection.handlingCharge != null ">
handling_charge = #{cashRecordCollection.handlingCharge},
</if> </if>
<if test="cashRecord.receivedCurrency != null and cashRecord.receivedCurrency != ''">
received_currency = #{cashRecord.receivedCurrency},
<if test="cashRecordCollection.receivedCurrency != null and cashRecordCollection.receivedCurrency != ''">
received_currency = #{cashRecordCollection.receivedCurrency},
</if> </if>
<if test="cashRecord.receivedAmount != null and cashRecord.receivedAmount != ''">
received_amount = #{cashRecord.receivedAmount},
<if test="cashRecordCollection.receivedAmount != null and cashRecordCollection.receivedAmount != ''">
received_amount = #{cashRecordCollection.receivedAmount},
</if> </if>
<if test="cashRecord.receivedTime != null">
received_time = #{cashRecord.receivedTime},
<if test="cashRecordCollection.receivedTime != null">
received_time = #{cashRecordCollection.receivedTime},
</if> </if>
<if test="cashRecord.paymentCurrency != null and cashRecord.paymentCurrency != ''">
payment_currency = #{cashRecord.paymentCurrency},
<if test="cashRecordCollection.paymentCurrency != null and cashRecordCollection.paymentCurrency != ''">
payment_currency = #{cashRecordCollection.paymentCurrency},
</if> </if>
<!-- 关键:null 就不拼这一列 --> <!-- 关键:null 就不拼这一列 -->
<if test="cashRecord.paymentAmount != null">
payment_amount = #{cashRecord.paymentAmount},
<if test="cashRecordCollection.paymentAmount != null">
payment_amount = #{cashRecordCollection.paymentAmount},
</if> </if>
<!-- 只有 这些字段全部非空才更新状态 --> <!-- 只有 这些字段全部非空才更新状态 -->
status = CASE status = CASE
@ -94,7 +94,7 @@
ELSE status ELSE status
END END
</set> </set>
WHERE order_code = #{cashRecord.orderCode}
WHERE order_code = #{cashRecordCollection.orderCode}
AND status IN (1, 3) AND status IN (1, 3)
</update> </update>
<!--设置gOrder订单为已同步--> <!--设置gOrder订单为已同步-->
@ -110,7 +110,7 @@
<!--根据订单号获取订单id与状态--> <!--根据订单号获取订单id与状态-->
<select id="selectByOrderCode" resultType="com.example.demo.domain.entity.CashRecord"> <select id="selectByOrderCode" resultType="com.example.demo.domain.entity.CashRecord">
select id ,status select id ,status
from cash_record
from cash_record_collection
where order_code=#{orderCode} where order_code=#{orderCode}
</select> </select>
<!--多条件查询收款订单列表--> <!--多条件查询收款订单列表-->
@ -119,6 +119,7 @@
m1.name as marketName, m1.name as marketName,
ra.activity_name as activity,cr.order_code,cr.bank_code, ra.activity_name as activity,cr.order_code,cr.bank_code,
cr.goods_name,cr.good_num, cr.goods_name,cr.good_num,
cr.num_unit,
cr.permanent_gold/100 as permanentGold,cr.free_gold/100 as freeGold,cr.payment_amount/100 as paymentAmount, cr.permanent_gold/100 as permanentGold,cr.free_gold/100 as freeGold,cr.payment_amount/100 as paymentAmount,
r1.rate_name as paymentCurrency, r1.rate_name as paymentCurrency,
r2.rate_name as receivedCurrency, r2.rate_name as receivedCurrency,
@ -129,7 +130,7 @@
cr.audit_id,cr.create_time,cr.update_time,cr.audit_time, cr.audit_id,cr.create_time,cr.update_time,cr.audit_time,
a1.admin_name as submitterName, a1.admin_name as submitterName,
a2.admin_name as auditName a2.admin_name as auditName
from cash_record cr
from cash_record_collection cr
left join admin a1 on cr.submitter_id = a1.id left join admin a1 on cr.submitter_id = a1.id
left join admin a2 on cr.audit_id = a2.id left join admin a2 on cr.audit_id = a2.id
left join market m1 on m1.id = cr.market left join market m1 on m1.id = cr.market
@ -211,12 +212,12 @@
</choose> </choose>
</select> </select>
<select id="selectAuditByOrderCode" resultType="com.example.demo.domain.entity.CashRecord"> <select id="selectAuditByOrderCode" resultType="com.example.demo.domain.entity.CashRecord">
select cash_record.id, status,jwcode,name,market,ra.activity_name as activity,
order_code,bank_code,goods_name,good_num,permanent_gold,free_gold,
payment_currency,payment_amount,pay_type,pay_time,cash_record.status,submitter_id,
select crc.id,jwcode,name,market,ra.activity_name as activity,
order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,pay_type,pay_time,crc.status,submitter_id,
voucher,remark voucher,remark
from cash_record
left join recharge_activity ra on ra.id = cash_record.activity
from cash_record_collection crc
left join recharge_activity ra on ra.id = crc.activity
where order_code=#{orderCode} where order_code=#{orderCode}
</select> </select>
<!--根据精网号获取姓名--> <!--根据精网号获取姓名-->
@ -241,12 +242,36 @@
limit #{size} limit #{size}
</select> </select>
<select id="selectById" resultType="com.example.demo.domain.vo.cash.CashCollection"> <select id="selectById" resultType="com.example.demo.domain.vo.cash.CashCollection">
select id,jwcode,name,market,activity,
order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,received_currency,received_amount,handling_charge,
pay_type,received_market,pay_time,received_time,audit_id,status,submitter_id,
submitter_market,voucher,remark,audit_time
from cash_record
where id=#{id}
select cr.id,cr.jwcode,cr.name,cr.market,
cr.order_code,cr.bank_code,cr.goods_name,cr.good_num,cr.num_unit,cr.permanent_gold,cr.free_gold,
cr.payment_currency,cr.payment_amount,cr.received_currency,cr.received_amount,cr.handling_charge,
cr.pay_type,cr.received_market,cr.pay_time,cr.received_time,cr.audit_id,cr.status,cr.submitter_id,
cr.submitter_market,cr.voucher,cr.remark,cr.audit_time,a1.admin_name as submitterName,
a2.admin_name as auditName,ra.activity_name as activity
from cash_record_collection cr
left join admin a1 on cr.submitter_id = a1.id
left join admin a2 on cr.audit_id = a2.id
left join recharge_activity ra on ra.id = cr.activity
where cr.id=#{id}
</select>
<select id="selectBatchIds" resultType="com.example.demo.domain.vo.cash.CashCollection">
select cr.id,cr.jwcode,cr.name,cr.market,
cr.order_code,cr.bank_code,cr.goods_name,cr.good_num,cr.num_unit,cr.permanent_gold,cr.free_gold,
cr.payment_currency,cr.payment_amount,cr.received_currency,cr.received_amount,cr.handling_charge,
cr.pay_type,cr.received_market,cr.pay_time,cr.received_time,cr.audit_id,cr.status,cr.submitter_id,
cr.submitter_market,cr.voucher,cr.remark,cr.audit_time,a1.admin_name as submitterName,
a2.admin_name as auditName,ra.activity_name as activity
from cash_record_collection cr
left join admin a1 on cr.submitter_id = a1.id
left join admin a2 on cr.audit_id = a2.id
left join recharge_activity ra on ra.id = cr.activity
<where>
<if test="relatedIds != null and relatedIds.size() > 0">
cr.id IN
<foreach collection="relatedIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
</select> </select>
</mapper> </mapper>

141
src/main/resources/cashMapper/CashRefundMapper.xml

@ -6,7 +6,6 @@
jwcode, jwcode,
name, name,
market, market,
activity,
order_code, order_code,
bank_code, bank_code,
permanent_gold, permanent_gold,
@ -27,16 +26,15 @@
refund_amount, refund_amount,
related_id, related_id,
audit_id, audit_id,
status,
status
) VALUES ( ) VALUES (
#{jwcode}, #{jwcode},
#{name}, #{name},
#{market}, #{market},
#{activity},
#{orderCode}, #{orderCode},
#{bankCode}, #{bankCode},
#{permanentGold},
#{freeGold},
#{partRefundGold},
#{partRefundFree},
#{submitterId}, #{submitterId},
#{submitterMarket}, #{submitterMarket},
#{voucher}, #{voucher},
@ -53,7 +51,7 @@
#{refundAmount}, #{refundAmount},
#{id}, #{id},
#{auditId}, #{auditId},
#{status},
#{status}
); );
</insert> </insert>
<insert id="addAudit" parameterType="com.example.demo.domain.vo.cash.CashRecordDone" useGeneratedKeys="true" keyProperty="id"> <insert id="addAudit" parameterType="com.example.demo.domain.vo.cash.CashRecordDone" useGeneratedKeys="true" keyProperty="id">
@ -75,7 +73,7 @@
</insert> </insert>
<update id="update"> <update id="update">
update cash_record
update cash_record_refund
set set
status = 10, status = 10,
refund_model = #{refundModel}, refund_model = #{refundModel},
@ -83,15 +81,15 @@
where id = #{id} where id = #{id}
</update> </update>
<update id="withdraw"> <update id="withdraw">
update cash_record set status = 11
where order_type =2 and id = #{id}
update cash_record_refund set status = 11
where id = #{id}
</update> </update>
<update id="review"> <update id="review">
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> </update>
<update id="executor"> <update id="executor">
update cash_record set refund_currency = #{refundCurrency},
update cash_record_refund set refund_currency = #{refundCurrency},
refund_amount = #{refundAmount}, refund_amount = #{refundAmount},
refund_channels = #{refundChannels}, refund_channels = #{refundChannels},
refund_time = #{refundTime}, refund_time = #{refundTime},
@ -99,10 +97,10 @@
refund_voucher = #{refundVoucher}, refund_voucher = #{refundVoucher},
status = #{status}, status = #{status},
executor = #{executor} executor = #{executor}
where order_type =2 and id = #{id}
where id = #{id}
</update> </update>
<update id="updateStatus"> <update id="updateStatus">
update cash_record
update cash_record_collection
set status = #{status} set status = #{status}
<where> <where>
<if test="id != null"> <if test="id != null">
@ -158,14 +156,15 @@
la.head_finance, la.head_finance,
crc.activity, crc.activity,
crc.goods_name, crc.goods_name,
crc.goods_num,
crc.good_num as goodsNum,
crc.num_unit, crc.num_unit,
crc.pay_type, crc.pay_type,
crc.pay_time, crc.pay_time,
crc.voucher, crc.voucher,
crc.remark, crc.remark,
crc.payment_currency, crc.payment_currency,
crc.payment_amount,
crc.payment_amount
from cash_record_refund crr
left join lhl_audit la on la.id = crr.audit_id left join lhl_audit la on la.id = crr.audit_id
left join cash_record_collection crc on crc.id = crr.related_id left join cash_record_collection crc on crc.id = crr.related_id
<where> <where>
@ -215,7 +214,7 @@
ORDER BY ${sortField} ${sortOrder} ORDER BY ${sortField} ${sortOrder}
</when> </when>
<otherwise> <otherwise>
ORDER BY create_time DESC
ORDER BY crr.create_time DESC
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
@ -225,7 +224,7 @@
crr.name, crr.name,
crr.market, crr.market,
crc.goods_name, crc.goods_name,
crc.goods_num,
crc.good_num as goodsNum,
crc.num_unit, crc.num_unit,
crr.refund_model, crr.refund_model,
crr.submitter_id, crr.submitter_id,
@ -235,9 +234,14 @@
crr.permanent_gold, crr.permanent_gold,
crr.free_gold, crr.free_gold,
crr.audit_id, crr.audit_id,
crr.related_id
crr.related_id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance
from cash_record_refund crr from cash_record_refund crr
left join cash_record_collection crc on crc.id = crr.related_id left join cash_record_collection crc on crc.id = crr.related_id
left join lhl_audit la on la.id = crr.audit_id
<where> <where>
<if test="status != null"> <if test="status != null">
and crr.status = #{status} and crr.status = #{status}
@ -285,8 +289,105 @@
ORDER BY ${sortField} ${sortOrder} ORDER BY ${sortField} ${sortOrder}
</when> </when>
<otherwise> <otherwise>
ORDER BY create_time DESC
ORDER BY crr.create_time DESC
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
<select id="getAudit" resultType="com.example.demo.domain.vo.cash.LhlAudit">
select la.id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance
from lhl_audit la
where la.id = #{id}
</select>
<select id="exSelect" resultType="com.example.demo.domain.vo.cash.CashRecordDTO">
select crr.id,
crr.jwcode,
crr.name,
crr.market,
crc.goods_name,
crc.good_num as goodsNum,
crc.num_unit,
crr.refund_model,
crr.refund_currency,
crr.refund_amount,
crr.refund_channels,
crr.voucher,
crr.refund_time,
crr.status,
crr.audit_id,
crr.related_id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance
from cash_record_refund crr
left join cash_record_collection crc on crc.id = crr.related_id
left join lhl_audit la on la.id = crr.audit_id
<where>
<if test="status != null">
and crr.status = #{status}
</if>
<if test="name != null and name.length() > 0">
and crr.name = #{name}
</if>
<if test="jwcode != null">
and crr.jwcode = #{jwcode}
</if>
<if test="markets!= null and markets.size > 0">
AND crr.market IN
<foreach collection="markets" item="markets" open="(" separator="," close=")">
#{markets}
</foreach>
</if>
<if test="statuses!= null and statuses.size > 0">
AND crr.status IN
<foreach collection="statuses" item="statuses" open="(" separator="," close=")">
#{statuses}
</foreach>
</if>
<if test="goodsNames!= null and goodsNames.size > 0">
AND crc.goods_name IN
<foreach collection="goodsNames" item="goodsNames" open="(" separator="," close=")">
#{goodsNames}
</foreach>
</if>
<if test="refundCurrency != null and refundCurrency.size > 0">
AND crr.refund_currency = #{refundCurrency}
</if>
<if test="refundChannels != null and refundChannels.length()>0">
and crc.refund_channels = #{refundChannels}
</if>
<if test="startTime != null and endTime != null">
and crc.`refund_time` BETWEEN #{startTime} AND #{endTime}
</if>
<if test=" submitterId!= null">
and crr.submitter_id = #{submitterId}
</if>
</where>
<choose>
<when test="sortField != null and sortField.length > 0 or sortOrder != null and sortOrder.length > 0">
ORDER BY ${sortField} ${sortOrder}
</when>
<otherwise>
ORDER BY crr.create_time DESC
</otherwise>
</choose>
</select>
<select id="getAuditBatch" resultType="com.example.demo.domain.vo.cash.LhlAudit">
select * from lhl_audit
<where>
<if test="auditIds != null and auditIds.size() > 0">
id in
<foreach collection="auditIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
</select>
</mapper> </mapper>

7
src/main/resources/liveMapper/LiveMapper.xml

@ -63,6 +63,13 @@
<select id="getLiveGift" resultType="java.lang.String"> <select id="getLiveGift" resultType="java.lang.String">
select distinct name from live_gifts select distinct name from live_gifts
</select> </select>
<select id="getChannel" resultType="java.lang.String">
select distinct title
from live_pindao
where pd_id &lt; 999
and title is not null <!-- 可选:排除标题为空的记录 -->
and title != '' <!-- 可选:排除标题为空字符串的记录 -->
</select>
<!--获取直播频道列表--> <!--获取直播频道列表-->
<select id="getLiveChannel" resultType="java.lang.String"> <select id="getLiveChannel" resultType="java.lang.String">
select distinct title from live_pindao where title is not null and title != '' select distinct title from live_pindao where title is not null and title != ''

74
src/main/resources/mapper/AuditMapper.xml

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.coin.AuditMapper"> <mapper namespace="com.example.demo.mapper.coin.AuditMapper">
<!-- 修改订单审核人与审核状态-->
<update id="updateOrder"> <update id="updateOrder">
update user_gold_record update user_gold_record
set audit_id = #{auditId}, set audit_id = #{auditId},
@ -12,43 +11,29 @@
order by create_time DESC order by create_time DESC
limit 1 limit 1
</update> </update>
<!--更新用户余额-->
<update id="updateUserGold"> <update id="updateUserGold">
update user update user
set sum_permanent_gold = sum_permanent_gold + COALESCE(#{sumPermanentGold},0),
sum_free_june = sum_free_june + COALESCE(#{sumFreeJune},0),
sum_free_december = sum_free_december + COALESCE(#{sumFreeDecember},0),
sum_task_gold = sum_task_gold + COALESCE(#{sumTaskGold},0),
current_permanent_gold = current_permanent_gold + COALESCE(#{currentPermanentGold},0),
current_free_june = current_free_june + COALESCE(#{currentFreeJune},0),
current_free_december = current_free_december + COALESCE(#{currentFreeDecember},0),
current_task_gold = current_task_gold + COALESCE(#{currentTaskGold},0),
recharge_num = recharge_num+COALESCE(#{rechargeNum},0)
<set>
<if test="currentPermanentGold != null">
current_permanent_gold = current_permanent_gold + #{currentPermanentGold},
</if>
<if test="currentFreeJune != null">
current_free_june = current_free_june + #{currentFreeJune},
</if>
<if test="currentFreeDecember != null">
current_free_december = current_free_december + #{currentFreeDecember},
</if>
<if test="currentTaskGold != null">
current_task_gold = current_task_gold + #{currentTaskGold},
</if>
</set>
where jwcode = #{jwcode} where jwcode = #{jwcode}
</update> </update>
<!--修改消费订单为已退款-->
<update id="updateOrderRefund"> <update id="updateOrderRefund">
update user_gold_record update user_gold_record
set is_refund = #{isRefund} set is_refund = #{isRefund}
where order_code = #{orderCode}
</update>
<update id="updateFirstRecharge">
update user
set first_recharge = NOW()
where jwcode = #{jwcode}
where order_code = #{orderCode} and type in (0,1)
</update> </update>
<!--根据订单号查未审核订单-->
<select id="selectOrderByOrderCode" resultType="com.example.demo.domain.entity.UserGoldRecord">
select * from user_gold_record
where order_code = #{orderCode} and audit_status = 0
and flag=1
ORDER BY create_time DESC
limit 1
</select>
<!--多条件查询充值审核订单-->
<select id="selectRechargeBy" resultType="com.example.demo.domain.vo.coin.RechargeAudit"> <select id="selectRechargeBy" resultType="com.example.demo.domain.vo.coin.RechargeAudit">
SELECT ugr.*, SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, (COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
@ -113,7 +98,6 @@
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
<!--多条件查询退款审核订单-->
<select id="selectRefundBy" resultType="com.example.demo.domain.vo.coin.RefundAudit"> <select id="selectRefundBy" resultType="com.example.demo.domain.vo.coin.RefundAudit">
SELECT ugr.*, SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, (COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
@ -180,17 +164,27 @@
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
<!--根据订单号查订单-->
<select id="selectAllOrderByOrderCode" resultType="com.example.demo.domain.entity.UserGoldRecord">
select * from user_gold_record where order_code = #{orderCode} and flag=1
ORDER BY create_time DESC
limit 1
</select>
<select id="getAdminMarket" resultType="java.lang.String">
</select>
<select id="getName" resultType="java.lang.String"> <select id="getName" resultType="java.lang.String">
select admin_name from admin where id = #{auditId} select admin_name from admin where id = #{auditId}
</select> </select>
<select id="getNamesByIds" resultType="com.example.demo.domain.entity.Admin">
select id, admin_name from admin
<where>
<if test="submitterIds != null and submitterIds.size() > 0">
id in
<foreach collection="submitterIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="submitterIds == null or submitterIds.size() == 0">
1=0
</if>
</where>
</select>
<update id="updateFirstRecharge">
update user set first_recharge = now() where jwcode = #{jwcode} and first_recharge is null
</update>
</mapper> </mapper>

14
src/main/resources/mapper/MarketMapper.xml

@ -35,4 +35,18 @@
<select id="getMarketIdBytype" resultType="com.example.demo.domain.entity.Market"> <select id="getMarketIdBytype" resultType="com.example.demo.domain.entity.Market">
select * from market where parent_id=#{parentId} select * from market where parent_id=#{parentId}
</select> </select>
<select id="getMarketById" resultType="java.lang.String">
select name from market where id=#{market}
</select>
<select id="getMarketByIds" resultType="com.example.demo.domain.entity.Market">
select id,name from market
<where>
<if test="marketIds != null and marketIds.size() > 0">
id in
<foreach collection="marketIds" item="marketId" open="(" separator="," close=")">
#{marketId}
</foreach>
</if>
</where>
</select>
</mapper> </mapper>

16
src/main/resources/mapper/RoleMapper.xml

@ -7,7 +7,12 @@
<if test="roleName != null"> <if test="roleName != null">
role_name = #{roleName}, role_name = #{roleName},
</if> </if>
<if test="market != null">
market = #{market},
</if>
<if test="channel != null">
channel = #{channel},
</if>
<if test="fatherId != null"> <if test="fatherId != null">
father_id = #{fatherId}, father_id = #{fatherId},
</if> </if>
@ -32,7 +37,7 @@
</select> </select>
<select id="selectAllRole" resultType="com.example.demo.domain.vo.coin.RoleVo"> <select id="selectAllRole" resultType="com.example.demo.domain.vo.coin.RoleVo">
SELECT id,role_name FROM role
SELECT id,role_name,market,channel FROM role
<where> <where>
<!-- 判断 market 是否不为总部且 markets 不为空 --> <!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="markets != null and markets.size() > 0 and '总部' not in markets and '研发部' not in markets"> <if test="markets != null and markets.size() > 0 and '总部' not in markets and '研发部' not in markets">
@ -44,7 +49,7 @@
</where> </where>
</select> </select>
<select id="selectByFatherId" resultType="com.example.demo.domain.vo.coin.RoleVo"> <select id="selectByFatherId" resultType="com.example.demo.domain.vo.coin.RoleVo">
SELECT id,role_name FROM role
SELECT id,role_name,market,channel FROM role
<where> <where>
father_id = #{id} father_id = #{id}
</where> </where>
@ -54,8 +59,8 @@
<!-- 插入角色信息 --> <!-- 插入角色信息 -->
<insert id="addRole" parameterType="com.example.demo.domain.vo.coin.RoleVo" useGeneratedKeys="true" keyProperty="id"> <insert id="addRole" parameterType="com.example.demo.domain.vo.coin.RoleVo" useGeneratedKeys="true" keyProperty="id">
INSERT INTO role INSERT INTO role
(role_name,father_id, market)
VALUES (#{roleName}, #{fatherId}, #{market})
(role_name,father_id, market,channel)
VALUES (#{roleName}, #{fatherId}, #{market},#{channel})
</insert> </insert>
<!-- 删除 role_menu 表中对应角色的数据 --> <!-- 删除 role_menu 表中对应角色的数据 -->
@ -75,6 +80,7 @@
r.market AS market, r.market AS market,
r.create_time AS createTime, r.create_time AS createTime,
r.update_time AS updateTime, r.update_time AS updateTime,
r.channel AS channel,
-- 通过自连接查询父角色名称 -- 通过自连接查询父角色名称
father.role_name AS fatherName father.role_name AS fatherName
FROM role r FROM role r

Loading…
Cancel
Save