diff --git a/suimangAdmin/src/main/resources/db/migration/V2023080800001_create.sql b/suimangAdmin/src/main/resources/db/migration/V2023080800001_create.sql index 1145b1e..c7ab91c 100644 --- a/suimangAdmin/src/main/resources/db/migration/V2023080800001_create.sql +++ b/suimangAdmin/src/main/resources/db/migration/V2023080800001_create.sql @@ -40,8 +40,10 @@ CREATE TABLE `user_basic_property_log` ( ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户创建视频记录表' ROW_FORMAT = Dynamic; - +user_basic_image product product_order product_order_sharing + +digital_avatar_mould diff --git a/suimangCApi/src/main/java/com/iformall/controller/DigitalAvatarMouldController.java b/suimangCApi/src/main/java/com/iformall/controller/DigitalAvatarMouldController.java new file mode 100644 index 0000000..beb7662 --- /dev/null +++ b/suimangCApi/src/main/java/com/iformall/controller/DigitalAvatarMouldController.java @@ -0,0 +1,61 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.AuthIgnore; +import com.iformall.common.ResultData; +import com.iformall.domain.po.base.BaseEntity; +import com.iformall.domain.po.sm.DigitalAvatarMould; +import com.iformall.domain.po.sm.PersonMould; +import com.iformall.enums.EnumaMouldPatchStatus; +import com.iformall.service.sm.DigitalAvatarMouldService; +import com.iformall.service.sm.MouldPatchSignService; +import com.iformall.service.sm.PersonMouldService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@RequestMapping("/api/digitalAvatarMould") +@Api(description = "模板接口") +public class DigitalAvatarMouldController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private DigitalAvatarMouldService digitalAvatarMouldService; + + @AuthIgnore + @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 DigitalAvatarMould record, Integer pageNum, Integer pageSize) { + logger.debug("[" + getIpAddr() + "] DigitalAvatarMouldController::list"); + if (record == null) record = new DigitalAvatarMould(); + record.setStatus(EnumaMouldPatchStatus.put_on.getCode()); + record.setSortColumns(BaseEntity.SortField.UpdateDate_DESC); + final PageInfo page = digitalAvatarMouldService.cListAsPage(record, pageNum, pageSize); + return new ResultData(page); + } + + @AuthIgnore + @ApiOperation("根据id查询接口") + @GetMapping("/findById") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData findById(Long id) { + logger.debug("[" + getIpAddr() + "] DigitalAvatarMouldController::findById"); + DigitalAvatarMould digitalAvatarMould = digitalAvatarMouldService.getDetailById(id); + + return new ResultData(digitalAvatarMould); + } + +} diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/DigitalAvatarMould.java b/suimangService/src/main/java/com/iformall/domain/po/sm/DigitalAvatarMould.java new file mode 100644 index 0000000..b4a1c81 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/DigitalAvatarMould.java @@ -0,0 +1,116 @@ +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.Date; +import java.util.List; + +@TableName(value = "digital_avatar_mould") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class DigitalAvatarMould extends TenantEntity { + + protected Long id; + + @TableField(exist = false) + @SortColumn(column = "sale_price") + private String salePriceStr; + + @TableField(exist = false) + @SortColumn(column = "price") + private String priceStr; + + @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="封面图",name="coverImg") + private String coverImg; + + @io.swagger.annotations.ApiModelProperty(value="多封面图",name="coverPicture") + private String coverPicture; + + @io.swagger.annotations.ApiModelProperty(value="详情多图",name="detailPicture") + private String detailPicture; + + @io.swagger.annotations.ApiModelProperty(value="名称",name="title") + private String title; + @io.swagger.annotations.ApiModelProperty(value="副标题",name="subTitle") + private String subTitle; + + @io.swagger.annotations.ApiModelProperty(value="标签",name="sceneSign") + private String sceneSign; + + @TableField(exist = false) + private List sceneSignList; + + public List getSceneSignList(){ + if(StringUtils.isNotBlank(this.getSceneSign())){ + try{ + List longs = JSONObject.parseArray(this.getSceneSign(), Long.class); + if(longs != null && longs.size() > 0){ + return longs; + } + }catch(Exception e){ + } + } + return null; + } + + @TableField(exist = false) + private List mouldPatchSign; + + @io.swagger.annotations.ApiModelProperty(value="售价",name="salePrice") + private Integer salePrice; + + @io.swagger.annotations.ApiModelProperty(value="须知",name="detail") + private String detail; + @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="模板第三方Id",name="mouldSmId") + private String mouldSmId; + + @io.swagger.annotations.ApiModelProperty(value="EnumaMouldPatchStatus 状态",name="status") + private Integer status; + @io.swagger.annotations.ApiModelProperty(value="上架时间",name="putonDate") + private Date putonDate; + + @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") + private Date createDate; + @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") + private Date updateDate; + + + public String getSalePriceStr() { + if(salePrice!=null) { + salePriceStr = new BigDecimal(salePrice).divide(new BigDecimal(100)).toString(); + } + return salePriceStr; + } + + public String getPriceStr() { + if(price!=null) { + priceStr = new BigDecimal(price).divide(new BigDecimal(100)).toString(); + } + return priceStr; + } + +} diff --git a/suimangService/src/main/java/com/iformall/enums/EnumMouldPatchType.java b/suimangService/src/main/java/com/iformall/enums/EnumMouldPatchType.java index fd04471..3c36a11 100644 --- a/suimangService/src/main/java/com/iformall/enums/EnumMouldPatchType.java +++ b/suimangService/src/main/java/com/iformall/enums/EnumMouldPatchType.java @@ -15,7 +15,8 @@ public enum EnumMouldPatchType { // body_mould(3, "身体模板"), background_mould(4, "背景"), material_mould(5, "素材"), - person_photo(6, "人物照片"), + person_photo_mould(6, "人物照片"), + digital_avatar_mould(7, "数字人分身"), ; public static EnumMouldPatchType getEnum(Integer code) { diff --git a/suimangService/src/main/java/com/iformall/mapper/DigitalAvatarMouldMapper.java b/suimangService/src/main/java/com/iformall/mapper/DigitalAvatarMouldMapper.java new file mode 100644 index 0000000..c4992ea --- /dev/null +++ b/suimangService/src/main/java/com/iformall/mapper/DigitalAvatarMouldMapper.java @@ -0,0 +1,22 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.sm.DigitalAvatarMould; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface DigitalAvatarMouldMapper extends CommonMapper { + + List findList(DigitalAvatarMould record); + + int deleteById(@Param("id")Long id); + + /** + * c端列表查询,尽量减少字段 + * @param record + * @return + */ + List findCList(DigitalAvatarMould record); + +} diff --git a/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java index 4abe509..1b75922 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -837,7 +837,7 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc basicInfo.setUpdateDate(basicInfoUpd.getUpdateDate()); String key = Constant.tokenPrev + basicInfo.getToken(); - RedisCacheUtils.cache(redisTemplate, key, basicInfo, Constant.H_EXPIRE); + RedisCacheUtils.cache(redisTemplate, key, basicInfo, Constant.EXPIRE); } @Override @@ -852,8 +852,8 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc Long expire = RedisCacheUtils.getExpire(redisTemplate, key); if(expire != null && expire.longValue() > 60l){ WxCUserBasicInfo basicInfo = RedisCacheUtils.getCacheObject(redisTemplate, key, WxCUserBasicInfo.class); - if(expire.longValue() < 1800l){//小于30分钟续签一小时 - RedisCacheUtils.cache(redisTemplate, key, basicInfo, Constant.H_EXPIRE); + if(expire.longValue() < 36000l){//续签 10*60*60 + RedisCacheUtils.cache(redisTemplate, key, basicInfo, Constant.EXPIRE); } return basicInfo; } diff --git a/suimangService/src/main/java/com/iformall/service/sm/DigitalAvatarMouldService.java b/suimangService/src/main/java/com/iformall/service/sm/DigitalAvatarMouldService.java new file mode 100644 index 0000000..7407721 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/sm/DigitalAvatarMouldService.java @@ -0,0 +1,45 @@ +package com.iformall.service.sm; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.ResultData; +import com.iformall.domain.po.sm.DigitalAvatarMould; + +public interface DigitalAvatarMouldService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(DigitalAvatarMould record, Integer pageIndex, Integer pageSize); + PageInfo cListAsPage(DigitalAvatarMould record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + DigitalAvatarMould getById(Long id); + DigitalAvatarMould getDetailById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + ResultData saveOrUpdate(DigitalAvatarMould record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + void updateOnline(DigitalAvatarMould record); + +} diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/DigitalAvatarMouldServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/DigitalAvatarMouldServiceImpl.java new file mode 100644 index 0000000..645703f --- /dev/null +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/DigitalAvatarMouldServiceImpl.java @@ -0,0 +1,111 @@ +package com.iformall.service.sm.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; +import com.iformall.domain.po.sm.DigitalAvatarMould; +import com.iformall.domain.po.sm.MouldPatchSign; +import com.iformall.enums.EnumaMouldPatchStatus; +import com.iformall.mapper.DigitalAvatarMouldMapper; +import com.iformall.service.sm.DigitalAvatarMouldService; +import com.iformall.service.sm.MouldPatchSignService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + + +@Service +public class DigitalAvatarMouldServiceImpl implements DigitalAvatarMouldService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + DigitalAvatarMouldMapper digitalAvatarMouldMapper; + + @Autowired + MouldPatchSignService mouldPatchSignService; + + + @Override + public PageInfo listAsPage(DigitalAvatarMould record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> digitalAvatarMouldMapper.findList(record)); + } + + @Override + public PageInfo cListAsPage(DigitalAvatarMould record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> digitalAvatarMouldMapper.findCList(record)); + } + + @Override + public DigitalAvatarMould getById(Long id) { + return digitalAvatarMouldMapper.selectById(id); + } + + @Override + public DigitalAvatarMould getDetailById(Long id) { + DigitalAvatarMould digitalAvatarMould = getById(id); + if(digitalAvatarMould == null){ + return null; + } + if(digitalAvatarMould.getSceneSignList() != null && !digitalAvatarMould.getSceneSignList().isEmpty()){ + MouldPatchSign signQ = new MouldPatchSign(); + signQ.setIds(digitalAvatarMould.getSceneSignList()); + List signList = mouldPatchSignService.getList(signQ); + digitalAvatarMould.setMouldPatchSign(signList); + } + return digitalAvatarMould; + } + + @Override + public ResultData saveOrUpdate(DigitalAvatarMould record) { + //金额处理 + if (StringUtils.isNotEmpty(record.getSalePriceStr())) { + record.setSalePrice(new BigDecimal(record.getSalePriceStr()).multiply(new BigDecimal(100)).intValue()); + } + if (StringUtils.isNotEmpty(record.getPriceStr())) { + record.setPrice(new BigDecimal(record.getPriceStr()).multiply(new BigDecimal(100)).intValue()); + } + + Date now = new Date(); + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + if(record.getStatus() == null){ + record.setStatus(EnumaMouldPatchStatus.draft.getCode()); + } + record.setCreateDate(now); + record.setUpdateDate(now); + digitalAvatarMouldMapper.insert(record); + } else { + record.setUpdateDate(now); + digitalAvatarMouldMapper.updateById(record); + } + return new ResultData(); + } + + @Override + public void deleteById(Long id) { + digitalAvatarMouldMapper.deleteById(id); + } + + @Override + public void updateOnline(DigitalAvatarMould record) { + Date now = new Date(); + DigitalAvatarMould digitalAvatarMouldUpd = new DigitalAvatarMould(); + digitalAvatarMouldUpd.setId(record.getId()); + digitalAvatarMouldUpd.setStatus(record.getStatus()); + if(EnumaMouldPatchStatus.put_on.getCode().equals(digitalAvatarMouldUpd.getStatus())){ + digitalAvatarMouldUpd.setPutonDate(now); + } + digitalAvatarMouldUpd.setUpdateDate(now); + digitalAvatarMouldMapper.updateById(digitalAvatarMouldUpd); + } + +} diff --git a/suimangService/src/main/resources/mapper/DigitalAvatarMouldMapper.xml b/suimangService/src/main/resources/mapper/DigitalAvatarMouldMapper.xml new file mode 100644 index 0000000..01e93da --- /dev/null +++ b/suimangService/src/main/resources/mapper/DigitalAvatarMouldMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + `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`, + `status`, `puton_date`, `create_date`, `update_date` + + + + where `is_del` = 0 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `title` like concat('%', #{title},'%') + + + + and `sub_title` like concat('%', #{subTitle},'%') + + + + and JSON_CONTAINS(scene_sign,json_array(#{sceneSign})) + + + + and `sale_price` = #{salePrice} + + + + and `price` = #{price} + + + + and `status` = #{status} + + + + and create_date >= #{startDate} + + + and create_date < #{endDate} + + + + and id in + + #{idItem} + + + + order by ${sortColumns} + + + + + + update digital_avatar_mould set is_del = 1,update_date = now() where id = #{id} + + + + +