From 39f00ba62dcc9a706523f9382b8bd21534ce9cca Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 30 Aug 2023 11:30:24 +0800 Subject: [PATCH] // --- .../controller/MiniAppUserController.java | 56 +++++++++++++-- .../iformall/domain/po/UserBasicQrcode.java | 31 +++++++++ .../mapper/UserBasicQrcodeMapper.java | 12 ++++ .../com/iformall/service/QrCodeService.java | 13 ++++ .../service/UserBasicQrcodeService.java | 7 ++ .../service/impl/QrCodeServiceImpl.java | 26 +++++++ .../impl/UserBasicQrcodeServiceImpl.java | 68 +++++++++++++++++++ .../service/pay/PayServiceFactory.java | 18 +++++ .../UserDigitalAvatarOrderServiceImpl.java | 2 + .../iformall/sm/AiDigitalAvatarHelper.java | 1 - .../com/iformall/sm/DigitalAvatarParam.java | 1 + .../java/com/iformall/utils/Constant.java | 2 + .../mapper/UserBasicQrcodeMapper.xml | 47 +++++++++++++ 13 files changed, 279 insertions(+), 5 deletions(-) create mode 100644 suimangService/src/main/java/com/iformall/domain/po/UserBasicQrcode.java create mode 100644 suimangService/src/main/java/com/iformall/mapper/UserBasicQrcodeMapper.java create mode 100644 suimangService/src/main/java/com/iformall/service/UserBasicQrcodeService.java create mode 100644 suimangService/src/main/java/com/iformall/service/impl/UserBasicQrcodeServiceImpl.java create mode 100644 suimangService/src/main/resources/mapper/UserBasicQrcodeMapper.xml diff --git a/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java b/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java index 600c73e..840b0f6 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java @@ -18,10 +18,10 @@ import com.iformall.service.sm.InviteCodeInfoService; import com.iformall.service.sm.InviteCodeService; import com.iformall.service.sm.UserConsumptionPackageService; import com.iformall.service.sm.UserCreateVideoNumService; -import com.iformall.utils.Constant; -import com.iformall.utils.IPUtil; -import com.iformall.utils.PasswordHelper; -import com.iformall.utils.RedisCacheUtils; +import com.iformall.sm.AiDigitalAvatarHelper; +import com.iformall.sm.ShareImgParam; +import com.iformall.sm.ShareImgResult; +import com.iformall.utils.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -64,6 +64,9 @@ public class MiniAppUserController extends BaseController { @Autowired private WxCUserBasicInfoService wxCUserBasicInfoService; + @Autowired + private UserBasicQrcodeService userBasicQrcodeService; + @Autowired WxAppinfoService wxAppinfoService; @@ -235,4 +238,49 @@ public class MiniAppUserController extends BaseController { return new ResultData(resultMap); } + /** + * 获取二维码 + * + * @param map + * @return + */ + @PostMapping("/getUserQrcode") + @ApiOperation(value = "获取二维码", notes = "{\"encryptedData\":\"string\",\"iv\":\"string\"}") + public ResultData getUserQrcode(@RequestBody Map map) { + logger.info(map.toString()); + String appId = map.get("appId"); + String img = map.get("img"); + + if(StringUtils.isBlank(appId)){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "appId 不能为空"); + } + + + WxAppinfo wxAppinfo = wxAppinfoService.getOnlyByAppIdFromRedis(appId); + if(wxAppinfo == null){ + return new ResultData(ErrorCode.APP_ID_NOT_FOUND); + } + try { + //获取用户二维码 + String qrCode = userBasicQrcodeService.getQrCode(getMemberId(), wxAppinfo.getProjectType(), wxAppinfo.getPlat()); + ShareImgParam param = new ShareImgParam(); + String imgBasic = Base64Util.imageUrlToBase64(img); + param.setImg(imgBasic); + String qrcodeBasic = Base64Util.imageUrlToBase64(qrCode); + param.setWatermark_img(qrcodeBasic); + ShareImgResult shareImg = AiDigitalAvatarHelper.createShareImg(param); + if(shareImg.isSuccess()){ + return new ResultData(shareImg.getImg()); + }else{ + return new ResultData(ErrorCode.DEVICE_QRCODE_GET_FAILED.getCode(),shareImg.getMsg()); + } + + } catch (MallinkException e) { + return new ResultData(e.getErrorCode(), e.getMessage()); + }catch (Exception e) { + this.logger.error(e.getMessage(), e); + return new ResultData(ErrorCode.SYS_SERVER_ERROR); + } + } + } diff --git a/suimangService/src/main/java/com/iformall/domain/po/UserBasicQrcode.java b/suimangService/src/main/java/com/iformall/domain/po/UserBasicQrcode.java new file mode 100644 index 0000000..f84c4fc --- /dev/null +++ b/suimangService/src/main/java/com/iformall/domain/po/UserBasicQrcode.java @@ -0,0 +1,31 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Date; + +@TableName(value = "user_basic_qrcode") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class UserBasicQrcode extends TenantEntity { + + protected Long id; + + private Long userId; + + @io.swagger.annotations.ApiModelProperty(value="EnumProject",name="projectType") + private Integer projectType; + + @io.swagger.annotations.ApiModelProperty(value="",name="plat") + private Integer plat; + + @io.swagger.annotations.ApiModelProperty(value="",name="qrcode") + private String qrcode; + +} diff --git a/suimangService/src/main/java/com/iformall/mapper/UserBasicQrcodeMapper.java b/suimangService/src/main/java/com/iformall/mapper/UserBasicQrcodeMapper.java new file mode 100644 index 0000000..5aa5d83 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/mapper/UserBasicQrcodeMapper.java @@ -0,0 +1,12 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.UserBasicQrcode; + +import java.util.List; + +public interface UserBasicQrcodeMapper extends CommonMapper{ + + List findList(UserBasicQrcode record); + +} diff --git a/suimangService/src/main/java/com/iformall/service/QrCodeService.java b/suimangService/src/main/java/com/iformall/service/QrCodeService.java index 77c02da..3e8e753 100644 --- a/suimangService/src/main/java/com/iformall/service/QrCodeService.java +++ b/suimangService/src/main/java/com/iformall/service/QrCodeService.java @@ -5,6 +5,7 @@ import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumAppPlat; import com.iformall.enums.EnumPayVersion; import com.iformall.enums.EnumPayWay; +import com.iformall.enums.EnumProject; import com.iformall.exception.MallinkException; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestBody; @@ -25,4 +26,16 @@ public interface QrCodeService { int withText, String text1, String text2, String name,EnumAppPlat plat); + /** + * 生成无限二维码 + * @param project + * @param plat + * @param pageUrl + * @param sceneParam + * @param name + * @param plat + * @return + */ + ResultData uploadQrcode(EnumProject project,EnumAppPlat plat,String pageUrl, String sceneParam,String name); + } diff --git a/suimangService/src/main/java/com/iformall/service/UserBasicQrcodeService.java b/suimangService/src/main/java/com/iformall/service/UserBasicQrcodeService.java new file mode 100644 index 0000000..10d3e9d --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/UserBasicQrcodeService.java @@ -0,0 +1,7 @@ +package com.iformall.service; + +public interface UserBasicQrcodeService { + + String getQrCode(Long userId,Integer projectType,Integer plat); + +} diff --git a/suimangService/src/main/java/com/iformall/service/impl/QrCodeServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/QrCodeServiceImpl.java index d394d5c..57dd5b2 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/QrCodeServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/QrCodeServiceImpl.java @@ -9,6 +9,7 @@ import com.iformall.enums.EnumAppPlat; import com.iformall.enums.EnumPayVersion; import com.iformall.enums.EnumPayWay; import com.iformall.domain.po.WxAppinfo; +import com.iformall.enums.EnumProject; import com.iformall.exception.MallinkException; import com.iformall.file.aliyun.AliyunOSS; import com.iformall.service.QrCodeService; @@ -190,6 +191,31 @@ public class QrCodeServiceImpl implements QrCodeService { return new ResultData(); } + @Override + public ResultData uploadQrcode(EnumProject project, EnumAppPlat plat, String pageUrl, String sceneParam, String name) { + WxAppinfo appinfo = wxAppinfoService.getProjectCAppInfoFromRedis(project.getCode(),plat.getCode()); + if(appinfo == null){ + logger.error("生成二维码{}未找到对应的小程序"); + return new ResultData(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未找到程序应用"); + } + + try { + File codeFile = payServiceFactory.getQrcodeService(appinfo.getPlat()).getQrcode(appinfo, pageUrl, 1, sceneParam); + //上传 + ResultData data = aliyunOSS.uploadFile(null, ".png", new FileInputStream(codeFile)); + org.apache.commons.io.FileUtils.forceDelete(codeFile); + return data; + + } catch (WxErrorException e) { + logger.error("获取二维码 error1" + e.getMessage()); + return new ResultData(ErrorCode.DEVICE_QRCODE_GET_FAILED.getCode(),e.getMessage()); + } catch (Exception e) { + logger.error("获取二维码 error2" + e); + logger.error(e.getMessage()); + return new ResultData(ErrorCode.SYS_SERVER_ERROR); + } + } + private void copyFileToDest(int withText, String text1, String text2, String destPath1, File dest, File codeFile) throws IOException { if (withText == 1) { File dest1 = new File(destPath1); diff --git a/suimangService/src/main/java/com/iformall/service/impl/UserBasicQrcodeServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/UserBasicQrcodeServiceImpl.java new file mode 100644 index 0000000..f3315c9 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/impl/UserBasicQrcodeServiceImpl.java @@ -0,0 +1,68 @@ +package com.iformall.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; +import com.iformall.domain.po.UserBasicQrcode; +import com.iformall.enums.EnumAppPlat; +import com.iformall.enums.EnumProject; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.UserBasicQrcodeMapper; +import com.iformall.service.QrCodeService; +import com.iformall.service.UserBasicQrcodeService; +import com.iformall.utils.Constant; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +@Slf4j +public class UserBasicQrcodeServiceImpl implements UserBasicQrcodeService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + UserBasicQrcodeMapper userBasicQrcodeMapper; + + @Autowired + protected QrCodeService qrCodeService; + + @Override + public String getQrCode(Long userId, Integer projectType, Integer platType) { + UserBasicQrcode qrcode = new UserBasicQrcode(); + qrcode.setUserId(userId); + qrcode.setProjectType(projectType); + qrcode.setPlat(platType); + UserBasicQrcode userBasicQrcode = userBasicQrcodeMapper.selectOne(new QueryWrapper<>(qrcode)); + if(userBasicQrcode != null){ + return userBasicQrcode.getQrcode(); + } + EnumProject project = EnumProject.getEnum(projectType); + EnumAppPlat plat = EnumAppPlat.getByCode(platType); + String pageUrl = Constant.sharePageUrl; + String param = "t:in_u:"+userId; + String name = project.getCode() + "-" + plat.getCode() + "-" + userId.toString(); + ResultData resultData = qrCodeService.uploadQrcode(project, plat, pageUrl, param, name); + if(ResultData.SUCCESS == resultData.code){ + Map map = (Map) resultData.data; + String pathUrl = map.get("url"); + if(StringUtils.isBlank(pathUrl)){ + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR); + } + final IdWorker idWorker = IdWorker.get(); + qrcode.setId(idWorker.nextId()); + qrcode.setQrcode(pathUrl); + userBasicQrcodeMapper.insert(qrcode); + return pathUrl; + }else{ + throw new MallinkException(resultData.code ,resultData.message); + } + } + +} diff --git a/suimangService/src/main/java/com/iformall/service/pay/PayServiceFactory.java b/suimangService/src/main/java/com/iformall/service/pay/PayServiceFactory.java index 56656ba..81830a6 100644 --- a/suimangService/src/main/java/com/iformall/service/pay/PayServiceFactory.java +++ b/suimangService/src/main/java/com/iformall/service/pay/PayServiceFactory.java @@ -49,6 +49,7 @@ public class PayServiceFactory { private Map payVendorServiceMap = null; private Map payVendorShareMap = null; + private Map platQrcodeMap = null; @Autowired WxMiniAppPayAdapterService wxMiniAppPayService; @@ -123,6 +124,15 @@ public class PayServiceFactory { return qrcodeMap; } + private Map getPlatQrcodeMap() { + if (null == platQrcodeMap) { + platQrcodeMap = new ConcurrentHashMap(); + platQrcodeMap.put(EnumAppPlat.WX.getCode()+"_", wxMiniAppPayV3AdapterService); + platQrcodeMap.put(EnumAppPlat.TOUTIAO.getCode()+"_",ttMiniAppPayService); + } + return platQrcodeMap; + } + private Map getPayVendorServiceMap() { if (null == payVendorServiceMap) { payVendorServiceMap = new ConcurrentHashMap(); @@ -245,6 +255,14 @@ public class PayServiceFactory { } return service; } + + public PayAdapterService getQrcodeService(Integer type) throws MallinkException{ + PayAdapterService service = getPlatQrcodeMap().get(type+"_"); + if (null == service) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"payWay["+type+"] 二维码service未找到"); + } + return service; + } public CDrivingPayService getCDrivingPayService(Integer type,Integer payVersion) throws MallinkException{ PayAdapterService service = getServiceMap().get(type+"_"+payVersion); diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarOrderServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarOrderServiceImpl.java index cf42d9e..fcb4e9e 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarOrderServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarOrderServiceImpl.java @@ -240,6 +240,8 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder try{ DigitalAvatarParam param = new DigitalAvatarParam(); param.setBg_img(record.getDigitalAvatarSm()); + param.setNum_people(record.getDigitalAvatarType()); + if(EnumDigitalAvatarMouldType.persion_1.getCode().equals(record.getDigitalAvatarType())){ String imgUrl1 = record.getUserImageList().get(0); param.setImg_lift(Base64Util.imageUrlToBase64(imgUrl1)); diff --git a/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java b/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java index 8cea8ca..19a037f 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java +++ b/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java @@ -96,7 +96,6 @@ public class AiDigitalAvatarHelper { result.setMsg("success"); JSONObject data = jsonObject.getJSONObject("data"); - log.info("11111111111111"); List imgList = new ArrayList<>(); imgList.add(data.getString("img_0")); imgList.add(data.getString("img_1")); diff --git a/suimangService/src/main/java/com/iformall/sm/DigitalAvatarParam.java b/suimangService/src/main/java/com/iformall/sm/DigitalAvatarParam.java index 5d554c2..5ef982f 100644 --- a/suimangService/src/main/java/com/iformall/sm/DigitalAvatarParam.java +++ b/suimangService/src/main/java/com/iformall/sm/DigitalAvatarParam.java @@ -11,6 +11,7 @@ import java.util.Map; public class DigitalAvatarParam { private String bg_img; + private Integer num_people; private String img_lift; private String img_middle; private String img_right; diff --git a/suimangService/src/main/java/com/iformall/utils/Constant.java b/suimangService/src/main/java/com/iformall/utils/Constant.java index fe53f66..c5df385 100644 --- a/suimangService/src/main/java/com/iformall/utils/Constant.java +++ b/suimangService/src/main/java/com/iformall/utils/Constant.java @@ -28,6 +28,8 @@ public class Constant { public static final String indexPageUrl = "pages/index/index"; + public static final String sharePageUrl = "pages/login/index"; + // 1小时过期, public final static int H_EXPIRE = 3600; diff --git a/suimangService/src/main/resources/mapper/UserBasicQrcodeMapper.xml b/suimangService/src/main/resources/mapper/UserBasicQrcodeMapper.xml new file mode 100644 index 0000000..aeed9be --- /dev/null +++ b/suimangService/src/main/resources/mapper/UserBasicQrcodeMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + `id`,`tenant_id`,`parent_tenant_id`, + `user_id`,`project_type`,`plat`,`qrcode` + + + + where 1 = 1 + and `id` = #{id} + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + and `user_id` = #{userId} + and `project_type` = #{projectType} + and `plat` = #{plat} + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + +