@@ -18,10 +18,10 @@ import com.iformall.service.sm.InviteCodeInfoService; | |||||
import com.iformall.service.sm.InviteCodeService; | import com.iformall.service.sm.InviteCodeService; | ||||
import com.iformall.service.sm.UserConsumptionPackageService; | import com.iformall.service.sm.UserConsumptionPackageService; | ||||
import com.iformall.service.sm.UserCreateVideoNumService; | 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.Api; | ||||
import io.swagger.annotations.ApiImplicitParam; | import io.swagger.annotations.ApiImplicitParam; | ||||
import io.swagger.annotations.ApiImplicitParams; | import io.swagger.annotations.ApiImplicitParams; | ||||
@@ -64,6 +64,9 @@ public class MiniAppUserController extends BaseController { | |||||
@Autowired | @Autowired | ||||
private WxCUserBasicInfoService wxCUserBasicInfoService; | private WxCUserBasicInfoService wxCUserBasicInfoService; | ||||
@Autowired | |||||
private UserBasicQrcodeService userBasicQrcodeService; | |||||
@Autowired | @Autowired | ||||
WxAppinfoService wxAppinfoService; | WxAppinfoService wxAppinfoService; | ||||
@@ -235,4 +238,49 @@ public class MiniAppUserController extends BaseController { | |||||
return new ResultData(resultMap); | return new ResultData(resultMap); | ||||
} | } | ||||
/** | |||||
* 获取二维码 | |||||
* | |||||
* @param map | |||||
* @return | |||||
*/ | |||||
@PostMapping("/getUserQrcode") | |||||
@ApiOperation(value = "获取二维码", notes = "{\"encryptedData\":\"string\",\"iv\":\"string\"}") | |||||
public ResultData getUserQrcode(@RequestBody Map<String, String> 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); | |||||
} | |||||
} | |||||
} | } |
@@ -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; | |||||
} |
@@ -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<UserBasicQrcode, Long>{ | |||||
List<UserBasicQrcode> findList(UserBasicQrcode record); | |||||
} |
@@ -5,6 +5,7 @@ import com.iformall.domain.po.base.TenantEntity; | |||||
import com.iformall.enums.EnumAppPlat; | import com.iformall.enums.EnumAppPlat; | ||||
import com.iformall.enums.EnumPayVersion; | import com.iformall.enums.EnumPayVersion; | ||||
import com.iformall.enums.EnumPayWay; | import com.iformall.enums.EnumPayWay; | ||||
import com.iformall.enums.EnumProject; | |||||
import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import org.springframework.web.bind.annotation.RequestBody; | import org.springframework.web.bind.annotation.RequestBody; | ||||
@@ -25,4 +26,16 @@ public interface QrCodeService { | |||||
int withText, String text1, String text2, | int withText, String text1, String text2, | ||||
String name,EnumAppPlat plat); | 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); | |||||
} | } |
@@ -0,0 +1,7 @@ | |||||
package com.iformall.service; | |||||
public interface UserBasicQrcodeService { | |||||
String getQrCode(Long userId,Integer projectType,Integer plat); | |||||
} |
@@ -9,6 +9,7 @@ import com.iformall.enums.EnumAppPlat; | |||||
import com.iformall.enums.EnumPayVersion; | import com.iformall.enums.EnumPayVersion; | ||||
import com.iformall.enums.EnumPayWay; | import com.iformall.enums.EnumPayWay; | ||||
import com.iformall.domain.po.WxAppinfo; | import com.iformall.domain.po.WxAppinfo; | ||||
import com.iformall.enums.EnumProject; | |||||
import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
import com.iformall.file.aliyun.AliyunOSS; | import com.iformall.file.aliyun.AliyunOSS; | ||||
import com.iformall.service.QrCodeService; | import com.iformall.service.QrCodeService; | ||||
@@ -190,6 +191,31 @@ public class QrCodeServiceImpl implements QrCodeService { | |||||
return new ResultData(); | 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 { | private void copyFileToDest(int withText, String text1, String text2, String destPath1, File dest, File codeFile) throws IOException { | ||||
if (withText == 1) { | if (withText == 1) { | ||||
File dest1 = new File(destPath1); | File dest1 = new File(destPath1); | ||||
@@ -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<String, String> 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); | |||||
} | |||||
} | |||||
} |
@@ -49,6 +49,7 @@ public class PayServiceFactory { | |||||
private Map<String,PayAdapterService> payVendorServiceMap = null; | private Map<String,PayAdapterService> payVendorServiceMap = null; | ||||
private Map<String,PayShareAdapterService> payVendorShareMap = null; | private Map<String,PayShareAdapterService> payVendorShareMap = null; | ||||
private Map<String,PayAdapterService> platQrcodeMap = null; | |||||
@Autowired | @Autowired | ||||
WxMiniAppPayAdapterService wxMiniAppPayService; | WxMiniAppPayAdapterService wxMiniAppPayService; | ||||
@@ -123,6 +124,15 @@ public class PayServiceFactory { | |||||
return qrcodeMap; | return qrcodeMap; | ||||
} | } | ||||
private Map<String,PayAdapterService> getPlatQrcodeMap() { | |||||
if (null == platQrcodeMap) { | |||||
platQrcodeMap = new ConcurrentHashMap<String,PayAdapterService>(); | |||||
platQrcodeMap.put(EnumAppPlat.WX.getCode()+"_", wxMiniAppPayV3AdapterService); | |||||
platQrcodeMap.put(EnumAppPlat.TOUTIAO.getCode()+"_",ttMiniAppPayService); | |||||
} | |||||
return platQrcodeMap; | |||||
} | |||||
private Map<String,PayAdapterService> getPayVendorServiceMap() { | private Map<String,PayAdapterService> getPayVendorServiceMap() { | ||||
if (null == payVendorServiceMap) { | if (null == payVendorServiceMap) { | ||||
payVendorServiceMap = new ConcurrentHashMap<String,PayAdapterService>(); | payVendorServiceMap = new ConcurrentHashMap<String,PayAdapterService>(); | ||||
@@ -245,6 +255,14 @@ public class PayServiceFactory { | |||||
} | } | ||||
return service; | 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{ | public CDrivingPayService getCDrivingPayService(Integer type,Integer payVersion) throws MallinkException{ | ||||
PayAdapterService service = getServiceMap().get(type+"_"+payVersion); | PayAdapterService service = getServiceMap().get(type+"_"+payVersion); | ||||
@@ -240,6 +240,8 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||||
try{ | try{ | ||||
DigitalAvatarParam param = new DigitalAvatarParam(); | DigitalAvatarParam param = new DigitalAvatarParam(); | ||||
param.setBg_img(record.getDigitalAvatarSm()); | param.setBg_img(record.getDigitalAvatarSm()); | ||||
param.setNum_people(record.getDigitalAvatarType()); | |||||
if(EnumDigitalAvatarMouldType.persion_1.getCode().equals(record.getDigitalAvatarType())){ | if(EnumDigitalAvatarMouldType.persion_1.getCode().equals(record.getDigitalAvatarType())){ | ||||
String imgUrl1 = record.getUserImageList().get(0); | String imgUrl1 = record.getUserImageList().get(0); | ||||
param.setImg_lift(Base64Util.imageUrlToBase64(imgUrl1)); | param.setImg_lift(Base64Util.imageUrlToBase64(imgUrl1)); | ||||
@@ -96,7 +96,6 @@ public class AiDigitalAvatarHelper { | |||||
result.setMsg("success"); | result.setMsg("success"); | ||||
JSONObject data = jsonObject.getJSONObject("data"); | JSONObject data = jsonObject.getJSONObject("data"); | ||||
log.info("11111111111111"); | |||||
List<String> imgList = new ArrayList<>(); | List<String> imgList = new ArrayList<>(); | ||||
imgList.add(data.getString("img_0")); | imgList.add(data.getString("img_0")); | ||||
imgList.add(data.getString("img_1")); | imgList.add(data.getString("img_1")); | ||||
@@ -11,6 +11,7 @@ import java.util.Map; | |||||
public class DigitalAvatarParam { | public class DigitalAvatarParam { | ||||
private String bg_img; | private String bg_img; | ||||
private Integer num_people; | |||||
private String img_lift; | private String img_lift; | ||||
private String img_middle; | private String img_middle; | ||||
private String img_right; | private String img_right; | ||||
@@ -28,6 +28,8 @@ public class Constant { | |||||
public static final String indexPageUrl = "pages/index/index"; | public static final String indexPageUrl = "pages/index/index"; | ||||
public static final String sharePageUrl = "pages/login/index"; | |||||
// 1小时过期, | // 1小时过期, | ||||
public final static int H_EXPIRE = 3600; | public final static int H_EXPIRE = 3600; | ||||
@@ -0,0 +1,47 @@ | |||||
<?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"> | |||||
<mapper namespace="com.iformall.mapper.UserBasicQrcodeMapper"> | |||||
<resultMap id="BaseResultMap" type="com.iformall.domain.po.UserBasicQrcode"> | |||||
<id column="id" jdbcType="BIGINT" property="id" /> | |||||
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId" /> | |||||
<result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId"/> | |||||
<result column="user_id" jdbcType="BIGINT" property="userId" /> | |||||
<result column="project_type" jdbcType="INTEGER" property="projecType" /> | |||||
<result column="plat" jdbcType="INTEGER" property="plat" /> | |||||
<result column="qrcode" jdbcType="VARCHAR" property="qrcode" /> | |||||
</resultMap> | |||||
<sql id="allColumns"> | |||||
`id`,`tenant_id`,`parent_tenant_id`, | |||||
`user_id`,`project_type`,`plat`,`qrcode` | |||||
</sql> | |||||
<sql id="dynamicWhereConditions"> | |||||
where 1 = 1 | |||||
<if test=" null != id "> and `id` = #{id} </if> | |||||
<if test=" null != tenantId and '' != tenantId"> | |||||
and `tenant_id` = #{tenantId} | |||||
</if> | |||||
<if test=" null != parentTenantId and '' != parentTenantId"> | |||||
and `parent_tenant_id` = #{parentTenantId} | |||||
</if> | |||||
<if test=" null != userId "> and `user_id` = #{userId} </if> | |||||
<if test=" null != projectType "> and `project_type` = #{projectType} </if> | |||||
<if test=" null != plat "> and `plat` = #{plat} </if> | |||||
<if test=" null != ids "> | |||||
and id in | |||||
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
#{idItem} | |||||
</foreach> | |||||
</if> | |||||
<if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
</sql> | |||||
<select id="findList" parameterType="com.iformall.domain.po.UserBasicQrcode" resultMap="BaseResultMap"> | |||||
select <include refid="allColumns" /> | |||||
from user_basic_qrcode | |||||
<include refid="dynamicWhereConditions" /> | |||||
</select> | |||||
</mapper> |