Browse Source

Merge remote-tracking branch 'refs/remotes/origin/milestone-20251203-冲刺计划' into dev

dev
lijianlin 4 weeks ago
parent
commit
4908f8c61d
  1. 9
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  2. 2
      src/main/java/com/example/demo/domain/entity/CashRecord.java
  3. 2
      src/main/java/com/example/demo/service/bean/BeanConsumeService.java
  4. 3
      src/main/java/com/example/demo/service/cash/CashCollectionService.java
  5. 17
      src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java
  6. 62
      src/main/java/com/example/demo/serviceImpl/cash/CashAuditServiceImpl.java
  7. 70
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  8. 2
      src/main/resources/cashMapper/CashCollectionMapper.xml
  9. 4
      src/main/resources/mapper/WorkBenchMapper.xml

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

@ -66,6 +66,15 @@ public class CashCollectionController {
return Result.error(e.getMessage());
}
}
//新增赠送免费金币
@PostMapping("/addFreeCoin")
public Result addFreeCoin(@RequestBody CashCollection cashCollection) {
try {
return Result.success(cashCollectionService.addFreeCoin(cashCollection));
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
//撤回未审核的收款订单
@PostMapping("/cancel")
public Result cancel(@RequestBody CashCollection cashRecord) {

2
src/main/java/com/example/demo/domain/entity/CashRecord.java

@ -55,6 +55,8 @@ public class CashRecord implements Serializable {
private LocalDateTime payTime; // 付款日期到秒
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private LocalDateTime receivedTime; // 到账日期到秒
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private LocalDateTime auditTime;
// 状态 & 操作人
private Integer status; // 订单状态

2
src/main/java/com/example/demo/service/bean/BeanConsumeService.java

@ -30,7 +30,7 @@ public interface BeanConsumeService {
Object selectFanBy(Integer pageNum, Integer pageSize, BeanConsumeFan beanConsumeFan);
//筛选查询文章消费
Object selectArticleBy(Integer pageNum, Integer pageSize, BeanConsumeArticle beanConsumeArticle);
//消费金合计数
//消费金合计数
BeanConsumeGold sumConsumeGold(Page page);
//查询直播礼物
List<String> getLiveGift();

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

@ -22,6 +22,8 @@ import java.util.List;
public interface CashCollectionService {
//新增收款订单
String add(CashCollection cashCollection);
//赠送免费金币
String addFreeCoin(CashCollection cashCollection);
//撤回未审核的收款订单
String cancel(String orderCode);
//编辑并重新提交收款订单
@ -42,4 +44,5 @@ public interface CashCollectionService {
CashCollection selectByGoldCoinOrderCode(String orderNo);
//同步事务方法
void processBatch(List<GOrder> gOrders);
}

17
src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java

@ -213,10 +213,27 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
public BeanConsumeGold sumConsumeGold(Page page) {
BeanConsumeGold gold = new BeanConsumeGold();
Integer payType = page.getPayType();
if (payType==1) {
//设置频道权限
String channel=roleMapper.getChannel(page.getBeanConsumeLive().getRoleId());
if (channel==null){
page.getBeanConsumeLive().setLiveChannel(null);
}
if (!channel.equals("全部")){
page.getBeanConsumeLive().setLiveChannel(channel);
}
//直播消费合计
gold = liveMapper.selectSumLiveBy(page.getBeanConsumeLive());
}else if (payType==7) {
//设置频道权限
String channel=roleMapper.getChannel(page.getBeanConsumeFan().getRoleId());
if (channel==null){
page.getBeanConsumeFan().setChannel(null);
}
if (!channel.equals("全部")){
page.getBeanConsumeFan().setChannel(channel);
}
//充值消费合计
gold = beanConsumeMapper.selectSumFansBy(page.getBeanConsumeFan());
}else if (payType==8) {

62
src/main/java/com/example/demo/serviceImpl/cash/CashAuditServiceImpl.java

@ -78,13 +78,13 @@ public class CashAuditServiceImpl implements CashAuditService {
int currentMonth = LocalDate.now().getMonthValue();
// 根据当前月份设置对应字段
if (currentMonth >= 1 && currentMonth <= 6) {
// 1-6月设置12月额度6月保持默认值
rechargeOrder.setFreeJune(0);
rechargeOrder.setFreeDecember(order.getFreeGold());
} else {
// 7-12月设置6月额度12月保持默认值
// 1-6月设置6月额度12月保持默认值
rechargeOrder.setFreeJune(order.getFreeGold());
rechargeOrder.setFreeDecember(0);
} else {
// 7-12月设置12月额度6月保持默认值
rechargeOrder.setFreeJune(0);
rechargeOrder.setFreeDecember(order.getFreeGold());
}
rechargeOrder.setSumGold(order.getPermanentGold() + order.getFreeGold());
rechargeOrder.setRateId(Integer.valueOf(order.getPaymentCurrency()));
@ -129,6 +129,58 @@ public class CashAuditServiceImpl implements CashAuditService {
user.setRechargeNum(1); //充值次数加一
auditMapper.updateUserGold(user);
}
if (order.getGoodsName().equals("免费金币赠送")) {
//往金币订单表加一条充值记录
UserGoldRecord rechargeOrder = new UserGoldRecord();
rechargeOrder.setOrderCode(orderCode.replaceFirst("^XJ_", "XJCZ_"));
rechargeOrder.setJwcode(order.getJwcode());
rechargeOrder.setActivity(order.getActivity());
rechargeOrder.setPermanentGold(0);
// 获取当前月份1-12
int currentMonth = LocalDate.now().getMonthValue();
// 根据当前月份设置对应字段
if (currentMonth >= 1 && currentMonth <= 6) {
// 1-6月设置6月额度12月保持默认值
rechargeOrder.setFreeJune(order.getFreeGold());
rechargeOrder.setFreeDecember(0);
} else {
// 7-12月设置12月额度6月保持默认值
rechargeOrder.setFreeJune(0);
rechargeOrder.setFreeDecember(order.getFreeGold());
}
rechargeOrder.setSumGold(order.getFreeGold());
rechargeOrder.setRemark(order.getRemark());
rechargeOrder.setPayPlatform("金币系统");
rechargeOrder.setAdminId(order.getSubmitterId());
rechargeOrder.setAuditId(auditId);
rechargeOrder.setType((byte) 0);
rechargeOrder.setAuditStatus(1);
rechargeOrder.setCreateTime(new Date());
rechargeMapper.add(rechargeOrder);
//往ERP加一条充值数据
GoldTistV2.addCoinNew(order.getJwcode().toString(), 63, //充值免费
(double) (order.getFreeGold()) / 100,
order.getRemark(), 0, auditName, "金币充值");
//修改用户余额添加金币
User user = new User();
user.setJwcode(order.getJwcode());
user.setSumConsumePermanent(BigDecimal.valueOf(0));
// 根据当前月份设置对应字段
if (currentMonth >= 1 && currentMonth <= 6) {
// 1-6月设置6月额度12月保持默认值
user.setSumFreeJune(BigDecimal.valueOf(order.getFreeGold()));
user.setSumFreeJune(BigDecimal.valueOf(order.getFreeGold()));
user.setCurrentFreeDecember(BigDecimal.valueOf(0));
} else {
// 7-12月设置12月额度6月保持默认值
user.setSumFreeJune(BigDecimal.valueOf(0));
user.setSumFreeDecember(BigDecimal.valueOf(order.getFreeGold()));
user.setSumFreeDecember(BigDecimal.valueOf(order.getFreeGold()));
}
user.setCurrentPermanentGold(BigDecimal.valueOf(0));
user.setRechargeNum(1); //充值次数加一
auditMapper.updateUserGold(user);
}
} else if (action == 2) { //驳回
updateOrder.setStatus(2);
updateOrder.setRejectReason(rejectReason);

70
src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java

@ -69,7 +69,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
throw new IllegalArgumentException("活动不能为空");
}
if (cashCollection.getGoodsName() == null|| cashCollection.getGoodsName().isEmpty()) {
throw new IllegalArgumentException("商品名不能为空");
throw new IllegalArgumentException("产品名称不能为空");
}
if (cashCollection.getGoodsName().equals("金币充值")) {
if (cashCollection.getPermanentGold() == 0 && cashCollection.getFreeGold() == 0) {
@ -142,6 +142,57 @@ public class CashCollectionServiceImpl implements CashCollectionService {
return "添加成功";
}
@Override
public String addFreeCoin(CashCollection cashCollection) {
if (cashCollection.getJwcode() == null) {
throw new IllegalArgumentException("精网号不能为空");
}
if (cashCollection.getJwcode() < 10000000 || cashCollection.getJwcode() > 99999999) {
throw new IllegalArgumentException("精网号必须为8位");
}
if (cashCollection.getName() == null || cashCollection.getName().isEmpty()){
throw new IllegalArgumentException("客户姓名不能为空");
}
if (cashCollection.getActivity() == null || cashCollection.getActivity().isEmpty()) {
throw new IllegalArgumentException("活动不能为空");
}
if (cashCollection.getFreeGold() == 0) {
throw new IllegalArgumentException("免费金币数量不能为空");
}
//生成订单号后半部分
String orderNumber = UUID.randomUUID().toString().replaceAll("-", "");
CashRecord cashRecord = new CashRecord();
//构建订单信息
cashRecord.setOrderCode("XJ_" + orderNumber); //订单号
cashRecord.setJwcode(cashCollection.getJwcode()); //精网号
cashRecord.setName(cashCollection.getName()); //客户姓名
cashRecord.setActivity(cashCollection.getActivity()); // 活动
cashRecord.setGoodsName("免费金币赠送"); //商品名称
cashRecord.setFreeGold(cashCollection.getFreeGold()); //免费金币
cashRecord.setRemark(cashCollection.getRemark()); //备注
cashRecord.setStatus(0); //订单状态付款线下财务待审核
cashRecord.setSubmitterId(cashCollection.getSubmitterId()); //提交人ID
cashRecord.setSubmitterMarket(cashCollection.getSubmitterMarket());
cashRecord.setOrderType(1); //订单类型1-收款
cashRecord.setMarket(cashCollection.getMarket());
//地区根据jwcode插入
//cashRecord.setMarket(cashCollectionMapper.getMarketByJwcode(cashRecord.getJwcode()));
//插入新收款订单
cashCollectionMapper.add(cashRecord);
// 发送收款创建消息
Messages message = new Messages();
message.setJwcode(cashRecord.getJwcode());
message.setName(cashRecord.getName());
message.setStatus(cashRecord.getStatus());
message.setDesc(cashRecord.getJwcode()+"用户的现金收款申请待审核,请前往审核");
message.setTitle("现金收款--赠送免费金币");
message.setType(1);
message.setTypeId(cashRecord.getId());
message.setMarket(Integer.valueOf(cashRecord.getMarket()));
rabbitTemplate.convertAndSend(RabbitMQConfig.CASH_COLLECTION_EXCHANGE, "cash.collection.save", message);
return "添加成功";
}
//撤回未审核的订单
@Override
public String cancel(String orderCode) {
@ -351,6 +402,9 @@ public User getNameAndMarket(Integer jwcode) {
log.error("失败订单ID: {}", failedIds);
// 可存入 error_log 供人工处理
// 这里选择继续下一批容忍部分失败
}
@ -401,25 +455,25 @@ public User getNameAndMarket(Integer jwcode) {
cashRecord.setPayload("IOS");
break;
case 5:
cashRecord.setPayType("Stripe-链接收款");
cashRecord.setPayType("Stripe");
cashRecord.setReceivedMarket("13");
cashRecord.setPayload("Stripe");
break;
case 6:
cashRecord.setPayType("PaymentAsia-链接收款");
cashRecord.setPayType("PaymentAsia");
cashRecord.setReceivedMarket("13");
cashRecord.setPayload("PaymentAsia");
break;
case 7:
cashRecord.setPayType("Ipay88-链接收款");
cashRecord.setPayType("Ipay88");
cashRecord.setReceivedMarket("5");
cashRecord.setPayload("Ipay88");
break;
case 9:
cashRecord.setPayType("FistData");
cashRecord.setPayType("FirstData");
cashRecord.setReceivedMarket("4");
cashRecord.setBankCode(gOrder.getFirstdataIpgTransactionId());
cashRecord.setPayload("FistData");
cashRecord.setPayload("FirstData");
break;
default:
break;
@ -428,7 +482,9 @@ public User getNameAndMarket(Integer jwcode) {
cashRecord.setFreeGold(0);
cashRecord.setPaymentCurrency("");
cashRecord.setPaymentAmount(BigDecimal.valueOf(0));
cashRecord.setPayTime(LocalDateTime.ofEpochSecond(gOrder.getSuccessTime(), 0, ZoneOffset.UTC));
//转换时间戳加上时区偏移
cashRecord.setPayTime(LocalDateTime.ofEpochSecond(gOrder.getSuccessTime(), 0, ZoneOffset.of("+08:00")));
cashRecord.setAuditTime(LocalDateTime.ofEpochSecond(gOrder.getSuccessTime(), 0, ZoneOffset.of("+08:00")));
cashRecord.setStatus(3);
cashRecord.setSubmitterId(99999);
//存入现金库

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

@ -231,7 +231,7 @@
add_time,is_synced
from g_order
where is_synced=0 and state=1 and pay_style in(3,5,6,7,9)
and success_time>1665246960
and success_time>=1763136000
limit #{size}
</select>
<select id="selectById" resultType="com.example.demo.domain.vo.cash.CashCollection">

4
src/main/resources/mapper/WorkBenchMapper.xml

@ -179,7 +179,7 @@
SUM(CASE WHEN r.id = 7 THEN cr.received_amount/100 ELSE 0 END) AS vdn,
SUM(CASE WHEN r.id = 8 THEN cr.received_amount/100 ELSE 0 END) AS krw,
ROUND( SUM(cr.received_amount/100 * r.num), 2) AS totalSGD
FROM cash_record cr
FROM cash_record_collection cr
JOIN market m ON cr.received_market = m.id
JOIN rate r ON cr.received_currency = r.id
WHERE cr.received_currency IN (2,3,4,5,6,7,8) -- 只统计这7种币
@ -187,7 +187,7 @@
<foreach item="market" collection="markets" open="(" separator="," close=")">#{market}</foreach>
AND cr.audit_time BETWEEN #{startDate} AND #{endDate}
AND cr.order_type=1
AND cr.status IN (1,3,4)
AND cr.status IN (0,1,3,4,6)
GROUP BY m.name;
</select>
</mapper>
Loading…
Cancel
Save