From 576c842301a9fabd7719fdb3539806bf650ae31d Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Fri, 22 Aug 2025 15:15:31 +0800 Subject: [PATCH] feat(ai): 新增产品知识点列表接口并优化 AI 思维链输出 --- src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java | 128 ++++++++++++++++++++++++++++++++++++------ 1 files changed, 110 insertions(+), 18 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java index ecded8a..95c77c8 100644 --- a/src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java @@ -23,6 +23,7 @@ import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -41,15 +42,18 @@ import java.io.*; import java.math.BigDecimal; import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Slf4j @Service @RequiredArgsConstructor public class XcxPayServiceImpl implements IXcxPayService { + + @Autowired + private HappyActivityOrderMapper happyActivityOrderMapper; + + @Autowired + private HappyActivityMapper happyActivityMapper; @Autowired private MallOrderInfoMapper mallOrderInfoMapper; @@ -64,6 +68,8 @@ @Autowired private MallMemberWithdrawMapper mallMemberWithdrawMapper; private final IMallMoneyFlowService mallMoneyFlowService; + private final ClothesTypeMapper clothesTypeMapper; + private final ClothesOrderMapper clothesOrderMapper; @Autowired RedisUtils redisUtils; @@ -78,9 +84,13 @@ BrandWCPayRequestData payData; String productNames = "小程序充值"; MallMember mallMember = mallMemberMapper.selectById(apiRechargeWalletDto.getMemberId()); - String rechargeNo = "CZ_"+MallUtils.getOrderNum(); + String rechargeNo = apiRechargeWalletDto.getRechargeNo(); + Long agentApplyId = apiRechargeWalletDto.getAgentApplyId() == null ? 0L : apiRechargeWalletDto.getAgentApplyId(); Boolean debug = xcxProperties.getDebug(); - String attrStr = "{'rechargeNo':"+rechargeNo+",'memberId':"+mallMember.getId()+",'type':"+apiRechargeWalletDto.getType()+"}"; + String attrStr = "{'rechargeNo':"+rechargeNo + +",'memberId':"+mallMember.getId() + +",'agentApplyId':"+agentApplyId + +",'type':"+apiRechargeWalletDto.getType()+"}"; if (debug) { payData = weixinServiceUtil.createRechargeWallet("[测试]" + productNames, rechargeNo, 1, mallMember.getOpenId(), attrStr); @@ -88,13 +98,6 @@ payData = weixinServiceUtil.createRechargeWallet(productNames, rechargeNo, unit.multiply(money).intValue(),mallMember.getOpenId(), attrStr); } - mallMoneyFlowService.addMoneyFlow( - mallMember.getId(), - money, - MoneyFlowTypeEnum.RECHARGE.getValue(), - rechargeNo, - FlowTypeEnum.BALANCE.getValue(), - "余额充值",1); return payData; } @@ -205,6 +208,55 @@ } mallOrderInfo.setWxOrderNo(payData.getPrepay_id()); mallOrderInfoMapper.updateById(mallOrderInfo); + return payData; + } + + @Override + public BrandWCPayRequestData startPayment(ClothesOrder orderInfo) throws Exception { + BigDecimal unit = new BigDecimal("100"); + BigDecimal money = new BigDecimal(orderInfo.getRealAmount().toString()); + BrandWCPayRequestData payData; + + ClothesType clothesType = clothesTypeMapper.selectById(orderInfo.getTypeId()); + String productNames = clothesType.getName(); + MallMember mallMember = mallMemberMapper.selectById(orderInfo.getMemberId()); + Boolean debug = xcxProperties.getDebug(); + if (debug) { + payData = weixinServiceUtil.createOrder("[测试]" + productNames, orderInfo.getOrderNo(), + 1, mallMember.getOpenId(), String.valueOf(orderInfo.getId())); + } else { + payData = weixinServiceUtil.createOrder(productNames, orderInfo.getOrderNo(), + unit.multiply(money).intValue(),mallMember.getOpenId(), String.valueOf(orderInfo.getId())); + } + orderInfo.setPayOrderNo(payData.getPrepay_id()); + + clothesOrderMapper.update(null, + Wrappers.lambdaUpdate(ClothesOrder.class) + .set(ClothesOrder::getPayOrderNo, payData.getPrepay_id()) + .set(ClothesOrder::getUpdatedTime, new Date()) + .eq(ClothesOrder::getId, orderInfo.getId()) + ); + return payData; + } + + @Override + public BrandWCPayRequestData startPaymentActivity(HappyActivityOrder dto) throws Exception { + BigDecimal unit = new BigDecimal("100"); + BigDecimal money = new BigDecimal(dto.getAmount().toString()); + BrandWCPayRequestData payData; + HappyActivity happyActivity = happyActivityMapper.selectById(dto.getActivityId()); + String productNames = getActivityNames(happyActivity.getId(),dto.getNumCnt()); + MallMember mallMember = mallMemberMapper.selectById(dto.getMemberId()); + Boolean debug = xcxProperties.getDebug(); + if (debug) { + payData = weixinServiceUtil.createActivityOrder("[测试]" + productNames, dto.getOrderNo(), + 1, mallMember.getOpenId(), String.valueOf(dto.getId())); + } else { + payData = weixinServiceUtil.createActivityOrder(productNames, dto.getOrderNo(), + unit.multiply(money).intValue(),mallMember.getOpenId(), String.valueOf(dto.getId())); + } + dto.setWxOrderNo(payData.getPrepay_id()); + happyActivityOrderMapper.updateById(dto); return payData; } @@ -322,6 +374,17 @@ } } + if (type == 3) { + String inviteId = wxGenerateQrCodeDto.getTypeParam(); + MallMember member = mallMemberMapper.selectInfoByInviteId(inviteId); + if(ObjectUtil.isNotNull(member)){ + String wxCodeImg = member.getInviteImg(); + if(StrUtil.isNotBlank(wxCodeImg)){ + return new FebsResponse().success().data(wxCodeImg); + } + } + } + String randomNum = MallUtils.getRandomNum(5); String imgName="/user_" + randomNum + "_acode_1.jpg"; String codeImgPath = generateAcode(wxGenerateQrCodeDto.getScene(), wxGenerateQrCodeDto.getPage(), imgName, "400px", null); @@ -336,6 +399,15 @@ MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(uniqueCode); mallTeamLeader.setWxCodeImg(codeImgPath); mallTeamLeaderMapper.updateById(mallTeamLeader); + } + + if (type == 3) { + String inviteId = wxGenerateQrCodeDto.getTypeParam(); + MallMember member = mallMemberMapper.selectInfoByInviteId(inviteId); + if(ObjectUtil.isNotNull(member)){ + member.setInviteImg(codeImgPath); + mallMemberMapper.updateById(member); + } } return new FebsResponse().success().data(codeImgPath); } @@ -395,9 +467,11 @@ * @return */ //图片上传路径 - public static final String IMG_UPLOAD_PATH="/mnt/sdc/webresource/qianayi/wxcode"; + // todo 上线修改图片上传路径 + public static final String IMG_UPLOAD_PATH="/home/javaweb/webresource/upload/wxcode"; public String generateAcode(String scene,String path,String imgName,String width, Integer type){ - String urlPrefix="https://hwfile.csxuncong.com/qianayi/wxcode"; + // todo 上线修改图片上传路径 + String urlPrefix="https://hcres.csxuncong.com/wxcode"; String imgPath=IMG_UPLOAD_PATH+imgName; if(!FileUtil.exist(imgPath)){ @@ -406,12 +480,12 @@ String url = null; if (type == null) { // 该接口无数量限制,但是 scene 传参最大字符长度为32个字符 - url = StrFormatter.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={}",redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY).toString()); + url = StrUtil.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={}",redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY).toString()); obj.set("scene", scene); obj.set("page", path); } else { // 该接口存在数量限制, 总共可生成10w个, 但参数是接在path后面 - url = StrFormatter.format("https://api.weixin.qq.com/wxa/getwxacode?access_token={}", redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY).toString()); + url = StrUtil.format("https://api.weixin.qq.com/wxa/getwxacode?access_token={}", redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY).toString()); obj.set("page", path + "?" + scene ); } @@ -427,6 +501,7 @@ obj.set("is_hyaline", false); try { HttpResponse execute = HttpRequest.post(url).body(obj.toString(), "application/json").execute(); +// log.error("微信返回值:{}", execute.body()); InputStream inputStream = execute.bodyStream(); File file = new File(imgPath); FileUtil.writeFromStream(inputStream, file); @@ -451,7 +526,7 @@ } } log.debug("生成微信小程序码成功,路径:" + imgPath); - return urlPrefix+"/"+imgName; + return urlPrefix+imgName; } /** @@ -491,4 +566,21 @@ } return productNames; } + + /** + * 根据用户ID和订单ID获取所购买商品名称 + * @return 所含商品名称(多个以","隔开) + */ + public String getActivityNames(Long activityId,Integer numCnt) { + HappyActivity happyActivity = happyActivityMapper.selectById(activityId); + StringBuffer productNameBuffer = new StringBuffer(); + Integer maxLength = 25; + String goodsName = happyActivity.getName(); + if (goodsName.length() > maxLength) { + productNameBuffer.append(goodsName.substring(0, maxLength) + "*"+numCnt); + }else{ + productNameBuffer.append(goodsName+"*"+numCnt); + } + return productNameBuffer.toString(); + } } -- Gitblit v1.9.1