@@ -41,6 +41,7 @@ CREATE TABLE `user_basic_property_log` ( | |||
user_basic_image | |||
user_digital_avatar_photo | |||
product | |||
product_order | |||
@@ -0,0 +1,156 @@ | |||
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") | |||
@Api(description = "模板接口") | |||
public class UserDigitalAvatarPhotoController extends BaseController { | |||
private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
@Autowired | |||
private UserDigitalAvatarOrderService userDigitalAvatarOrderService; | |||
@Autowired | |||
private UserDigitalAvatarPhotoService userDigitalAvatarPhotoService; | |||
@ApiOperation("制作照片") | |||
@PostMapping("createPhoto") | |||
public ResultData createPhoto(@RequestBody UserDigitalAvatarOrder record) { | |||
logger.debug("[" + getIpAddr() + "] UserDigitalAvatarPhotoController::createPhoto"); | |||
record.setUserId(getMemberId()); | |||
if(record.getId() != null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数异常"); | |||
} | |||
if(record.getDigitalAvatarId() == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"风格模板为空"); | |||
} | |||
return userDigitalAvatarOrderService.createOrder(record); | |||
} | |||
@ApiOperation("重复制作照片") | |||
@PostMapping("createPhotoAgain") | |||
public ResultData createPhotoAgain(@RequestBody UserDigitalAvatarOrder record) { | |||
logger.debug("[" + getIpAddr() + "] UserDigitalAvatarPhotoController::createPhotoAgain"); | |||
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())){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到订单"); | |||
} | |||
return userDigitalAvatarOrderService.createPhotoAgain(userDigitalAvatarOrder); | |||
} | |||
@ApiOperation("根据id查询接口") | |||
@GetMapping("/findById") | |||
@ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | |||
public ResultData findById(Long id) { | |||
logger.debug("[" + getIpAddr() + "] UserDigitalAvatarPhotoController::findById"); | |||
if(id == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数为空"); | |||
} | |||
UserDigitalAvatarOrder userDigitalAvatarOrder = userDigitalAvatarOrderService.getById(id); | |||
if(userDigitalAvatarOrder == null || !getMemberId().equals(userDigitalAvatarOrder.getUserId())){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到订单"); | |||
} | |||
return new ResultData(userDigitalAvatarOrder); | |||
} | |||
@ApiOperation("分页列表接口") | |||
@GetMapping("list") | |||
@ApiImplicitParams({ | |||
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), | |||
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) | |||
public ResultData list(@ModelAttribute UserDigitalAvatarOrder record, Integer pageNum, Integer pageSize) { | |||
logger.debug("[" + getIpAddr() + "] UserDigitalAvatarPhotoController::list"); | |||
if (record == null) record = new UserDigitalAvatarOrder(); | |||
record.setUserId(getMemberId()); | |||
record.setSortColumns(BaseEntity.SortField.UpdateDate_DESC); | |||
final PageInfo<UserDigitalAvatarOrder> page = userDigitalAvatarOrderService.cListAsPage(record, pageNum, pageSize); | |||
return new ResultData(page); | |||
} | |||
@ApiOperation("根据id删除接口") | |||
@PostMapping("/delete") | |||
public ResultData delete(@RequestBody UserDigitalAvatarOrder record) { | |||
logger.debug("[" + getIpAddr() + "] UserDigitalAvatarPhotoController::delete"); | |||
if(record.getId() == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数为空"); | |||
} | |||
UserDigitalAvatarOrder userDigitalAvatarOrder = userDigitalAvatarOrderService.selectById(record.getId()); | |||
if(userDigitalAvatarOrder == null || !getMemberId().equals(userDigitalAvatarOrder.getUserId())){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到订单"); | |||
} | |||
userDigitalAvatarOrderService.deleteById(record.getId()); | |||
return new ResultData(); | |||
} | |||
@ApiOperation("照片超分") | |||
@PostMapping("/photoSupper") | |||
public ResultData photoSupper(@RequestBody UserDigitalAvatarPhoto record) { | |||
logger.debug("[" + getIpAddr() + "] UserDigitalAvatarPhotoController::photoSupper"); | |||
if(record.getId() == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数为空"); | |||
} | |||
record.setUserId(getMemberId()); | |||
UserDigitalAvatarPhoto userDigitalAvatarPhoto = userDigitalAvatarPhotoService.selectById(record.getId()); | |||
if(userDigitalAvatarPhoto == null || !record.getUserId().equals(userDigitalAvatarPhoto.getUserId())){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到照片"); | |||
} | |||
return userDigitalAvatarPhotoService.createPhotoSupper(userDigitalAvatarPhoto); | |||
} | |||
@ApiOperation("获取视频是否生成成功") | |||
@GetMapping("/getPhoto") | |||
@ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | |||
public ResultData getPhoto(Long id) { | |||
logger.debug("[" + getIpAddr() + "] UserDigitalAvatarPhotoController::photoSupper"); | |||
if(id == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数为空"); | |||
} | |||
UserDigitalAvatarPhoto userDigitalAvatarPhoto = userDigitalAvatarPhotoService.selectById(id); | |||
if(userDigitalAvatarPhoto == null || !getMemberId().equals(userDigitalAvatarPhoto.getUserId())){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到订单"); | |||
} | |||
return new ResultData(userDigitalAvatarPhoto); | |||
} | |||
} |
@@ -192,4 +192,5 @@ photo: | |||
url: http://111.198.0.15:22299 | |||
hy_url: http://111.198.0.15:22288 | |||
talk: http://nas.pucao.cn:2001 | |||
digital_avatar: http://nas.pucao.cn:2003 | |||
callbackUrl: https://phototest.metavatar.cc/C |
@@ -449,6 +449,9 @@ public enum ErrorCode{ | |||
MEM_MONTH_IS_USED(13105, "该用户本月已领取或未到领取条件"), | |||
GLOD_NOT_ENOUGH(13200, "金币不足"), | |||
/** | |||
* 标签 | |||
*/ | |||
@@ -669,6 +672,11 @@ public enum ErrorCode{ | |||
TTCOUPON_IS_EMPTY(63000, "课程不存在"), | |||
TTCOUPON_IS_TAKE_OFF(63001, "课程不在上架状态"), | |||
/** | |||
* mould | |||
*/ | |||
ORDER_CREAT_OVERRUN(64000, "重复生成次数超限"), | |||
; | |||
private int code; | |||
@@ -27,4 +27,10 @@ public class UserBasicProperty extends TenantEntity { | |||
@io.swagger.annotations.ApiModelProperty(value="",name="updateDate") | |||
private Date updateDate; | |||
@TableField(exist = false) | |||
private Integer addGlod; | |||
@TableField(exist = false) | |||
private Integer reduceGlod; | |||
} |
@@ -85,9 +85,15 @@ public class DigitalAvatarMould extends TenantEntity { | |||
@io.swagger.annotations.ApiModelProperty(value="购买须知",name="remark") | |||
private String remark; | |||
@io.swagger.annotations.ApiModelProperty(value="EnumDigitalAvatarMouldType",name="mouldType") | |||
private Integer mouldType; | |||
@io.swagger.annotations.ApiModelProperty(value="模板第三方Id",name="mouldSmId") | |||
private String mouldSmId; | |||
@io.swagger.annotations.ApiModelProperty(value="重试次数",name="againCount") | |||
private Integer againCount; | |||
@io.swagger.annotations.ApiModelProperty(value="EnumaMouldPatchStatus 状态",name="status") | |||
private Integer status; | |||
@io.swagger.annotations.ApiModelProperty(value="上架时间",name="putonDate") | |||
@@ -0,0 +1,86 @@ | |||
package com.iformall.domain.po.sm; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.baomidou.mybatisplus.annotation.TableField; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import com.iformall.common.SortColumn; | |||
import com.iformall.domain.po.base.TenantEntity; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.ToString; | |||
import org.apache.commons.lang3.StringUtils; | |||
import java.math.BigDecimal; | |||
import java.util.ArrayList; | |||
import java.util.Date; | |||
import java.util.List; | |||
@TableName(value = "user_digital_avatar_order") | |||
@Data | |||
@ToString(callSuper = true) | |||
@EqualsAndHashCode(callSuper = true) | |||
public class UserDigitalAvatarOrder extends TenantEntity { | |||
protected Long id; | |||
@TableField(exist = false) | |||
@io.swagger.annotations.ApiModelProperty(value="查询-创建起始时间",name="startDate") | |||
private Date startDate; | |||
@TableField(exist = false) | |||
@io.swagger.annotations.ApiModelProperty(value="查询-创建结束时间",name="endDate") | |||
private Date endDate; | |||
@io.swagger.annotations.ApiModelProperty(value="订单id",name="orderId") | |||
private Long orderId; | |||
@io.swagger.annotations.ApiModelProperty(value="用户Id",name="userId") | |||
private Long userId; | |||
@io.swagger.annotations.ApiModelProperty(value="",name="userImages") | |||
private String userImages; | |||
@TableField(exist = false) | |||
@io.swagger.annotations.ApiModelProperty(value="",name="userImageList") | |||
private List<String> userImageList; | |||
public List<String> getUserImageList(){ | |||
if(StringUtils.isNotBlank(userImages)){ | |||
try{ | |||
return JSONObject.parseArray(userImages, String.class); | |||
}catch(Exception e){ | |||
} | |||
} | |||
return new ArrayList<String>(); | |||
} | |||
@io.swagger.annotations.ApiModelProperty(value="",name="digitalAvatarId") | |||
private Long digitalAvatarId; | |||
@io.swagger.annotations.ApiModelProperty(value="EnumDigitalAvatarMouldType",name="digitalAvatarType") | |||
private Integer digitalAvatarType; | |||
@io.swagger.annotations.ApiModelProperty(value="模板",name="digitalAvatarSm") | |||
private String digitalAvatarSm; | |||
@io.swagger.annotations.ApiModelProperty(value="原价",name="price") | |||
private Integer price; | |||
@io.swagger.annotations.ApiModelProperty(value="名称",name="title") | |||
private String title; | |||
@io.swagger.annotations.ApiModelProperty(value="",name="remark") | |||
private String remark; | |||
@io.swagger.annotations.ApiModelProperty(value="EnumDigitalAvatarOrderStatus 状态",name="status") | |||
private Integer status; | |||
@io.swagger.annotations.ApiModelProperty(value="",name="msg") | |||
private String msg; | |||
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||
private Date createDate; | |||
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | |||
private Date updateDate; | |||
private List<UserDigitalAvatarPhoto> photoList; | |||
} |
@@ -0,0 +1,63 @@ | |||
package com.iformall.domain.po.sm; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.baomidou.mybatisplus.annotation.TableField; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import com.iformall.common.SortColumn; | |||
import com.iformall.domain.po.base.TenantEntity; | |||
import com.iformall.enums.EnumSpeakType; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.ToString; | |||
import org.apache.commons.lang3.StringUtils; | |||
import java.math.BigDecimal; | |||
import java.util.ArrayList; | |||
import java.util.Date; | |||
import java.util.List; | |||
@TableName(value = "user_digital_avatar_photo") | |||
@Data | |||
@ToString(callSuper = true) | |||
@EqualsAndHashCode(callSuper = true) | |||
public class UserDigitalAvatarPhoto extends TenantEntity { | |||
protected Long id; | |||
@TableField(exist = false) | |||
@io.swagger.annotations.ApiModelProperty(value="查询-创建起始时间",name="startDate") | |||
private Date startDate; | |||
@TableField(exist = false) | |||
@io.swagger.annotations.ApiModelProperty(value="查询-创建结束时间",name="endDate") | |||
private Date endDate; | |||
@io.swagger.annotations.ApiModelProperty(value="UserDigitalAvatarOrder.id",name="orderId") | |||
private Long orderId; | |||
@io.swagger.annotations.ApiModelProperty(value="用户Id",name="userId") | |||
private Long userId; | |||
@io.swagger.annotations.ApiModelProperty(value="",name="image") | |||
private String image; | |||
@io.swagger.annotations.ApiModelProperty(value="原价",name="price") | |||
private Integer price; | |||
@io.swagger.annotations.ApiModelProperty(value="",name="remark") | |||
private String remark; | |||
@io.swagger.annotations.ApiModelProperty(value="",name="imageSuper") | |||
private String imageSuper; | |||
@io.swagger.annotations.ApiModelProperty(value="EnumDigitalAvatarPhotoStatus 状态",name="status") | |||
private Integer status; | |||
@io.swagger.annotations.ApiModelProperty(value="",name="msg") | |||
private String msg; | |||
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||
private Date createDate; | |||
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | |||
private Date updateDate; | |||
} |
@@ -0,0 +1,49 @@ | |||
package com.iformall.enums; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
/** | |||
* | |||
*/ | |||
public enum EnumDigitalAvatarMouldType { | |||
persion_1(1, "一人模板"), | |||
persion_2(2, "二人模板"), | |||
persion_3(3, "三人模板"), | |||
; | |||
public static EnumDigitalAvatarMouldType getEnum(Integer code) { | |||
for (EnumDigitalAvatarMouldType value : values()) { | |||
if (value.getCode().equals(code)) { | |||
return value; | |||
} | |||
} | |||
return null; | |||
} | |||
public static List<Integer> getAllCodes(){ | |||
List<Integer> codes = new ArrayList<>(); | |||
for (EnumDigitalAvatarMouldType value : values()) { | |||
codes.add(value.getCode()); | |||
} | |||
return codes; | |||
} | |||
private Integer code; | |||
private String message; | |||
EnumDigitalAvatarMouldType(Integer code, String message) { | |||
this.code = code; | |||
this.message = message; | |||
} | |||
public Integer getCode() { | |||
return code; | |||
} | |||
public String getMessage() { | |||
return message; | |||
} | |||
} |
@@ -0,0 +1,38 @@ | |||
package com.iformall.enums; | |||
/** | |||
* | |||
*/ | |||
public enum EnumDigitalAvatarOrderStatus { | |||
wait(1, "待制作"), | |||
finish(2, "制作完成"), | |||
fail(3, "制作失败"), | |||
; | |||
public static EnumDigitalAvatarOrderStatus getEnum(Integer code) { | |||
for (EnumDigitalAvatarOrderStatus value : values()) { | |||
if (value.getCode().equals(code)) { | |||
return value; | |||
} | |||
} | |||
return null; | |||
} | |||
private Integer code; | |||
private String message; | |||
EnumDigitalAvatarOrderStatus(Integer code, String message) { | |||
this.code = code; | |||
this.message = message; | |||
} | |||
public Integer getCode() { | |||
return code; | |||
} | |||
public String getMessage() { | |||
return message; | |||
} | |||
} |
@@ -0,0 +1,42 @@ | |||
package com.iformall.enums; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
/** | |||
* | |||
*/ | |||
public enum EnumDigitalAvatarPhotoStatus { | |||
def(0, "默认"), | |||
wait(1, "待超分"), | |||
finish(2, "超分完成"), | |||
fail(3, "超分失败"), | |||
; | |||
public static EnumDigitalAvatarPhotoStatus getEnum(Integer code) { | |||
for (EnumDigitalAvatarPhotoStatus value : values()) { | |||
if (value.getCode().equals(code)) { | |||
return value; | |||
} | |||
} | |||
return null; | |||
} | |||
private Integer code; | |||
private String message; | |||
EnumDigitalAvatarPhotoStatus(Integer code, String message) { | |||
this.code = code; | |||
this.message = message; | |||
} | |||
public Integer getCode() { | |||
return code; | |||
} | |||
public String getMessage() { | |||
return message; | |||
} | |||
} |
@@ -8,7 +8,11 @@ public enum EnumPropertyLogType { | |||
REGISTER(1,"注册"), | |||
INVITE(2,"邀请"), | |||
RECHARGE(3, "充值"), | |||
CONSUMPTION(4, "消费"), | |||
// CONSUMPTION(4, "消费"), | |||
//智象 | |||
CONSUMPTION_10(10, "生成照片"), | |||
CONSUMPTION_11(11, "照片超分"), | |||
; | |||
public static EnumPropertyLogType getEnum(Integer code) { | |||
@@ -9,5 +9,8 @@ public interface UserBasicPropertyMapper extends CommonMapper<UserBasicProperty, | |||
List<UserBasicProperty> findList(UserBasicProperty record); | |||
int addGlod(UserBasicProperty userBasicProperty); | |||
int addGlod(UserBasicProperty record); | |||
int reduceGlod(UserBasicProperty record); | |||
} |
@@ -0,0 +1,24 @@ | |||
package com.iformall.mapper; | |||
import com.iformall.common.CommonMapper; | |||
import com.iformall.domain.po.sm.UserDigitalAvatarOrder; | |||
import org.apache.ibatis.annotations.Param; | |||
import java.util.List; | |||
public interface UserDigitalAvatarOrderMapper extends CommonMapper<UserDigitalAvatarOrder, Long> { | |||
List<UserDigitalAvatarOrder> findList(UserDigitalAvatarOrder record); | |||
int deleteById(@Param("id")Long id); | |||
/** | |||
* c端列表查询,尽量减少字段 | |||
* @param record | |||
* @return | |||
*/ | |||
List<UserDigitalAvatarOrder> findCList(UserDigitalAvatarOrder record); | |||
int findCount(@Param("orderId")Long orderId); | |||
} |
@@ -0,0 +1,22 @@ | |||
package com.iformall.mapper; | |||
import com.iformall.common.CommonMapper; | |||
import com.iformall.domain.po.sm.UserDigitalAvatarPhoto; | |||
import org.apache.ibatis.annotations.Param; | |||
import java.util.List; | |||
public interface UserDigitalAvatarPhotoMapper extends CommonMapper<UserDigitalAvatarPhoto, Long> { | |||
List<UserDigitalAvatarPhoto> findList(UserDigitalAvatarPhoto record); | |||
int deleteById(@Param("id")Long id); | |||
/** | |||
* c端列表查询,尽量减少字段 | |||
* @param record | |||
* @return | |||
*/ | |||
List<UserDigitalAvatarPhoto> findCList(UserDigitalAvatarPhoto record); | |||
} |
@@ -4,6 +4,8 @@ import com.github.pagehelper.PageInfo; | |||
import com.iformall.domain.po.ProductOrder; | |||
import com.iformall.domain.po.UserBasicProperty; | |||
import java.util.Date; | |||
public interface UserBasicPropertyService { | |||
/** | |||
@@ -16,6 +18,24 @@ public interface UserBasicPropertyService { | |||
*/ | |||
PageInfo<UserBasicProperty> listAsPage(UserBasicProperty record, Integer pageIndex, Integer pageSize); | |||
/** | |||
* 充值 | |||
* @param userId | |||
* @param projectType | |||
* @param extraId | |||
* @param glod | |||
*/ | |||
void addRechargeGlod(Long userId, Integer projectType, Long extraId, Integer glod); | |||
/** | |||
* 消费 | |||
* @param userId | |||
* @param projectType | |||
* @param propertyLogType | |||
* @param glod | |||
* @param extraId | |||
* @param now | |||
*/ | |||
void consumptionGlod(Long userId, Integer projectType, Integer propertyLogType, Integer glod, Long extraId, Date now); | |||
} |
@@ -69,8 +69,7 @@ public class UserBasicPropertyServiceImpl implements UserBasicPropertyService { | |||
}else{ | |||
befourGold = userBasicProperty.getDigitalAvatarResidueGlod(); | |||
userBasicProperty.setDigitalAvatarGlod(glod); | |||
userBasicProperty.setDigitalAvatarResidueGlod(glod); | |||
userBasicProperty.setAddGlod(glod); | |||
userBasicProperty.setUpdateDate(now); | |||
userBasicPropertyMapper.addGlod(userBasicProperty); | |||
} | |||
@@ -86,10 +85,44 @@ public class UserBasicPropertyServiceImpl implements UserBasicPropertyService { | |||
userBasicPropertyLog.setExtraId(extraId); | |||
userBasicPropertyLog.setCreateDate(now); | |||
userBasicPropertyLogMapper.insert(userBasicPropertyLog); | |||
} | |||
} | |||
@Override | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void consumptionGlod(Long userId, Integer projectType, Integer propertyLogType, Integer glod, Long extraId, Date now) { | |||
WxCUserBasicInfo basicInfo = wxCUserBasicInfoMapper.selectById(userId); | |||
if(basicInfo == null){ | |||
throw new MallinkException(ErrorCode.USER_IS_EMPTY); | |||
} | |||
UserBasicProperty userBasicProperty = userBasicPropertyMapper.selectById(userId); | |||
if(userBasicProperty == null || userBasicProperty.getDigitalAvatarResidueGlod() < glod){ | |||
throw new MallinkException(ErrorCode.GLOD_NOT_ENOUGH); | |||
} | |||
UserBasicProperty updProperty = new UserBasicProperty(); | |||
updProperty.setId(userId); | |||
updProperty.setReduceGlod(glod); | |||
updProperty.setUpdateDate(now); | |||
int count = userBasicPropertyMapper.reduceGlod(updProperty); | |||
if(count != 1){ | |||
throw new MallinkException(ErrorCode.GLOD_NOT_ENOUGH.getCode(),"扣减异常"); | |||
} | |||
UserBasicPropertyLog userBasicPropertyLog = new UserBasicPropertyLog(); | |||
final IdWorker idWorker = IdWorker.get(); | |||
userBasicPropertyLog.setId(idWorker.nextId()); | |||
userBasicPropertyLog.setUserId(userId); | |||
userBasicPropertyLog.setProjectType(projectType); | |||
userBasicPropertyLog.setType(propertyLogType); | |||
userBasicPropertyLog.setBefourGold(userBasicProperty.getDigitalAvatarResidueGlod()); | |||
userBasicPropertyLog.setGoldNum(glod); | |||
userBasicPropertyLog.setAfterGold(userBasicProperty.getDigitalAvatarResidueGlod()-glod); | |||
userBasicPropertyLog.setExtraId(extraId); | |||
userBasicPropertyLog.setCreateDate(now); | |||
userBasicPropertyLogMapper.insert(userBasicPropertyLog); | |||
} | |||
} |
@@ -0,0 +1,62 @@ | |||
package com.iformall.service.sm; | |||
import com.github.pagehelper.PageInfo; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.sm.UserDigitalAvatarOrder; | |||
import com.iformall.domain.po.sm.UserDigitalAvatarPhoto; | |||
import java.util.List; | |||
import java.util.concurrent.Future; | |||
public interface UserDigitalAvatarOrderService { | |||
/** | |||
* 根据实体查询分页列表 | |||
* | |||
* @param record | |||
* @param pageIndex | |||
* @param pageSize | |||
* @return | |||
*/ | |||
PageInfo<UserDigitalAvatarOrder> listAsPage(UserDigitalAvatarOrder record, Integer pageIndex, Integer pageSize); | |||
PageInfo<UserDigitalAvatarOrder> cListAsPage(UserDigitalAvatarOrder record, Integer pageIndex, Integer pageSize); | |||
List<UserDigitalAvatarOrder> findList(UserDigitalAvatarOrder record); | |||
/** | |||
* 根据Id获得实体 | |||
* | |||
* @param id | |||
* @return | |||
*/ | |||
UserDigitalAvatarOrder selectById(Long id); | |||
UserDigitalAvatarOrder getById(Long id); | |||
/** | |||
* | |||
* @param record | |||
*/ | |||
ResultData createOrder(UserDigitalAvatarOrder record); | |||
ResultData createPhotoAgain(UserDigitalAvatarOrder record); | |||
/** | |||
* 保存或更新实体 | |||
* | |||
* @param record | |||
*/ | |||
void handleOrder(UserDigitalAvatarOrder record); | |||
/** | |||
* 根据Id删除实体 | |||
* | |||
* @param id | |||
*/ | |||
void deleteById(Long id); | |||
void createPhoto(UserDigitalAvatarOrder record); | |||
} |
@@ -0,0 +1,19 @@ | |||
package com.iformall.service.sm; | |||
import com.github.pagehelper.PageInfo; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.sm.UserDigitalAvatarPhoto; | |||
import java.util.List; | |||
public interface UserDigitalAvatarPhotoService { | |||
UserDigitalAvatarPhoto selectById(Long id); | |||
ResultData createPhotoSupper(UserDigitalAvatarPhoto record); | |||
void handleCreateSupper(UserDigitalAvatarPhoto record); | |||
void superPhoto(UserDigitalAvatarPhoto record); | |||
} |
@@ -0,0 +1,311 @@ | |||
package com.iformall.service.sm.impl; | |||
import com.github.pagehelper.PageHelper; | |||
import com.github.pagehelper.PageInfo; | |||
import com.iformall.common.ErrorCode; | |||
import com.iformall.common.IdWorker; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.UserBasicProperty; | |||
import com.iformall.domain.po.sm.DigitalAvatarMould; | |||
import com.iformall.domain.po.sm.UserDigitalAvatarOrder; | |||
import com.iformall.domain.po.sm.UserDigitalAvatarPhoto; | |||
import com.iformall.enums.*; | |||
import com.iformall.exception.MallinkException; | |||
import com.iformall.file.aliyun.AliyunOSS; | |||
import com.iformall.mapper.*; | |||
import com.iformall.service.UserBasicPropertyService; | |||
import com.iformall.service.impl.ProductOrderServiceImpl; | |||
import com.iformall.service.sm.UserDigitalAvatarOrderService; | |||
import com.iformall.service.sm.UserDigitalAvatarPhotoService; | |||
import com.iformall.sm.*; | |||
import com.iformall.utils.Base64Util; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.aop.framework.AopContext; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.scheduling.annotation.Async; | |||
import org.springframework.scheduling.annotation.AsyncResult; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.transaction.annotation.Propagation; | |||
import org.springframework.transaction.annotation.Transactional; | |||
import java.io.InputStream; | |||
import java.util.Date; | |||
import java.util.List; | |||
import java.util.concurrent.Future; | |||
@Service | |||
public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrderService { | |||
private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
@Autowired | |||
UserDigitalAvatarOrderMapper userDigitalAvatarOrderMapper; | |||
@Autowired | |||
UserDigitalAvatarPhotoMapper userDigitalAvatarPhotoMapper; | |||
@Autowired | |||
DigitalAvatarMouldMapper digitalAvatarMouldMapper; | |||
@Autowired | |||
UserBasicPropertyMapper userBasicPropertyMapper; | |||
@Autowired | |||
UserBasicPropertyService userBasicPropertyService; | |||
@Autowired | |||
private AliyunOSS aliyunOSS; | |||
private void handleOrderPhoto(List<UserDigitalAvatarOrder> list){ | |||
if(list == null || list.isEmpty()){ | |||
return; | |||
} | |||
for (UserDigitalAvatarOrder order: list) { | |||
if(EnumDigitalAvatarOrderStatus.finish.getCode().equals(order.getStatus())){ | |||
UserDigitalAvatarPhoto userDigitalAvatarPhotoQ = new UserDigitalAvatarPhoto(); | |||
userDigitalAvatarPhotoQ.setOrderId(order.getId()); | |||
List<UserDigitalAvatarPhoto> photoList = userDigitalAvatarPhotoMapper.findCList(userDigitalAvatarPhotoQ); | |||
order.setPhotoList(photoList); | |||
} | |||
} | |||
} | |||
@Override | |||
public PageInfo<UserDigitalAvatarOrder> listAsPage(UserDigitalAvatarOrder record, Integer pageIndex, Integer pageSize) { | |||
PageInfo<UserDigitalAvatarOrder> pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> userDigitalAvatarOrderMapper.findList(record)); | |||
handleOrderPhoto(pageInfo.getList()); | |||
return pageInfo; | |||
} | |||
@Override | |||
public PageInfo<UserDigitalAvatarOrder> cListAsPage(UserDigitalAvatarOrder record, Integer pageIndex, Integer pageSize) { | |||
PageInfo<UserDigitalAvatarOrder> pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> userDigitalAvatarOrderMapper.findCList(record)); | |||
handleOrderPhoto(pageInfo.getList()); | |||
return pageInfo; | |||
} | |||
@Override | |||
public List<UserDigitalAvatarOrder> findList(UserDigitalAvatarOrder record) { | |||
return userDigitalAvatarOrderMapper.findList(record); | |||
} | |||
@Override | |||
public UserDigitalAvatarOrder selectById(Long id) { | |||
return userDigitalAvatarOrderMapper.selectById(id); | |||
} | |||
@Override | |||
public UserDigitalAvatarOrder getById(Long id) { | |||
UserDigitalAvatarOrder userDigitalAvatarOrder = userDigitalAvatarOrderMapper.selectById(id); | |||
if(userDigitalAvatarOrder != null && EnumDigitalAvatarOrderStatus.finish.getCode().equals(userDigitalAvatarOrder.getStatus())){ | |||
UserDigitalAvatarPhoto userDigitalAvatarPhotoQ = new UserDigitalAvatarPhoto(); | |||
userDigitalAvatarPhotoQ.setOrderId(userDigitalAvatarOrder.getId()); | |||
List<UserDigitalAvatarPhoto> photoList = userDigitalAvatarPhotoMapper.findList(userDigitalAvatarPhotoQ); | |||
userDigitalAvatarOrder.setPhotoList(photoList); | |||
} | |||
return userDigitalAvatarOrder; | |||
} | |||
@Override | |||
public ResultData createOrder(UserDigitalAvatarOrder record) { | |||
if(record.getUserId() == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未查询到用户"); | |||
} | |||
if(record.getDigitalAvatarId() == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"风格模板为空"); | |||
} | |||
if(StringUtils.isBlank(record.getUserImages())){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"照片为空"); | |||
} | |||
if(record.getUserImageList() == null || record.getUserImageList().isEmpty()){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"照片格式错误"); | |||
} | |||
DigitalAvatarMould digitalAvatarMould = digitalAvatarMouldMapper.selectById(record.getDigitalAvatarId()); | |||
if(digitalAvatarMould == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到风格模板信息"); | |||
} | |||
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(record.getPrice() > 0){ | |||
UserBasicProperty userBasicProperty = userBasicPropertyMapper.selectById(record.getUserId()); | |||
if(userBasicProperty == null || userBasicProperty.getDigitalAvatarResidueGlod() < record.getPrice()){ | |||
return new ResultData(ErrorCode.GLOD_NOT_ENOUGH); | |||
} | |||
} | |||
try{ | |||
UserDigitalAvatarOrderServiceImpl proxy = (UserDigitalAvatarOrderServiceImpl) AopContext.currentProxy(); | |||
proxy.handleOrder(record); | |||
proxy.createPhoto(record); | |||
return new ResultData(record); | |||
}catch(MallinkException e){ | |||
return new ResultData(e.getErrorCode(),e.getMessage()); | |||
}catch(Exception e){ | |||
return new ResultData(ErrorCode.SYS_SERVER_ERROR); | |||
} | |||
} | |||
@Override | |||
public ResultData createPhotoAgain(UserDigitalAvatarOrder record) { | |||
if(!EnumDigitalAvatarOrderStatus.finish.getCode().equals(record.getStatus())){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"订单状态异常"); | |||
} | |||
DigitalAvatarMould digitalAvatarMould = digitalAvatarMouldMapper.selectById(record.getDigitalAvatarId()); | |||
if(digitalAvatarMould == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未查询到风格模板信息"); | |||
} | |||
int count = userDigitalAvatarOrderMapper.findCount(record.getOrderId()); | |||
if(count >= digitalAvatarMould.getAgainCount()){ | |||
return new ResultData(ErrorCode.ORDER_CREAT_OVERRUN); | |||
} | |||
Date now = new Date(); | |||
final IdWorker idWorker = IdWorker.get(); | |||
UserDigitalAvatarOrder newDigitalAvatarOrder = new UserDigitalAvatarOrder(); | |||
newDigitalAvatarOrder.setId(idWorker.nextId()); | |||
newDigitalAvatarOrder.setOrderId(record.getOrderId()); | |||
newDigitalAvatarOrder.setUserId(record.getUserId()); | |||
newDigitalAvatarOrder.setUserImages(record.getUserImages()); | |||
newDigitalAvatarOrder.setDigitalAvatarId(record.getDigitalAvatarId()); | |||
newDigitalAvatarOrder.setDigitalAvatarType(record.getDigitalAvatarType()); | |||
newDigitalAvatarOrder.setDigitalAvatarSm(record.getDigitalAvatarSm()); | |||
newDigitalAvatarOrder.setPrice(0); | |||
newDigitalAvatarOrder.setTitle(record.getTitle()); | |||
newDigitalAvatarOrder.setStatus(EnumDigitalAvatarOrderStatus.wait.getCode()); | |||
newDigitalAvatarOrder.setCreateDate(now); | |||
newDigitalAvatarOrder.setUpdateDate(now); | |||
userDigitalAvatarOrderMapper.insert(newDigitalAvatarOrder); | |||
try{ | |||
UserDigitalAvatarOrderServiceImpl proxy = (UserDigitalAvatarOrderServiceImpl) AopContext.currentProxy(); | |||
proxy.createPhoto(record); | |||
return new ResultData(record); | |||
}catch(MallinkException e){ | |||
return new ResultData(e.getErrorCode(),e.getMessage()); | |||
}catch(Exception e){ | |||
return new ResultData(ErrorCode.SYS_SERVER_ERROR); | |||
} | |||
} | |||
@Override | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void handleOrder(UserDigitalAvatarOrder record) { | |||
Date now = new Date(); | |||
if(record.getPrice() > 0){ | |||
userBasicPropertyService.consumptionGlod(record.getUserId(),EnumProject.PROJECT_5.getCode(), EnumPropertyLogType.CONSUMPTION_10.getCode(), | |||
record.getPrice(),record.getId(),now); | |||
} | |||
final IdWorker idWorker = IdWorker.get(); | |||
record.setId(idWorker.nextId()); | |||
record.setOrderId(record.getId()); | |||
record.setStatus(EnumDigitalAvatarOrderStatus.wait.getCode()); | |||
record.setCreateDate(now); | |||
record.setUpdateDate(now); | |||
userDigitalAvatarOrderMapper.insert(record); | |||
} | |||
@Override | |||
public void deleteById(Long id) { | |||
userDigitalAvatarOrderMapper.deleteById(id); | |||
} | |||
@Async | |||
@Override | |||
public void createPhoto(UserDigitalAvatarOrder record){ | |||
if(EnumDigitalAvatarOrderStatus.finish.getCode().equals(record.getStatus())){ | |||
return; | |||
} | |||
UserDigitalAvatarOrder updOrder = new UserDigitalAvatarOrder(); | |||
updOrder.setId(record.getId()); | |||
try{ | |||
DigitalAvatarParam param = new DigitalAvatarParam(); | |||
param.setBg_img(record.getDigitalAvatarSm()); | |||
if(EnumDigitalAvatarMouldType.persion_1.getCode().equals(record.getDigitalAvatarType())){ | |||
String imgUrl1 = record.getUserImageList().get(0); | |||
param.setImg_lift(Base64Util.imageUrlToBase64(imgUrl1)); | |||
param.setImg_middle("None"); | |||
param.setImg_right("None"); | |||
}else if(EnumDigitalAvatarMouldType.persion_2.getCode().equals(record.getDigitalAvatarType())){ | |||
String imgUrl1 = record.getUserImageList().get(0); | |||
String imgUrl2 = record.getUserImageList().get(1); | |||
param.setImg_lift(Base64Util.imageUrlToBase64(imgUrl1)); | |||
param.setImg_middle("None"); | |||
param.setImg_right(Base64Util.imageUrlToBase64(imgUrl2)); | |||
}else if(EnumDigitalAvatarMouldType.persion_3.getCode().equals(record.getDigitalAvatarType())){ | |||
String imgUrl1 = record.getUserImageList().get(0); | |||
String imgUrl2 = record.getUserImageList().get(1); | |||
String imgUrl3 = record.getUserImageList().get(2); | |||
param.setImg_lift(Base64Util.imageUrlToBase64(imgUrl1)); | |||
param.setImg_middle(Base64Util.imageUrlToBase64(imgUrl2)); | |||
param.setImg_right(Base64Util.imageUrlToBase64(imgUrl3)); | |||
}else{ | |||
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"上传图片参数异常"); | |||
} | |||
DigitalAvatarResult result = AiDigitalAvatarHelper.digitalAvatarPhoto(param); | |||
if(result.isSuccess()){ | |||
UserDigitalAvatarOrderServiceImpl proxy = (UserDigitalAvatarOrderServiceImpl) AopContext.currentProxy(); | |||
proxy.handlePhoto(record,result.getImgList()); | |||
}else{ | |||
updOrder.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); | |||
updOrder.setMsg(result.getMsg()); | |||
} | |||
}catch(MallinkException e){ | |||
e.printStackTrace(); | |||
updOrder.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); | |||
updOrder.setMsg(e.getMessage()); | |||
} catch(Exception e){ | |||
e.printStackTrace(); | |||
updOrder.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); | |||
updOrder.setMsg("未知错误,请稍后重试"); | |||
} | |||
updOrder.setUpdateDate(new Date()); | |||
userDigitalAvatarOrderMapper.updateById(updOrder); | |||
} | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void handlePhoto(UserDigitalAvatarOrder record,List<String> imgList){ | |||
Date now = new Date(); | |||
UserDigitalAvatarOrder updOrder = new UserDigitalAvatarOrder(); | |||
updOrder.setId(record.getId()); | |||
updOrder.setStatus(EnumDigitalAvatarOrderStatus.finish.getCode()); | |||
updOrder.setMsg("success"); | |||
updOrder.setUpdateDate(now); | |||
userDigitalAvatarOrderMapper.updateById(updOrder); | |||
try{ | |||
final IdWorker idWorker = IdWorker.get(); | |||
for (String img: imgList) { | |||
InputStream inputStream = Base64Util.base2InputStream(img); | |||
String img_url = aliyunOSS.upload(record.getTenantId(), ".jpg", inputStream); | |||
UserDigitalAvatarPhoto userDigitalAvatarPhoto = new UserDigitalAvatarPhoto(); | |||
userDigitalAvatarPhoto.setId(idWorker.nextId()); | |||
userDigitalAvatarPhoto.setOrderId(record.getId()); | |||
userDigitalAvatarPhoto.setUserId(record.getUserId()); | |||
userDigitalAvatarPhoto.setImage(img_url); | |||
userDigitalAvatarPhoto.setStatus(EnumDigitalAvatarPhotoStatus.def.getCode()); | |||
userDigitalAvatarPhoto.setCreateDate(now); | |||
userDigitalAvatarPhoto.setUpdateDate(now); | |||
userDigitalAvatarPhotoMapper.insert(userDigitalAvatarPhoto); | |||
} | |||
}catch(Exception e){ | |||
throw new MallinkException(ErrorCode.PICTURE_ANALYZING_ERROR.getCode(),"上传图片异常"); | |||
} | |||
} | |||
} |
@@ -0,0 +1,131 @@ | |||
package com.iformall.service.sm.impl; | |||
import com.github.pagehelper.PageHelper; | |||
import com.github.pagehelper.PageInfo; | |||
import com.iformall.common.ErrorCode; | |||
import com.iformall.common.IdWorker; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.sm.*; | |||
import com.iformall.enums.*; | |||
import com.iformall.exception.MallinkException; | |||
import com.iformall.file.aliyun.AliyunOSS; | |||
import com.iformall.mapper.UserDigitalAvatarPhotoMapper; | |||
import com.iformall.service.UserBasicPropertyService; | |||
import com.iformall.service.sm.*; | |||
import com.iformall.sm.*; | |||
import com.iformall.utils.Base64Util; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.aop.framework.AopContext; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.scheduling.annotation.Async; | |||
import org.springframework.scheduling.annotation.AsyncResult; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.transaction.annotation.Propagation; | |||
import org.springframework.transaction.annotation.Transactional; | |||
import java.io.InputStream; | |||
import java.util.*; | |||
import java.util.concurrent.Future; | |||
@Service | |||
public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhotoService { | |||
private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
@Autowired | |||
UserDigitalAvatarPhotoMapper userDigitalAvatarPhotoMapper; | |||
@Autowired | |||
UserBasicPropertyService userBasicPropertyService; | |||
@Autowired | |||
private AliyunOSS aliyunOSS; | |||
@Override | |||
public UserDigitalAvatarPhoto selectById(Long id) { | |||
return userDigitalAvatarPhotoMapper.selectById(id); | |||
} | |||
@Override | |||
public ResultData createPhotoSupper(UserDigitalAvatarPhoto record) { | |||
if(!EnumDigitalAvatarPhotoStatus.def.getCode().equals(record.getStatus())){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"照片状态异常"); | |||
} | |||
try{ | |||
UserDigitalAvatarPhotoServiceImpl proxy = (UserDigitalAvatarPhotoServiceImpl) AopContext.currentProxy(); | |||
proxy.handleCreateSupper(record); | |||
proxy.superPhoto(record); | |||
return new ResultData(record); | |||
}catch(MallinkException e){ | |||
return new ResultData(e.getErrorCode(),e.getMessage()); | |||
}catch(Exception e){ | |||
return new ResultData(ErrorCode.SYS_SERVER_ERROR); | |||
} | |||
} | |||
@Override | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void handleCreateSupper(UserDigitalAvatarPhoto record){ | |||
Date now = new Date(); | |||
//todo 获取超分价格 | |||
Integer price = 0; | |||
record.setPrice(price); | |||
if(price > 0){ | |||
userBasicPropertyService.consumptionGlod(record.getUserId(),EnumProject.PROJECT_5.getCode(), EnumPropertyLogType.CONSUMPTION_11.getCode(), | |||
price,record.getId(),now); | |||
} | |||
UserDigitalAvatarPhoto updPhoto = new UserDigitalAvatarPhoto(); | |||
updPhoto.setId(record.getId()); | |||
updPhoto.setPrice(record.getPrice()); | |||
updPhoto.setStatus(EnumDigitalAvatarPhotoStatus.wait.getCode()); | |||
updPhoto.setUpdateDate(now); | |||
userDigitalAvatarPhotoMapper.updateById(updPhoto); | |||
record.setStatus(EnumDigitalAvatarPhotoStatus.wait.getCode()); | |||
record.setUpdateDate(now); | |||
} | |||
@Override | |||
public void superPhoto(UserDigitalAvatarPhoto record){ | |||
if(EnumDigitalAvatarPhotoStatus.finish.getCode().equals(record.getStatus())){ | |||
return; | |||
} | |||
UserDigitalAvatarPhoto updPhoto = new UserDigitalAvatarPhoto(); | |||
updPhoto.setId(record.getId()); | |||
try{ | |||
SuperImgParam param = new SuperImgParam(); | |||
param.setImg(Base64Util.imageUrlToBase64(record.getImage())); | |||
SuperImgResult result = AiDigitalAvatarHelper.superImg(param); | |||
if(result.isSuccess()){ | |||
InputStream inputStream = Base64Util.base2InputStream(result.getImg()); | |||
String img_url = aliyunOSS.upload(record.getTenantId(), ".jpg", inputStream); | |||
updPhoto.setImageSuper(img_url); | |||
updPhoto.setStatus(EnumDigitalAvatarPhotoStatus.finish.getCode()); | |||
updPhoto.setMsg("success"); | |||
}else{ | |||
updPhoto.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); | |||
updPhoto.setMsg(result.getMsg()); | |||
} | |||
} catch(MallinkException e){ | |||
e.printStackTrace(); | |||
updPhoto.setStatus(EnumDigitalAvatarPhotoStatus.fail.getCode()); | |||
updPhoto.setMsg(e.getMessage()); | |||
} catch(Exception e){ | |||
e.printStackTrace(); | |||
updPhoto.setStatus(EnumDigitalAvatarPhotoStatus.fail.getCode()); | |||
updPhoto.setMsg("未知错误,请稍后重试"); | |||
} | |||
updPhoto.setUpdateDate(new Date()); | |||
userDigitalAvatarPhotoMapper.updateById(updPhoto); | |||
} | |||
} |
@@ -0,0 +1,107 @@ | |||
package com.iformall.sm; | |||
import com.alibaba.fastjson.JSON; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.iformall.utils.HttpUtil; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.stereotype.Component; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
@Slf4j | |||
@Component | |||
public class AiDigitalAvatarHelper { | |||
private static String digital_avatar; | |||
@Value("${photo.digital_avatar}") | |||
public void setDigitalAvatar(String digital_avatar){ | |||
this.digital_avatar = digital_avatar; | |||
} | |||
public static DigitalAvatarResult digitalAvatarPhoto(DigitalAvatarParam param) { | |||
// log.info("生成照片start request:" + param.getBg_img()); | |||
String response = HttpUtil.doAiVideoPost(digital_avatar + "/make_face", JSONObject.toJSONString(param)); | |||
log.info("生成照片end response:"+response); | |||
DigitalAvatarResult result = new DigitalAvatarResult(); | |||
if(StringUtils.isBlank(response)){ | |||
result.setSuccess(false); | |||
result.setMsg("[metavatar]请求异常,请稍后重试"); | |||
return result; | |||
} | |||
JSONObject jsonObject = JSON.parseObject(response); | |||
JSONObject status = jsonObject.getJSONObject("status"); | |||
Integer code = status.getInteger("code"); | |||
if(code == null){ | |||
result.setSuccess(false); | |||
result.setMsg("[metavatar]请求异常,请稍后重试"); | |||
return result; | |||
} | |||
if(code.intValue() == 1000){ | |||
result.setSuccess(true); | |||
result.setMsg("success"); | |||
JSONObject data = jsonObject.getJSONObject("data"); | |||
List<String> imgList = new ArrayList<>(); | |||
imgList.add(data.getString("img_0")); | |||
imgList.add(data.getString("img_1")); | |||
imgList.add(data.getString("img_2")); | |||
imgList.add(data.getString("img_3")); | |||
result.setImgList(imgList); | |||
}else{ | |||
result.setSuccess(false); | |||
result.setMsg("[metavatar]"+status.getString("msg")); | |||
} | |||
return result; | |||
} | |||
public static SuperImgResult superImg(SuperImgParam param) { | |||
// log.info("生成照片start request:" + param.getBg_img()); | |||
String response = HttpUtil.doAiVideoPost(digital_avatar + "/sr_img", JSONObject.toJSONString(param)); | |||
log.info("照片超分end response:"+response); | |||
SuperImgResult result = new SuperImgResult(); | |||
if(StringUtils.isBlank(response)){ | |||
result.setSuccess(false); | |||
result.setMsg("[metavatar]请求异常,请稍后重试"); | |||
return result; | |||
} | |||
JSONObject jsonObject = JSON.parseObject(response); | |||
JSONObject status = jsonObject.getJSONObject("status"); | |||
Integer code = status.getInteger("code"); | |||
if(code == null){ | |||
result.setSuccess(false); | |||
result.setMsg("[metavatar]请求异常,请稍后重试"); | |||
return result; | |||
} | |||
if(code.intValue() == 1000){ | |||
result.setSuccess(true); | |||
result.setMsg("success"); | |||
JSONObject data = jsonObject.getJSONObject("data"); | |||
result.setImg(data.getString("img")); | |||
}else{ | |||
result.setSuccess(false); | |||
result.setMsg("[metavatar]"+status.getString("msg")); | |||
} | |||
return result; | |||
} | |||
public static void main(String[] args) { | |||
} | |||
} |
@@ -36,16 +36,20 @@ public class AiVideoHelper { | |||
public void setUrl(String url){ | |||
this.url = url; | |||
} | |||
private static String hy_url; | |||
@Value("${photo.hy_url}") | |||
public void setHyUrl(String hyUrl){ | |||
this.hy_url = hyUrl; | |||
} | |||
private static String talk_url; | |||
@Value("${photo.talk}") | |||
public void setTalkUrl(String talkUrl){ | |||
this.talk_url = talkUrl; | |||
} | |||
public static String photo_speak_suffix = "/img_talking"; | |||
public static String image_quality_suffix = "/image_qualit"; | |||
public static String voice_preview = "/tts_wav"; | |||
@@ -0,0 +1,18 @@ | |||
package com.iformall.sm; | |||
import com.alibaba.fastjson.JSON; | |||
import com.alibaba.fastjson.JSONObject; | |||
import lombok.Data; | |||
import java.util.List; | |||
import java.util.Map; | |||
@Data | |||
public class DigitalAvatarParam { | |||
private String bg_img; | |||
private String img_lift; | |||
private String img_middle; | |||
private String img_right; | |||
} |
@@ -0,0 +1,15 @@ | |||
package com.iformall.sm; | |||
import lombok.Data; | |||
import java.util.List; | |||
@Data | |||
public class DigitalAvatarResult { | |||
private boolean success; | |||
private String msg; | |||
private List<String> imgList; | |||
} |
@@ -0,0 +1,10 @@ | |||
package com.iformall.sm; | |||
import lombok.Data; | |||
@Data | |||
public class SuperImgParam { | |||
private String img; | |||
} |
@@ -0,0 +1,13 @@ | |||
package com.iformall.sm; | |||
import lombok.Data; | |||
@Data | |||
public class SuperImgResult { | |||
private boolean success; | |||
private String msg; | |||
private String img; | |||
} |
@@ -1,10 +1,12 @@ | |||
package com.iformall.utils; | |||
import sun.misc.BASE64Decoder; | |||
import sun.misc.BASE64Encoder; | |||
import java.io.*; | |||
import java.net.HttpURLConnection; | |||
import java.net.URL; | |||
import java.util.Base64; | |||
import java.util.regex.Matcher; | |||
import java.util.regex.Pattern; | |||
@@ -366,6 +368,41 @@ public class Base64Util { | |||
return null; | |||
} | |||
public static InputStream base2InputStream(String base64string) { | |||
ByteArrayInputStream stream = null; | |||
try { | |||
BASE64Decoder decoder = new BASE64Decoder(); | |||
byte[] bt = decoder.decodeBuffer(base64string); | |||
stream = new ByteArrayInputStream(bt); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
return stream; | |||
} | |||
public static String getFormatName(byte[] bytes) { | |||
if (bytes == null || bytes.length < 2) { | |||
return null; | |||
} | |||
if ((bytes[0] & 0xFF) == 0x47 && (bytes[1] & 0xFF) == 0x49) { | |||
return "gif"; | |||
} | |||
if ((bytes[0] & 0xFF) == 0x89 && (bytes[1] & 0xFF) == 0x50) { | |||
return "png"; | |||
} | |||
if ((bytes[0] & 0xFF) == 0xFF && (bytes[1] & 0xFF) == 0xD8) { | |||
return "jpg"; | |||
} | |||
return null; | |||
} | |||
public static String getFormatNameFromBase64(String base64) { | |||
byte[] bytes = Base64.getDecoder().decode(base64); | |||
return getFormatName(bytes); | |||
} | |||
// /** | |||
// * 图片转字符串 | |||
// * @param image 图片Buffer | |||
@@ -15,7 +15,9 @@ | |||
<result column="price" jdbcType="INTEGER" property="price"/> | |||
<result column="detail" jdbcType="VARCHAR" property="detail"/> | |||
<result column="remark" jdbcType="VARCHAR" property="remark"/> | |||
<result column="mould_type" jdbcType="INTEGER" property="mouldType"/> | |||
<result column="mould_sm_id" jdbcType="VARCHAR" property="mouldSmId"/> | |||
<result column="again_count" jdbcType="INTEGER" property="againCount"/> | |||
<result column="status" jdbcType="INTEGER" property="status"/> | |||
<result column="puton_date" jdbcType="TIMESTAMP" property="putonDate"/> | |||
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||
@@ -25,7 +27,7 @@ | |||
<sql id="allColumns"> | |||
`id`, `tenant_id`, `parent_tenant_id`, `cover_img`, `cover_picture`, `detail_picture`, | |||
`title`, `sub_title`, `scene_sign`, `sale_price`, `price`, | |||
`detail`, `remark`, `mould_sm_id`, | |||
`detail`, `remark`, `mould_type`, `mould_sm_id`, `again_count`, | |||
`status`, `puton_date`, `create_date`, `update_date` | |||
</sql> | |||
@@ -47,20 +49,12 @@ | |||
and `title` like concat('%', #{title},'%') | |||
</if> | |||
<if test=" null != subTitle "> | |||
and `sub_title` like concat('%', #{subTitle},'%') | |||
</if> | |||
<if test=" null != sceneSign and '' != sceneSign"> | |||
and JSON_CONTAINS(scene_sign,json_array(#{sceneSign})) | |||
</if> | |||
<if test=" null != salePrice "> | |||
and `sale_price` = #{salePrice} | |||
</if> | |||
<if test=" null != price "> | |||
and `price` = #{price} | |||
<if test=" null != mouldType"> | |||
and `mould_type` = #{mouldType} | |||
</if> | |||
<if test=" null != status"> | |||
@@ -99,7 +93,7 @@ | |||
select | |||
`id`, `cover_img`, `cover_picture`, | |||
`title`, `sub_title`, `scene_sign`, `sale_price`, `price`, | |||
`mould_sm_id`, | |||
`mould_type`, `mould_sm_id`, | |||
`status`, `create_date`, `update_date` | |||
from digital_avatar_mould | |||
<include refid="dynamicWhereConditions"/> | |||
@@ -44,9 +44,17 @@ | |||
<update id="addGlod" parameterType="com.iformall.domain.po.UserBasicProperty"> | |||
update user_basic_property | |||
set `update_date` = #{updateDate} | |||
,`digital_avatar_glod` = digital_avatar_glod+#{digitalAvatarGlod} | |||
,`digital_avatar_residue_glod` = digital_avatar_residue_glod+#{digitalAvatarResidueGlod} | |||
,`digital_avatar_glod` = digital_avatar_glod+#{addGlod} | |||
,`digital_avatar_residue_glod` = digital_avatar_residue_glod+#{addGlod} | |||
where id = #{id} | |||
</update> | |||
<update id="reduceGlod" parameterType="com.iformall.domain.po.UserBasicProperty"> | |||
update user_basic_property | |||
set `update_date` = #{updateDate} | |||
,`digital_avatar_residue_glod` = digital_avatar_residue_glod-#{reduceGlod} | |||
where id = #{id} | |||
and digital_avatar_residue_glod >= #{reduceGlod} | |||
</update> | |||
</mapper> |
@@ -0,0 +1,111 @@ | |||
<?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.UserDigitalAvatarOrderMapper"> | |||
<resultMap id="BaseResultMap" type="com.iformall.domain.po.sm.UserDigitalAvatarOrder"> | |||
<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="order_id" jdbcType="BIGINT" property="orderId"/> | |||
<result column="user_id" jdbcType="BIGINT" property="userId"/> | |||
<result column="user_images" jdbcType="VARCHAR" property="userImages"/> | |||
<result column="digital_avatar_id" jdbcType="BIGINT" property="digitalAvatarId"/> | |||
<result column="digital_avatar_type" jdbcType="INTEGER" property="digitalAvatarType"/> | |||
<result column="digital_avatar_sm" jdbcType="VARCHAR" property="digitalAvatarSm"/> | |||
<result column="price" jdbcType="INTEGER" property="price"/> | |||
<result column="title" jdbcType="VARCHAR" property="title"/> | |||
<result column="remark" jdbcType="VARCHAR" property="remark"/> | |||
<result column="status" jdbcType="INTEGER" property="status"/> | |||
<result column="msg" jdbcType="VARCHAR" property="msg"/> | |||
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | |||
</resultMap> | |||
<sql id="allColumns"> | |||
`id`, `tenant_id`, `parent_tenant_id`, `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> | |||
<sql id="dynamicWhereConditions"> | |||
where `is_del` = 0 | |||
<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 != orderId "> | |||
and `order_id` = #{orderId} | |||
</if> | |||
<if test=" null != userId "> | |||
and `user_id` = #{userId} | |||
</if> | |||
<if test=" null != digitalAvatarId "> | |||
and `digital_avatar_id` = #{digitalAvatarId} | |||
</if> | |||
<if test=" null != digitalAvatarType "> | |||
and `digital_avatar_type` = #{digitalAvatarType} | |||
</if> | |||
<if test=" null != title and ''!=title"> | |||
and `title` like concat('%', #{title},'%') | |||
</if> | |||
<if test=" null != videoStatus "> | |||
and `status` = #{status} | |||
</if> | |||
<if test=" null != startDate "> | |||
and create_date >= #{startDate} | |||
</if> | |||
<if test=" null != endDate"> | |||
and create_date < #{endDate} | |||
</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.sm.UserDigitalAvatarOrder" resultMap="BaseResultMap"> | |||
select | |||
<include refid="allColumns"/> | |||
from user_digital_avatar_order | |||
<include refid="dynamicWhereConditions"/> | |||
</select> | |||
<delete id="deleteById" parameterType="java.util.HashMap"> | |||
update user_digital_avatar_order set is_del = 1,update_date = now() where id = #{id} | |||
</delete> | |||
<select id="findCList" parameterType="com.iformall.domain.po.sm.UserDigitalAvatarOrder" resultMap="BaseResultMap"> | |||
select | |||
`id`, `order_id`, | |||
`digital_avatar_type`, | |||
`title`, `remark`, `status`, `msg`,`create_date`, `update_date` | |||
from user_digital_avatar_order | |||
<include refid="dynamicWhereConditions"/> | |||
</select> | |||
<select id="findCount" parameterType="java.util.HashMap" resultType="Integer"> | |||
select count(1) | |||
from user_digital_avatar_order | |||
where `order_id` = #{orderId} | |||
</select> | |||
</mapper> |
@@ -0,0 +1,90 @@ | |||
<?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.UserDigitalAvatarPhotoMapper"> | |||
<resultMap id="BaseResultMap" type="com.iformall.domain.po.sm.UserDigitalAvatarPhoto"> | |||
<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="order_id" jdbcType="BIGINT" property="orderId"/> | |||
<result column="user_id" jdbcType="BIGINT" property="userId"/> | |||
<result column="image" jdbcType="VARCHAR" property="image"/> | |||
<result column="price" jdbcType="INTEGER" property="price"/> | |||
<result column="remark" jdbcType="VARCHAR" property="remark"/> | |||
<result column="image_super" jdbcType="VARCHAR" property="imageSuper"/> | |||
<result column="status" jdbcType="INTEGER" property="status"/> | |||
<result column="msg" jdbcType="VARCHAR" property="msg"/> | |||
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | |||
</resultMap> | |||
<sql id="allColumns"> | |||
`id`, `tenant_id`, `parent_tenant_id`, `order_id`, `user_id`, | |||
`image`, `price`, | |||
`remark`,`image_super`, `status`, `msg`, `create_date`, `update_date` | |||
</sql> | |||
<sql id="dynamicWhereConditions"> | |||
where `is_del` = 0 | |||
<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 != orderId "> | |||
and `order_id` = #{orderId} | |||
</if> | |||
<if test=" null != userId "> | |||
and `user_id` = #{userId} | |||
</if> | |||
<if test=" null != videoStatus "> | |||
and `status` = #{status} | |||
</if> | |||
<if test=" null != startDate "> | |||
and create_date >= #{startDate} | |||
</if> | |||
<if test=" null != endDate"> | |||
and create_date < #{endDate} | |||
</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.sm.UserDigitalAvatarPhoto" resultMap="BaseResultMap"> | |||
select | |||
<include refid="allColumns"/> | |||
from user_digital_avatar_photo | |||
<include refid="dynamicWhereConditions"/> | |||
</select> | |||
<delete id="deleteById" parameterType="java.util.HashMap"> | |||
update user_digital_avatar_photo set is_del = 1,update_date = now() where id = #{id} | |||
</delete> | |||
<select id="findCList" parameterType="com.iformall.domain.po.sm.UserDigitalAvatarPhoto" resultMap="BaseResultMap"> | |||
select | |||
`id`, `order_id`, | |||
`image`, | |||
`image_super`, `status`, `msg`, `create_date`, `update_date` | |||
from user_digital_avatar_photo | |||
<include refid="dynamicWhereConditions"/> | |||
</select> | |||
</mapper> |