| @@ -1,41 +1,20 @@ | |||
| package com.iformall.controller; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.annotation.AuthIgnore; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.base.BaseEntity; | |||
| import com.iformall.domain.po.sm.*; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.service.sm.*; | |||
| import com.iformall.video.VideoFactory; | |||
| import com.iformall.video.entity.VideUploadResult; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.SneakyThrows; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.util.ObjectUtils; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.io.OutputStream; | |||
| import java.net.URL; | |||
| import java.net.URLEncoder; | |||
| import java.nio.charset.StandardCharsets; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| @RestController | |||
| @RequestMapping("/api/digitalAvatarPhoto") | |||
| @@ -70,6 +49,7 @@ public class UserDigitalAvatarPhotoController extends BaseController { | |||
| if(record.getId() == null){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数异常"); | |||
| } | |||
| record.setUserId(getMemberId()); | |||
| UserDigitalAvatarOrder userDigitalAvatarOrder = userDigitalAvatarOrderService.selectById(record.getId()); | |||
| if(userDigitalAvatarOrder == null || !record.getUserId().equals(userDigitalAvatarOrder.getUserId())){ | |||
| @@ -153,4 +133,12 @@ public class UserDigitalAvatarPhotoController extends BaseController { | |||
| } | |||
| return new ResultData(userDigitalAvatarPhoto); | |||
| } | |||
| @ApiOperation("获取照片生成次数") | |||
| @GetMapping("/getCount") | |||
| public ResultData getCount() { | |||
| logger.debug("[" + getIpAddr() + "] UserDigitalAvatarPhotoController::getCount"); | |||
| Integer count = userDigitalAvatarOrderService.selectCount(getMemberId()); | |||
| return new ResultData(count); | |||
| } | |||
| } | |||
| @@ -23,6 +23,8 @@ public class UserDigitalAvatarOrder extends TenantEntity { | |||
| protected Long id; | |||
| private Integer plat; | |||
| @TableField(exist = false) | |||
| @io.swagger.annotations.ApiModelProperty(value="查询-创建起始时间",name="startDate") | |||
| private Date startDate; | |||
| @@ -26,6 +26,7 @@ import org.apache.commons.lang3.StringUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.scheduling.annotation.Async; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.Date; | |||
| @@ -128,6 +129,7 @@ public class WxTemplateMsgServiceImpl implements WxTemplateMsgService { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxTemplateMsgMapper.findListForMiniApp(record)); | |||
| } | |||
| @Async | |||
| @Override | |||
| public void sendTemplateMsg(WxAppinfo appinfo, Long userId, String toPage, Map<String, String> param) { | |||
| WxTemplateMsg templateMsgQ = new WxTemplateMsg(); | |||
| @@ -62,4 +62,5 @@ public interface UserDigitalAvatarOrderService { | |||
| void sendPhotoSuccess(UserDigitalAvatarOrder record); | |||
| Integer selectCount(Long userId); | |||
| } | |||
| @@ -19,7 +19,7 @@ public interface UserDigitalAvatarPhotoService { | |||
| void handleSuperPhoto(UserDigitalAvatarPhoto record, String img); | |||
| void updateById(UserDigitalAvatarPhoto updPhoto); | |||
| void updateById(UserDigitalAvatarPhoto record); | |||
| void handlePhoto(UserDigitalAvatarOrder record,List<String> imgList); | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| package com.iformall.service.sm.impl; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.github.pagehelper.PageHelper; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ErrorCode; | |||
| @@ -135,6 +136,11 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||
| if(record.getUserId() == null){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未查询到用户"); | |||
| } | |||
| boolean first = true; | |||
| if(this.selectCount(record.getUserId()) > 0){ | |||
| first = false; | |||
| } | |||
| if(record.getDigitalAvatarId() == null){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"风格模板为空"); | |||
| } | |||
| @@ -150,10 +156,15 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||
| } | |||
| record.setDigitalAvatarSm(digitalAvatarMould.getMouldSmId()); | |||
| record.setDigitalAvatarType(digitalAvatarMould.getMouldType()); | |||
| record.setPrice(digitalAvatarMould.getSalePrice()); | |||
| if(record.getUserImageList().size() != record.getDigitalAvatarType()){ | |||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"照片数据格式错误"); | |||
| } | |||
| if(first){ | |||
| record.setPrice(0); | |||
| }else{ | |||
| record.setPrice(digitalAvatarMould.getSalePrice()); | |||
| } | |||
| if(record.getPrice() > 0){ | |||
| UserBasicProperty userBasicProperty = userBasicPropertyMapper.selectById(record.getUserId()); | |||
| @@ -283,6 +294,8 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||
| DigitalAvatarResult result = AiDigitalAvatarHelper.digitalAvatarPhoto(param,record.getId()); | |||
| if(result.isSuccess()){ | |||
| userDigitalAvatarPhotoService.handlePhoto(record,result.getImgList()); | |||
| this.sendPhotoSuccess(record); | |||
| }else{ | |||
| updOrder.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); | |||
| updOrder.setMsg(result.getMsg()); | |||
| @@ -310,15 +323,24 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||
| if(!EnumDigitalAvatarOrderStatus.finish.getCode().equals(userDigitalAvatarOrder.getStatus())){ | |||
| return; | |||
| } | |||
| //默认先发微信订阅消息 | |||
| WxAppinfo appinfo = wxAppinfoService.getProjectCAppInfoFromRedis(EnumProject.PROJECT_5.getCode(), EnumAppPlat.WX.getCode()); | |||
| String toPage = "/pages/lookPhoto/index?id="+record.getId(); | |||
| if(userDigitalAvatarOrder.getPlat() == null){ | |||
| return; | |||
| } | |||
| WxAppinfo appinfo = wxAppinfoService.getProjectCAppInfoFromRedis(EnumProject.PROJECT_5.getCode(), userDigitalAvatarOrder.getPlat()); | |||
| String toPage = "/pages/lookPhoto/index?id="+userDigitalAvatarOrder.getId(); | |||
| Map<String,String> param = new HashMap<>(); | |||
| param.put("thing1",record.getTitle()); | |||
| param.put("character_string3",record.getId().toString()); | |||
| param.put("time4", DateUtils.date2String(record.getUpdateDate())); | |||
| param.put("thing1",userDigitalAvatarOrder.getTitle()); | |||
| param.put("character_string3",userDigitalAvatarOrder.getId().toString()); | |||
| param.put("time4", DateUtils.date2String(userDigitalAvatarOrder.getUpdateDate())); | |||
| wxTemplateMsgService.sendTemplateMsg(appinfo,record.getUserId(),toPage,param); | |||
| wxTemplateMsgService.sendTemplateMsg(appinfo,userDigitalAvatarOrder.getUserId(),toPage,param); | |||
| } | |||
| @Override | |||
| public Integer selectCount(Long userId) { | |||
| UserDigitalAvatarOrder userDigitalAvatarOrderQ = new UserDigitalAvatarOrder(); | |||
| userDigitalAvatarOrderQ.setUserId(userId); | |||
| return userDigitalAvatarOrderMapper.selectCount(new QueryWrapper<>(userDigitalAvatarOrderQ)); | |||
| } | |||
| } | |||
| @@ -217,4 +217,5 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto | |||
| redisLock.unlock(lockKey, timeStr); | |||
| } | |||
| } | |||
| } | |||
| @@ -54,9 +54,9 @@ | |||
| <update id="reduceDigitalAvatarGlod" parameterType="com.iformall.domain.po.UserBasicProperty"> | |||
| update user_basic_property | |||
| set `update_date` = #{updateDate} | |||
| ,`digital_avatar_residue_glod` = digital_avatar_residue_glod-#{reduceGlod} | |||
| ,`digital_avatar_residue_glod` = digital_avatar_residue_glod+#{reduceGlod} | |||
| where id = #{id} | |||
| and digital_avatar_residue_glod >= #{reduceGlod} | |||
| and digital_avatar_residue_glod+#{reduceGlod} > 0 | |||
| </update> | |||
| </mapper> | |||
| @@ -5,6 +5,7 @@ | |||
| <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="plat" jdbcType="INTEGER" property="plat"/> | |||
| <result column="order_id" jdbcType="BIGINT" property="orderId"/> | |||
| <result column="user_id" jdbcType="BIGINT" property="userId"/> | |||
| <result column="user_images" jdbcType="VARCHAR" property="userImages"/> | |||
| @@ -23,7 +24,7 @@ | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| `id`, `tenant_id`, `parent_tenant_id`, `order_id`, `user_id`, | |||
| `id`, `tenant_id`, `parent_tenant_id`, `plat`, `order_id`, `user_id`, | |||
| `user_images`, `digital_avatar_id`, `digital_avatar_type`, `digital_avatar_sm`, `price`, | |||
| `title`, `remark`, `status`, `msg`, `create_date`, `update_date` | |||
| </sql> | |||
| @@ -35,6 +36,10 @@ | |||
| and `id` = #{id} | |||
| </if> | |||
| <if test=" null != plat "> | |||
| and `plat` = #{plat} | |||
| </if> | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and `tenant_id` = #{tenantId} | |||
| </if> | |||