| @@ -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> | |||