Kaynağa Gözat

cps后台添加提现操作;后台实物订单导出修改

zoujiajian 2 yıl önce
ebeveyn
işleme
9fe2895ac6

+ 8 - 0
netflix-dao/src/main/java/com/cyksj/model/excel/ExcelRealGoodsOrderData.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.cyksj.model.entity.OrderDon;
 import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
@@ -95,6 +96,13 @@ public class ExcelRealGoodsOrderData {
 	@ExcelIgnore
 	private String exCode;
 
+	/**
+	 * 收货人
+	 */
+	@ExcelProperty("序号")
+	@DbIgnore
+	private Integer index;
+
 	/**
 	 * 收货人
 	 */

+ 40 - 0
netflix-dao/src/main/java/com/cyksj/model/excel/merge/RealGoodsOrderLineStrategy.java

@@ -0,0 +1,40 @@
+package com.cyksj.model.excel.merge;
+
+import com.alibaba.excel.write.handler.RowWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: RealGoodsOrderLineStrategy
+ * 创建者: JavaZou
+ * 创建时间:2023/11/3 13:48
+ */
+public class RealGoodsOrderLineStrategy implements RowWriteHandler {
+
+	@Override
+	public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer integer, Integer integer1, Boolean isHead) {
+		//标题前 增加几行
+		Sheet sheet = writeSheetHolder.getSheet();
+		sheet.createRow(0);
+		//合并单元格
+		CellRangeAddress first_row = new CellRangeAddress(0,0,
+				0, 15);
+		sheet.addMergedRegionUnsafe(first_row);
+		sheet.createRow(1);
+		CellRangeAddress second_row = new CellRangeAddress(1,1,
+				0, 15);
+		sheet.addMergedRegionUnsafe(second_row);
+	}
+
+	@Override
+	public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
+	}
+
+	@Override
+	public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer integer, Boolean isHead) {
+	}
+}

+ 70 - 0
netflix-dao/src/main/java/com/cyksj/model/views/CpsApplyMoneyView.java

@@ -0,0 +1,70 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.DistributeMoneyApply;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CpsApplyMoneyView
+ * 创建者: JavaZou
+ * 创建时间:2023/10/31 15:42
+ */
+@Getter
+@Setter
+@SearchBean(tables = "distribute_money_apply dma left join user u on u.id = dma.user_id")
+public class CpsApplyMoneyView {
+	@DbField("dma.id")
+	private Long id;
+
+	@DbField("dma.user_id")
+	private Long userId;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("dma.money")
+	private BigDecimal money;
+
+	@DbField("dma.reason")
+	private String reason;
+
+	@DbField("dma.points")
+	private BigDecimal points;
+
+	@DbField("dma.real_name")
+	private String realName;
+
+	@DbField("dma.type")
+	private DistributeMoneyApply.Type type;
+
+	@DbField("dma.account")
+	private String account;
+
+	@DbField("dma.verify_status")
+	private DistributeMoneyApply.Status verifyStatus;
+
+	@DbField("dma.img")
+	private String img;
+
+	@DbField("dma.created_time")
+	private Date createdTime;
+
+	@DbField("dma.wallet_addr")
+	private String walletAddr;
+
+	@DbField("dma.remark")
+	private String remark;
+
+	@DbField("dma.business_id")
+	private Long businessId;
+
+	@DbField("dma.business_name")
+	private String businessName;
+
+}

+ 2 - 2
netflix-dao/src/main/resources/mapper/YhShopMapper.xml

@@ -57,8 +57,8 @@
     </select>
 
     <select id="selectRelationBusiness" resultType="com.cyksj.model.entity.YhShopDistributeMoneyApply">
-        select ys.business_id, cu.nickanem as businessName
-        from (select * from yh_shop where user_id limit 1) ys
+        select ys.business_id, cu.nickname as businessName
+        from (select * from yh_shop where user_id = #{userId} limit 1) ys
                  left join cms_user cu on cu.id = ys.business_id
     </select>
 </mapper>

+ 2 - 97
netflix-service/src/main/java/com/cyksj/service/cps/shop/YhShopManageServiceImpl.java

@@ -3,25 +3,19 @@ package com.cyksj.service.cps.shop;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Validator;
-import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alipay.api.AlipayResponse;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.EnvCommonService;
-import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.SmsUtil;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.dto.Result;
-import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.shop.YhShopDistributeMoneyApplyMapper;
-import com.cyksj.mapper.shop.YhShopMapper;
 import com.cyksj.mapper.shop.YhShopDistributeWaitingSendPointsMapper;
+import com.cyksj.mapper.shop.YhShopMapper;
 import com.cyksj.model.entity.User;
 import com.cyksj.model.entity.YhShop;
-import com.cyksj.model.entity.YhShopDistributeMoneyApply;
-import com.cyksj.model.request.TransferAccountsReq;
 import com.cyksj.model.request.YhShopApplyMoneyReq;
 import com.cyksj.model.views.YhShopBrokenLineCpsUserWMoneyView;
 import com.cyksj.model.views.YhShopUserWMoneyStatisticsDataView;
@@ -33,9 +27,7 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
 import java.util.List;
-import java.util.Optional;
 
 /*
  *项目名: yhlxj
@@ -182,94 +174,7 @@ public class YhShopManageServiceImpl implements YhShopManageService{
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public Result applyMoney(YhShopApplyMoneyReq applyMoneyReq) throws Exception {
-		Long userId = applyMoneyReq.getUserId();
-		User user = userMapper.selectById(userId);
-		if (user == null) {
-			throw BusinessRuntimeException.getInstance("请先授权登录");
-		}
-		Boolean isTakeAll = applyMoneyReq.getIsTakeAll();
-		YhShopDistributeMoneyApply.Type type = applyMoneyReq.getType();
-		if (type == null) type = YhShopDistributeMoneyApply.Type.zfb;
-		if (type == YhShopDistributeMoneyApply.Type.zfb) {
-			if (ObjectUtil.hasEmpty(applyMoneyReq.getAccount(), applyMoneyReq.getRealName())) {
-				throw BusinessRuntimeException.getInstance("必填项不能为空");
-			}
-			if (applyMoneyReq.getAccount().length() > 255 || applyMoneyReq.getRealName().length() > 32) {
-				throw BusinessRuntimeException.getInstance("请输入正确的账户信息");
-			}
-		}
-		if (type == YhShopDistributeMoneyApply.Type.usdt) {
-			if (StrUtil.isEmpty(applyMoneyReq.getWalletAddr())) {
-				throw BusinessRuntimeException.getInstance("USDT提现钱包地址不能为空");
-			}
-			if (applyMoneyReq.getWalletAddr().length() > 1000) {
-				throw BusinessRuntimeException.getInstance("请输入正确的钱包地址");
-			}
-			if (StrUtil.isNotBlank(applyMoneyReq.getRemark()) && applyMoneyReq.getRemark().length() > 512) {
-				throw BusinessRuntimeException.getInstance("备注过多");
-			}
-			isTakeAll = true;
-
-		}
-		YhShopDistributeMoneyApply distributeMoneyApply = null;
-		if (type == YhShopDistributeMoneyApply.Type.pwdRed) {
-			distributeMoneyApply = yhShopMapper.selectRelationBusiness(userId);
-			isTakeAll = true;
-		}
-
-		BigDecimal needApplyMoney = user.getYhsMoney();
-		BigDecimal fourHundred = BigDecimal.valueOf(4 * 10000);
-		if (isTakeAll == null || !isTakeAll) {
-			if (needApplyMoney.compareTo(fourHundred) > 0) {
-				needApplyMoney = fourHundred;
-			}
-		}
-		Integer update = userMapper.subYhsMoney(user.getId(), needApplyMoney);
-		if (update == 1) {
-			distributeMoneyApply = Optional.ofNullable(distributeMoneyApply).orElse(new YhShopDistributeMoneyApply());
-			distributeMoneyApply.setUserId(userId);
-			distributeMoneyApply.setMoney(needApplyMoney);
-			distributeMoneyApply.setAccount(applyMoneyReq.getAccount());
-			distributeMoneyApply.setRealName(applyMoneyReq.getRealName());
-			distributeMoneyApply.setWalletAddr(applyMoneyReq.getWalletAddr());
-			distributeMoneyApply.setRemark(applyMoneyReq.getRemark());
-			distributeMoneyApply.setType(applyMoneyReq.getType());
-			if (isTakeAll != null && isTakeAll) {
-				distributeMoneyApply.setVerifyStatus(YhShopDistributeMoneyApply.Status.verifying);
-			} else {
-				TransferAccountsReq req = new TransferAccountsReq();
-				req.setMoney(needApplyMoney);
-				req.setAccount(applyMoneyReq.getAccount());
-				req.setName(applyMoneyReq.getRealName());
-				req.setChannelType(2);
-				req.setUserId(userId);
-				req.setRemark("小店提现");
-				AlipayResponse alipayResponse = transferFuncService.transferAccounts(req);
-				if (alipayResponse.isSuccess()) {
-					distributeMoneyApply.setVerifyStatus(YhShopDistributeMoneyApply.Status.success);
-				} else {
-					distributeMoneyApply.setVerifyStatus(YhShopDistributeMoneyApply.Status.fail);
-					distributeMoneyApply.setReason(alipayResponse.getSubMsg());
-					userBenefitsService.addYhsMoney(userId, distributeMoneyApply.getMoney());
-					if (StrUtil.equals(alipayResponse.getSubCode(), "SECURITY_CHECK_FAILED")) {
-						return GatewayResponse.FAIL.newBuilder().setMsg("当前支付宝提现人数较多,请稍后再试").toResult();
-					}
-					return GatewayResponse.FAIL.newBuilder().setMsg(alipayResponse.getSubMsg()).toResult();
-				}
-			}
-			try {
-				yhShopDistributeMoneyApplyMapper.insert(distributeMoneyApply);
-				//大额提现 超过400
-				if (envCommonService.isPrdEnv() && distributeMoneyApply.getVerifyStatus() == YhShopDistributeMoneyApply.Status.verifying && distributeMoneyApply.getMoney().compareTo(fourHundred) > 0) {
-					SmsUtil.sendLuoKey2Msg(Constant.ZK_MOBILE, "小店店铺有大额提现申请【银河录像局】");
-				}
-			} catch (Exception e) {
-				userBenefitsService.addYhsMoney(userId, distributeMoneyApply.getMoney());
-				return GatewayResponse.FAIL.newBuilder().setMsg("网络错误,请重试").toResult();
-			}
-			return GatewayResponse.SUCCESS.newBuilder().toResult(distributeMoneyApply);
-		}
-		throw BusinessRuntimeException.getInstance("系统异常,请重新提交提现申请");
+		return transferFuncService.yhShopDistributeApply(applyMoneyReq);
 	}
 
 	public boolean isToday(DateTime first, DateTime end) {

+ 15 - 0
netflix-service/src/main/java/com/cyksj/service/pay/TransferFuncService.java

@@ -1,7 +1,10 @@
 package com.cyksj.service.pay;
 
 import com.alipay.api.AlipayResponse;
+import com.cyksj.dto.Result;
+import com.cyksj.model.request.ApplyMoneyReq;
 import com.cyksj.model.request.TransferAccountsReq;
+import com.cyksj.model.request.YhShopApplyMoneyReq;
 
 /*
  *项目名: yhlxj
@@ -10,6 +13,18 @@ import com.cyksj.model.request.TransferAccountsReq;
  *创建时间:2023/9/20 18:54
  */
 public interface TransferFuncService {
+
+	/**
+	 * 分销渠道提现
+	 */
+	Result distributeApply(ApplyMoneyReq applyMoneyReq) throws Exception;
+
+	/**
+	 * 小店店铺提现
+	 */
+	Result yhShopDistributeApply(YhShopApplyMoneyReq applyMoneyReq) throws Exception;
+
+
 	/**
 	 * 支付宝红包转账
 	 */

+ 233 - 2
netflix-service/src/main/java/com/cyksj/service/pay/impl/TransferFuncServiceImpl.java

@@ -1,6 +1,7 @@
 package com.cyksj.service.pay.impl;
 
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import com.alipay.api.AlipayClient;
@@ -9,22 +10,37 @@ import com.alipay.api.AlipayResponse;
 import com.alipay.api.domain.AlipayFundTransUniTransferModel;
 import com.alipay.api.domain.Participant;
 import com.alipay.api.request.AlipayFundTransUniTransferRequest;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.EnvCommonService;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.constant.TransferConstant;
+import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.snowflake.Sequence;
 import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.SmsUtil;
 import com.cyksj.config.zfb.AliPayClientFactory;
 import com.cyksj.config.zfb.ZfbProductCode;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.TransferAccountsRecordMapper;
-import com.cyksj.model.entity.ShopConfig;
-import com.cyksj.model.entity.TransferAccountsRecord;
+import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.manage.distribute.DistributeMoneyApplyMapper;
+import com.cyksj.mapper.manage.distribute.DistributePointsExchangeMoneyMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
+import com.cyksj.mapper.shop.YhShopDistributeMoneyApplyMapper;
+import com.cyksj.mapper.shop.YhShopMapper;
+import com.cyksj.model.entity.*;
+import com.cyksj.model.request.ApplyMoneyReq;
 import com.cyksj.model.request.TransferAccountsReq;
+import com.cyksj.model.request.YhShopApplyMoneyReq;
 import com.cyksj.service.pay.TransferFuncService;
+import com.cyksj.service.user.UserBenefitsService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Optional;
 
 /*
@@ -41,8 +57,223 @@ public class TransferFuncServiceImpl implements TransferFuncService {
 
 	private final TransferAccountsRecordMapper transferAccountsRecordMapper;
 
+	private final YhShopMapper yhShopMapper;
+
+	private final UserMapper userMapper;
+
+	private final UserBenefitsService userBenefitsService;
+
+	private final YhShopDistributeMoneyApplyMapper yhShopDistributeMoneyApplyMapper;
+
 	private final EnvCommonService envCommonService;
 
+	private final UserDistributeMapper userDistributeMapper;
+
+	private final DistributePointsExchangeMoneyMapper distributePointsExchangeMoneyMapper;
+
+	private final DistributeMoneyApplyMapper distributeMoneyApplyMapper;
+
+	@Override
+	public Result distributeApply(ApplyMoneyReq applyMoneyReq) throws Exception {
+		Long userId = applyMoneyReq.getUserId();
+		User user = userMapper.selectById(userId);
+		if (user == null) {
+			throw BusinessRuntimeException.getInstance("请先授权登录");
+		}
+		Boolean isTakeAll = applyMoneyReq.getIsTakeAll();
+		DistributeMoneyApply.Type type = applyMoneyReq.getType();
+		if (type == null) type = DistributeMoneyApply.Type.zfb;
+		if (type == DistributeMoneyApply.Type.zfb) {
+			if (ObjectUtil.hasEmpty(applyMoneyReq.getAccount(), applyMoneyReq.getRealName())) {
+				throw BusinessRuntimeException.getInstance("必填项不能为空");
+			}
+			if (applyMoneyReq.getAccount().length() > 255 || applyMoneyReq.getRealName().length() > 32) {
+				throw BusinessRuntimeException.getInstance("请输入正确的账户信息");
+			}
+		}
+		if (type == DistributeMoneyApply.Type.usdt) {
+			if (StrUtil.isEmpty(applyMoneyReq.getWalletAddr())) {
+				throw BusinessRuntimeException.getInstance("USDT提现钱包地址不能为空");
+			}
+			if (applyMoneyReq.getWalletAddr().length() > 1000) {
+				throw BusinessRuntimeException.getInstance("请输入正确的钱包地址");
+			}
+			if (StrUtil.isNotBlank(applyMoneyReq.getRemark()) && applyMoneyReq.getRemark().length() > 512) {
+				throw BusinessRuntimeException.getInstance("备注过多");
+			}
+			isTakeAll = true;
+
+		}
+		DistributeMoneyApply distributeMoneyApply = null;
+		if (type == DistributeMoneyApply.Type.pwdRed) {
+			distributeMoneyApply = userDistributeMapper.selectRelationBusiness(userId);
+			isTakeAll = true;
+		}
+		BigDecimal userPoints = user.getPoints();
+		DistributePointsExchangeMoney distributePointsExchangeMoney = distributePointsExchangeMoneyMapper.selectOne(Wrappers.lambdaQuery(DistributePointsExchangeMoney.class).orderByDesc(DistributePointsExchangeMoney::getPoints).last("limit 1"));
+		BigDecimal minPoints = BigDecimal.valueOf(distributePointsExchangeMoney.getMinPoints());
+		BigDecimal ratePoints = BigDecimal.valueOf(distributePointsExchangeMoney.getPoints());
+		BigDecimal minMoney = distributePointsExchangeMoney.getMoney();
+		if (userPoints.compareTo(minPoints) < 0) {
+			throw BusinessRuntimeException.getInstance("您当前积分未达到积分门槛,无法提现");
+		}
+//		//今日是否已提现
+//		DistributeMoneyApply apply = distributeMoneyApplyMapper.selectOne(Wrappers.lambdaQuery(DistributeMoneyApply.class).eq(DistributeMoneyApply::getUserId, userId).between(DistributeMoneyApply::getCreatedTime, DateUtil.beginOfDay(DateTime.now()), DateUtil.endOfDay(DateTime.now())).last("limit 1"));
+//		if (apply != null) {
+//			throw BusinessRuntimeException.getInstance("今日已提现,请明日再进行操作");
+//		}
+		BigDecimal num = userPoints.divide(ratePoints, 0, RoundingMode.DOWN);
+		BigDecimal needApplyMoney = num.multiply(minMoney);
+		BigDecimal needSubPoints = num.multiply(ratePoints);
+		BigDecimal fourHundred = BigDecimal.valueOf(4 * 100 * 100);
+		if (isTakeAll == null || !isTakeAll) {
+			if (needApplyMoney.compareTo(fourHundred) > 0) {
+				needApplyMoney = fourHundred;
+				needSubPoints = fourHundred.divide(minMoney).multiply(ratePoints);
+			}
+		}
+		Integer update = userMapper.subPoints(user.getId(), needSubPoints);
+		if (update == 1) {
+			distributeMoneyApply = Optional.ofNullable(distributeMoneyApply).orElse(new DistributeMoneyApply());
+			distributeMoneyApply.setUserId(userId);
+			distributeMoneyApply.setPoints(needSubPoints);
+			distributeMoneyApply.setMoney(needApplyMoney);
+			distributeMoneyApply.setAccount(applyMoneyReq.getAccount());
+			distributeMoneyApply.setRealName(applyMoneyReq.getRealName());
+			distributeMoneyApply.setWalletAddr(applyMoneyReq.getWalletAddr());
+			distributeMoneyApply.setRemark(applyMoneyReq.getRemark());
+			distributeMoneyApply.setType(applyMoneyReq.getType());
+			if (isTakeAll != null && isTakeAll) {
+				distributeMoneyApply.setVerifyStatus(DistributeMoneyApply.Status.verifying);
+			} else {
+				TransferAccountsReq req = new TransferAccountsReq();
+				req.setMoney(needApplyMoney);
+				req.setAccount(applyMoneyReq.getAccount());
+				req.setName(applyMoneyReq.getRealName());
+				req.setPoints(needSubPoints);
+				req.setUserId(userId);
+				req.setChannelType(1);
+				req.setRemark("分销提现");
+				AlipayResponse alipayResponse = transferAccounts(req);
+				if (alipayResponse.isSuccess()) {
+					distributeMoneyApply.setVerifyStatus(DistributeMoneyApply.Status.success);
+				} else {
+					distributeMoneyApply.setVerifyStatus(DistributeMoneyApply.Status.fail);
+					distributeMoneyApply.setReason(alipayResponse.getSubMsg());
+					userBenefitsService.addDistributePoints(userId, distributeMoneyApply.getPoints());
+					if (StrUtil.equals(alipayResponse.getSubCode(), "SECURITY_CHECK_FAILED")) {
+						return GatewayResponse.FAIL.newBuilder().setMsg("当前支付宝提现人数较多,请稍后再试").toResult();
+					}
+					return GatewayResponse.FAIL.newBuilder().setMsg(alipayResponse.getSubMsg()).toResult();
+				}
+			}
+			try {
+				distributeMoneyApplyMapper.insert(distributeMoneyApply);
+				//大额提现 超过400
+				if (envCommonService.isPrdEnv() && distributeMoneyApply.getVerifyStatus() == DistributeMoneyApply.Status.verifying && distributeMoneyApply.getMoney().compareTo(fourHundred) > 0) {
+					SmsUtil.sendLuoKey2Msg(Constant.ZK_MOBILE, "推广有大额提现申请【银河录像局】");
+				}
+			} catch (Exception e) {
+				userBenefitsService.addDistributePoints(userId, distributeMoneyApply.getPoints());
+				return GatewayResponse.FAIL.newBuilder().setMsg("网络错误,请重试").toResult();
+			}
+			return GatewayResponse.SUCCESS.newBuilder().toResult(distributeMoneyApply);
+		}
+		throw BusinessRuntimeException.getInstance("系统异常,请重新提交提现申请");
+	}
+
+	@Override
+	public Result yhShopDistributeApply(YhShopApplyMoneyReq applyMoneyReq) throws Exception {
+		Long userId = applyMoneyReq.getUserId();
+		User user = userMapper.selectById(userId);
+		if (user == null) {
+			throw BusinessRuntimeException.getInstance("请先授权登录");
+		}
+		Boolean isTakeAll = applyMoneyReq.getIsTakeAll();
+		YhShopDistributeMoneyApply.Type type = applyMoneyReq.getType();
+		if (type == null) type = YhShopDistributeMoneyApply.Type.zfb;
+		if (type == YhShopDistributeMoneyApply.Type.zfb) {
+			if (ObjectUtil.hasEmpty(applyMoneyReq.getAccount(), applyMoneyReq.getRealName())) {
+				throw BusinessRuntimeException.getInstance("必填项不能为空");
+			}
+			if (applyMoneyReq.getAccount().length() > 255 || applyMoneyReq.getRealName().length() > 32) {
+				throw BusinessRuntimeException.getInstance("请输入正确的账户信息");
+			}
+		}
+		if (type == YhShopDistributeMoneyApply.Type.usdt) {
+			if (StrUtil.isEmpty(applyMoneyReq.getWalletAddr())) {
+				throw BusinessRuntimeException.getInstance("USDT提现钱包地址不能为空");
+			}
+			if (applyMoneyReq.getWalletAddr().length() > 1000) {
+				throw BusinessRuntimeException.getInstance("请输入正确的钱包地址");
+			}
+			if (StrUtil.isNotBlank(applyMoneyReq.getRemark()) && applyMoneyReq.getRemark().length() > 512) {
+				throw BusinessRuntimeException.getInstance("备注过多");
+			}
+			isTakeAll = true;
+
+		}
+		YhShopDistributeMoneyApply distributeMoneyApply = null;
+		if (type == YhShopDistributeMoneyApply.Type.pwdRed) {
+			distributeMoneyApply = yhShopMapper.selectRelationBusiness(userId);
+			isTakeAll = true;
+		}
+
+		BigDecimal needApplyMoney = user.getYhsMoney();
+		BigDecimal fourHundred = BigDecimal.valueOf(4 * 10000);
+		if (isTakeAll == null || !isTakeAll) {
+			if (needApplyMoney.compareTo(fourHundred) > 0) {
+				needApplyMoney = fourHundred;
+			}
+		}
+		Integer update = userMapper.subYhsMoney(user.getId(), needApplyMoney);
+		if (update == 1) {
+			distributeMoneyApply = Optional.ofNullable(distributeMoneyApply).orElse(new YhShopDistributeMoneyApply());
+			distributeMoneyApply.setUserId(userId);
+			distributeMoneyApply.setMoney(needApplyMoney);
+			distributeMoneyApply.setAccount(applyMoneyReq.getAccount());
+			distributeMoneyApply.setRealName(applyMoneyReq.getRealName());
+			distributeMoneyApply.setWalletAddr(applyMoneyReq.getWalletAddr());
+			distributeMoneyApply.setRemark(applyMoneyReq.getRemark());
+			distributeMoneyApply.setType(applyMoneyReq.getType());
+			if (isTakeAll != null && isTakeAll) {
+				distributeMoneyApply.setVerifyStatus(YhShopDistributeMoneyApply.Status.verifying);
+			} else {
+				TransferAccountsReq req = new TransferAccountsReq();
+				req.setMoney(needApplyMoney);
+				req.setAccount(applyMoneyReq.getAccount());
+				req.setName(applyMoneyReq.getRealName());
+				req.setChannelType(2);
+				req.setUserId(userId);
+				req.setRemark("小店提现");
+				AlipayResponse alipayResponse = transferAccounts(req);
+				if (alipayResponse.isSuccess()) {
+					distributeMoneyApply.setVerifyStatus(YhShopDistributeMoneyApply.Status.success);
+				} else {
+					distributeMoneyApply.setVerifyStatus(YhShopDistributeMoneyApply.Status.fail);
+					distributeMoneyApply.setReason(alipayResponse.getSubMsg());
+					userBenefitsService.addYhsMoney(userId, distributeMoneyApply.getMoney());
+					if (StrUtil.equals(alipayResponse.getSubCode(), "SECURITY_CHECK_FAILED")) {
+						return GatewayResponse.FAIL.newBuilder().setMsg("当前支付宝提现人数较多,请稍后再试").toResult();
+					}
+					return GatewayResponse.FAIL.newBuilder().setMsg(alipayResponse.getSubMsg()).toResult();
+				}
+			}
+			try {
+				yhShopDistributeMoneyApplyMapper.insert(distributeMoneyApply);
+				//大额提现 超过400
+				if (envCommonService.isPrdEnv() && distributeMoneyApply.getVerifyStatus() == YhShopDistributeMoneyApply.Status.verifying && distributeMoneyApply.getMoney().compareTo(fourHundred) > 0) {
+					SmsUtil.sendLuoKey2Msg(Constant.ZK_MOBILE, "小店店铺有大额提现申请【银河录像局】");
+				}
+			} catch (Exception e) {
+				userBenefitsService.addYhsMoney(userId, distributeMoneyApply.getMoney());
+				return GatewayResponse.FAIL.newBuilder().setMsg("网络错误,请重试").toResult();
+			}
+			return GatewayResponse.SUCCESS.newBuilder().toResult(distributeMoneyApply);
+		}
+		throw BusinessRuntimeException.getInstance("系统异常,请重新提交提现申请");
+	}
+
 	@Override
 	public AlipayResponse transferAccounts(TransferAccountsReq transferAccountsReq) throws Exception {
 		Long userId = transferAccountsReq.getUserId();

+ 55 - 0
netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsApplyMoneyController.java

@@ -0,0 +1,55 @@
+package com.cyksj.web.controller.cps;
+
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.request.ApplyMoneyReq;
+import com.cyksj.model.views.CpsApplyMoneyView;
+import com.cyksj.service.pay.TransferFuncService;
+import com.cyksj.web.util.StpCpsManageUser;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+/** cps后台/提现中心
+ * 项目名: yhlxj
+ * 文件名: CpsApplyMoneyController
+ * 创建者: JavaZou
+ * 创建时间:2023/10/31 15:26
+ */
+@RestController
+@RequestMapping("/cps/manage/applyMoney")
+@RequiredArgsConstructor
+public class CpsApplyMoneyController {
+	private final TransferFuncService transferFuncService;
+
+	private final BeanSearcher beanSearcher;
+
+	private final HttpServletRequest request;
+
+	/**
+	 * cps用户提现
+	 */
+	@PostMapping
+	public Result<String> applyMoney(@RequestBody ApplyMoneyReq applyMoneyReq) throws Exception {
+		long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
+		applyMoneyReq.setUserId(cpsUserId);
+		return transferFuncService.distributeApply(applyMoneyReq);
+	}
+
+	/**
+	 * 提现列表
+	 */
+	@GetMapping("/get")
+	public Result<SearchResult<CpsApplyMoneyView>> getApplyMoneyList() {
+		long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
+		SearchResult<CpsApplyMoneyView> search = beanSearcher.search(CpsApplyMoneyView.class,
+				MapUtils.flatBuilder(request.getParameterMap())
+						.field(CpsApplyMoneyView::getUserId, cpsUserId)
+						.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+}

+ 27 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsOrderController.java

@@ -2,8 +2,10 @@ package com.cyksj.web.controller.manage;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.Log;
@@ -27,6 +29,7 @@ import com.cyksj.model.excel.ExcelOrderDonData;
 import com.cyksj.model.excel.ExcelRealGoodsOrderData;
 import com.cyksj.model.excel.ExcelRealGoodsUserInterestData;
 import com.cyksj.model.excel.ExcelRealGoodsUserInterestHasPaymentData;
+import com.cyksj.model.excel.merge.RealGoodsOrderLineStrategy;
 import com.cyksj.model.manage.request.ReqSetLogisticsPost;
 import com.cyksj.model.manage.views.AccountView;
 import com.cyksj.model.manage.views.OrderDonBackView;
@@ -49,9 +52,11 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * @author chan
@@ -205,10 +210,11 @@ public class CmsOrderController {
 	 * 导出实物模板 订单excel
 	 */
 	@GetMapping("/export/realGoods")
-	public void exportRealGoods(HttpServletResponse response) {
+	public void exportRealGoods(HttpServletResponse response) throws IOException {
 		List<ExcelRealGoodsOrderData> list = beanSearcher.searchAll(ExcelRealGoodsOrderData.class, MapUtils.flatBuilder(request.getParameterMap())
 				.field(ExcelOrderDonData::getGoodsDonType, Constant.realGoodsType).op(Operator.InList)
 				.build());
+		AtomicInteger index = new AtomicInteger(1);
 		list.forEach(data -> {
 			data.setPayType("寄付现结");
 			if (data.getGoodsDonType() == Constant.realGoodsType.get(0)) {
@@ -216,8 +222,27 @@ public class CmsOrderController {
 			} else if (data.getGoodsDonType() == Constant.realGoodsType.get(1)) {
 				data.setRealGoodName("银河潮玩");
 			}
+			data.setIndex(index.getAndIncrement());
 		});
-		EasyExcelUtils.createExcelStreamMutilByEasyExcel(response, ExcelRealGoodsOrderData.class, list, "实物订单列表", "实物订单列表", ExcelTypeEnum.XLSX, null);
+		if (CollUtil.isEmpty(list)) {
+			throw BusinessRuntimeException.getInstance("导出数据为空");
+		}
+
+		response.setContentType("application/x-download");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding("utf-8");
+		response.setHeader("Content-disposition",
+				"attachment;filename=" + new String("实物订单列表".getBytes("utf-8"), "ISO-8859-1") + ExcelTypeEnum.XLS.getValue());
+
+		EasyExcel.write(response.getOutputStream())
+				.head(ExcelRealGoodsOrderData.class)
+				//设置合并单元格策略
+				.registerWriteHandler(new RealGoodsOrderLineStrategy())
+				.excelType(ExcelTypeEnum.XLS)
+				.sheet("实物订单列表")
+				//设置头部标题从那行开始
+				.relativeHeadRowIndex(2)
+				.doWrite(list);
 	}
 
 	@PutMapping("/update/status")

+ 2 - 113
netflix-web/src/main/java/com/cyksj/web/controller/user/DistributePopularizeController.java

@@ -2,17 +2,13 @@ package com.cyksj.web.controller.user;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
-import com.alipay.api.AlipayResponse;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.EnvCommonService;
 import com.cyksj.common.annotation.NoSubmit;
-import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
-import com.cyksj.common.util.SmsUtil;
 import com.cyksj.common.util.ValidatorUtil;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
@@ -28,11 +24,9 @@ import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.ApplyMoneyReq;
-import com.cyksj.model.request.TransferAccountsReq;
 import com.cyksj.model.views.*;
 import com.cyksj.service.distribute.DistributeService;
 import com.cyksj.service.pay.TransferFuncService;
-import com.cyksj.service.user.UserBenefitsService;
 import com.cyksj.service.user.UserService;
 import com.cyksj.web.util.StpUserUtil;
 import com.ejlchina.searcher.BeanSearcher;
@@ -45,7 +39,6 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -86,8 +79,6 @@ public class DistributePopularizeController {
 
 	private final TransferFuncService transferFuncService;
 
-	private final UserBenefitsService userBenefitsService;
-
 	private final DistributeService distributeService;
 
 	private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
@@ -241,110 +232,8 @@ public class DistributePopularizeController {
 	@Transactional(rollbackFor = Throwable.class)
 	public Result<DistributeMoneyApply> applyMoney(@RequestBody ApplyMoneyReq applyMoneyReq) throws Exception {
 		Long userId = StpUserUtil.getLoginIdAsLong();
-		User user = userMapper.selectById(userId);
-		if (user == null) {
-			throw BusinessRuntimeException.getInstance("请先授权登录");
-		}
-		Boolean isTakeAll = applyMoneyReq.getIsTakeAll();
-		DistributeMoneyApply.Type type = applyMoneyReq.getType();
-		if (type == null) type = DistributeMoneyApply.Type.zfb;
-		if (type == DistributeMoneyApply.Type.zfb) {
-			if (ObjectUtil.hasEmpty(applyMoneyReq.getAccount(), applyMoneyReq.getRealName())) {
-				throw BusinessRuntimeException.getInstance("必填项不能为空");
-			}
-			if (applyMoneyReq.getAccount().length() > 255 || applyMoneyReq.getRealName().length() > 32) {
-				throw BusinessRuntimeException.getInstance("请输入正确的账户信息");
-			}
-		}
-		if (type == DistributeMoneyApply.Type.usdt) {
-			if (StrUtil.isEmpty(applyMoneyReq.getWalletAddr())) {
-				throw BusinessRuntimeException.getInstance("USDT提现钱包地址不能为空");
-			}
-			if (applyMoneyReq.getWalletAddr().length() > 1000) {
-				throw BusinessRuntimeException.getInstance("请输入正确的钱包地址");
-			}
-			if (StrUtil.isNotBlank(applyMoneyReq.getRemark()) && applyMoneyReq.getRemark().length() > 512) {
-				throw BusinessRuntimeException.getInstance("备注过多");
-			}
-			isTakeAll = true;
-
-		}
-		DistributeMoneyApply distributeMoneyApply = null;
-		if (type == DistributeMoneyApply.Type.pwdRed) {
-			distributeMoneyApply = userDistributeMapper.selectRelationBusiness(userId);
-			isTakeAll = true;
-		}
-		BigDecimal userPoints = user.getPoints();
-		DistributePointsExchangeMoney distributePointsExchangeMoney = distributePointsExchangeMoneyMapper.selectOne(Wrappers.lambdaQuery(DistributePointsExchangeMoney.class).orderByDesc(DistributePointsExchangeMoney::getPoints).last("limit 1"));
-		BigDecimal minPoints = BigDecimal.valueOf(distributePointsExchangeMoney.getMinPoints());
-		BigDecimal ratePoints = BigDecimal.valueOf(distributePointsExchangeMoney.getPoints());
-		BigDecimal minMoney = distributePointsExchangeMoney.getMoney();
-		if (userPoints.compareTo(minPoints) < 0) {
-			throw BusinessRuntimeException.getInstance("您当前积分未达到积分门槛,无法提现");
-		}
-//		//今日是否已提现
-//		DistributeMoneyApply apply = distributeMoneyApplyMapper.selectOne(Wrappers.lambdaQuery(DistributeMoneyApply.class).eq(DistributeMoneyApply::getUserId, userId).between(DistributeMoneyApply::getCreatedTime, DateUtil.beginOfDay(DateTime.now()), DateUtil.endOfDay(DateTime.now())).last("limit 1"));
-//		if (apply != null) {
-//			throw BusinessRuntimeException.getInstance("今日已提现,请明日再进行操作");
-//		}
-		BigDecimal num = userPoints.divide(ratePoints, 0, RoundingMode.DOWN);
-		BigDecimal needApplyMoney = num.multiply(minMoney);
-		BigDecimal needSubPoints = num.multiply(ratePoints);
-		BigDecimal fourHundred = BigDecimal.valueOf(4 * 100 * 100);
-		if (isTakeAll == null || !isTakeAll) {
-			if (needApplyMoney.compareTo(fourHundred) > 0) {
-				needApplyMoney = fourHundred;
-				needSubPoints = fourHundred.divide(minMoney).multiply(ratePoints);
-			}
-		}
-		Integer update = userMapper.subPoints(user.getId(), needSubPoints);
-		if (update == 1) {
-			distributeMoneyApply = Optional.ofNullable(distributeMoneyApply).orElse(new DistributeMoneyApply());
-			distributeMoneyApply.setUserId(userId);
-			distributeMoneyApply.setPoints(needSubPoints);
-			distributeMoneyApply.setMoney(needApplyMoney);
-			distributeMoneyApply.setAccount(applyMoneyReq.getAccount());
-			distributeMoneyApply.setRealName(applyMoneyReq.getRealName());
-			distributeMoneyApply.setWalletAddr(applyMoneyReq.getWalletAddr());
-			distributeMoneyApply.setRemark(applyMoneyReq.getRemark());
-			distributeMoneyApply.setType(applyMoneyReq.getType());
-			if (isTakeAll != null && isTakeAll) {
-				distributeMoneyApply.setVerifyStatus(DistributeMoneyApply.Status.verifying);
-			} else {
-				TransferAccountsReq req = new TransferAccountsReq();
-				req.setMoney(needApplyMoney);
-				req.setAccount(applyMoneyReq.getAccount());
-				req.setName(applyMoneyReq.getRealName());
-				req.setPoints(needSubPoints);
-				req.setUserId(userId);
-				req.setChannelType(1);
-				req.setRemark("分销提现");
-				AlipayResponse alipayResponse = transferFuncService.transferAccounts(req);
-				if (alipayResponse.isSuccess()) {
-					distributeMoneyApply.setVerifyStatus(DistributeMoneyApply.Status.success);
-				} else {
-					distributeMoneyApply.setVerifyStatus(DistributeMoneyApply.Status.fail);
-					distributeMoneyApply.setReason(alipayResponse.getSubMsg());
-					userBenefitsService.addDistributePoints(userId, distributeMoneyApply.getPoints());
-					if (StrUtil.equals(alipayResponse.getSubCode(), "SECURITY_CHECK_FAILED")) {
-						return GatewayResponse.FAIL.newBuilder().setMsg("当前支付宝提现人数较多,请稍后再试").toResult();
-					}
-					return GatewayResponse.FAIL.newBuilder().setMsg(alipayResponse.getSubMsg()).toResult();
-				}
-			}
-			try {
-				distributeMoneyApplyMapper.insert(distributeMoneyApply);
-				//大额提现 超过400
-				if (envCommonService.isPrdEnv() && distributeMoneyApply.getVerifyStatus() == DistributeMoneyApply.Status.verifying && distributeMoneyApply.getMoney().compareTo(fourHundred) > 0) {
-					SmsUtil.sendLuoKey2Msg(Constant.ZK_MOBILE, "推广有大额提现申请【银河录像局】");
-				}
-			} catch (Exception e) {
-				userBenefitsService.addDistributePoints(userId, distributeMoneyApply.getPoints());
-				return GatewayResponse.FAIL.newBuilder().setMsg("网络错误,请重试").toResult();
-			}
-			return GatewayResponse.SUCCESS.newBuilder().toResult(distributeMoneyApply);
-		}
-		throw BusinessRuntimeException.getInstance("系统异常,请重新提交提现申请");
+		applyMoneyReq.setUserId(userId);
+		return transferFuncService.distributeApply(applyMoneyReq);
 	}
 
 	/**

+ 1 - 11
pom.xml

@@ -112,17 +112,7 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>easyexcel</artifactId>
-            <version>2.0.5</version>
-<!--            <exclusions>-->
-<!--                <exclusion>-->
-<!--                    <groupId>okhttp</groupId>-->
-<!--                    <artifactId>com.squareup.okhttp3</artifactId>-->
-<!--                </exclusion>-->
-<!--                <exclusion>-->
-<!--                    <groupId>com.alibaba</groupId>-->
-<!--                    <artifactId>fastjson</artifactId>-->
-<!--                </exclusion>-->
-<!--            </exclusions>-->
+            <version>2.2.5</version>
         </dependency>
 
         <!-- 提供redis连接池 -->