diff --git a/src/main/java/com/ai/da/controller/DesignController.java b/src/main/java/com/ai/da/controller/DesignController.java index f6d7f2a8..67353b64 100644 --- a/src/main/java/com/ai/da/controller/DesignController.java +++ b/src/main/java/com/ai/da/controller/DesignController.java @@ -5,6 +5,7 @@ import com.ai.da.model.dto.*; import com.ai.da.model.vo.DesignCollectionVO; import com.ai.da.model.vo.DesignLikeVO; import com.ai.da.service.DesignService; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -26,7 +27,7 @@ public class DesignController { @ApiOperation(value = "设计 Conllection") @PostMapping("/designCollection") - public Response designCollection(@Valid @RequestBody DesignCollectionDTO designDTO) { + public Response designCollection(@Valid @RequestBody DesignCollectionDTO designDTO) { return Response.success(designService.designCollection(designDTO)); } diff --git a/src/main/java/com/ai/da/controller/ThirdPartyController.java b/src/main/java/com/ai/da/controller/ThirdPartyController.java index c9edb851..f9541e6b 100644 --- a/src/main/java/com/ai/da/controller/ThirdPartyController.java +++ b/src/main/java/com/ai/da/controller/ThirdPartyController.java @@ -37,4 +37,5 @@ public class ThirdPartyController { public Response editUser( @RequestBody AccountEditDTO accountEditDTO) { return Response.success(accountService.editUser(accountEditDTO)); } + } diff --git a/src/main/java/com/ai/da/controller/WorkspaceController.java b/src/main/java/com/ai/da/controller/WorkspaceController.java new file mode 100644 index 00000000..006e0baf --- /dev/null +++ b/src/main/java/com/ai/da/controller/WorkspaceController.java @@ -0,0 +1,111 @@ +package com.ai.da.controller; + +import com.ai.da.common.context.UserContext; +import com.ai.da.common.response.PageBaseResponse; +import com.ai.da.common.response.Response; +import com.ai.da.common.utils.CopyUtil; +import com.ai.da.mapper.entity.Account; +import com.ai.da.mapper.entity.UserLikeGroup; +import com.ai.da.mapper.entity.Workspace; +import com.ai.da.model.dto.QueryHistoryPageDTO; +import com.ai.da.model.dto.WorkspaceDTO; +import com.ai.da.model.enums.BizJson; +import com.ai.da.model.vo.AuthPrincipalVo; +import com.ai.da.model.vo.UserLikeGroupVO; +import com.ai.da.model.vo.UserLikeVO; +import com.ai.da.model.vo.WorkspaceVO; +import com.ai.da.service.WorkspaceService; +import com.baomidou.mybatisplus.core.conditions.query.Query; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.base.Function; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import lombok.AllArgsConstructor; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 控制器 + * + * @author SHAHAIBO + * @since 2023-08-01 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/api/workspace") +@Api(value = "", tags = "接口") +public class WorkspaceController { + + @Resource + private WorkspaceService workspaceService; + + /** + * 详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "详情", notes = "传入workspace") + public Response detail(@ApiParam(value = "主键集合", required = true) @RequestParam Long id) { + Workspace detail = workspaceService.getById(id); + return Response.success(detail); + } + + /** + * 分页 + */ + @GetMapping("/list") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "分页", notes = "传入workspace") + public Response> list(@Valid @RequestBody WorkspaceDTO query) { + IPage convert = workspaceService.getPage(query); + return Response.success(PageBaseResponse.success(convert)); + } + + /** + * 新增或编辑 + */ + @PostMapping("/saveOrUpdate") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "新增或编辑", notes = "传入workspace") + public Response saveOrUpdate(@Valid @RequestBody Workspace workspace) { + return Response.success(workspaceService.saveOrUpdate(workspace)); + } + + + /** + * 删除 + */ + @PostMapping("/remove") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "删除", notes = "传入id") + public Response remove(@ApiParam(value = "主键集合", required = true) @RequestParam Long id) { + return Response.success(workspaceService.removeById(id)); + } + + @GetMapping("/enumValues") + @ApiOperationSupport(order = 5) + @ApiOperation(value = "获取枚举类值") + public Response> enumValues(@RequestParam("enumName") String enumName) { + List bizJsonList = workspaceService.getEnumValues(enumName); + return Response.success(bizJsonList); + } + + +} diff --git a/src/main/java/com/ai/da/mapper/TDesignPythonOutfitDetailMapper.java b/src/main/java/com/ai/da/mapper/TDesignPythonOutfitDetailMapper.java new file mode 100644 index 00000000..aead9623 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/TDesignPythonOutfitDetailMapper.java @@ -0,0 +1,27 @@ +package com.ai.da.mapper; + +import com.ai.da.common.config.mybatis.plus.CommonMapper; +import com.ai.da.mapper.entity.TDesignPythonOutfitDetail; +import com.ai.da.model.vo.TDesignPythonOutfitDetailVO; +import com.baomidou.mybatisplus.core.metadata.IPage; + +import java.util.List; + +/** + * design item详情表 Mapper 接口 + * + * @author SHAHAIBO + * @since 2023-09-04 + */ +public interface TDesignPythonOutfitDetailMapper extends CommonMapper { + + /** + * 自定义分页 + * + * @param page + * @param tDesignPythonOutfitDetail + * @return + */ + List selectTDesignPythonOutfitDetailPage(IPage page, TDesignPythonOutfitDetailVO tDesignPythonOutfitDetail); + +} diff --git a/src/main/java/com/ai/da/mapper/TDesignPythonOutfitMapper.java b/src/main/java/com/ai/da/mapper/TDesignPythonOutfitMapper.java new file mode 100644 index 00000000..62dfc5a8 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/TDesignPythonOutfitMapper.java @@ -0,0 +1,27 @@ +package com.ai.da.mapper; + + +import com.ai.da.common.config.mybatis.plus.CommonMapper; +import com.ai.da.mapper.entity.TDesignPythonOutfit; +import com.ai.da.model.vo.TDesignPythonOutfitVO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import java.util.List; + +/** + * design item表 存对应design的8张图片 Mapper 接口 + * + * @author SHAHAIBO + * @since 2023-09-04 + */ +public interface TDesignPythonOutfitMapper extends CommonMapper { + + /** + * 自定义分页 + * + * @param page + * @param tDesignPythonOutfit + * @return + */ + List selectTDesignPythonOutfitPage(IPage page, TDesignPythonOutfitVO tDesignPythonOutfit); + +} diff --git a/src/main/java/com/ai/da/mapper/WorkspaceMapper.java b/src/main/java/com/ai/da/mapper/WorkspaceMapper.java new file mode 100644 index 00000000..8b761ae3 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/WorkspaceMapper.java @@ -0,0 +1,27 @@ +package com.ai.da.mapper; + +import com.ai.da.common.config.mybatis.plus.CommonMapper; +import com.ai.da.mapper.entity.Workspace; +import com.ai.da.model.vo.WorkspaceVO; +import com.baomidou.mybatisplus.core.metadata.IPage; + +import java.util.List; + +/** + * Mapper 接口 + * + * @author SHAHAIBO + * @since 2023-08-01 + */ +public interface WorkspaceMapper extends CommonMapper { + + /** + * 自定义分页 + * + * @param page + * @param workspace + * @return + */ + List selectWorkspacePage(IPage page, WorkspaceVO workspace); + +} diff --git a/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfit.java b/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfit.java new file mode 100644 index 00000000..0fe1a833 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfit.java @@ -0,0 +1,70 @@ + +package com.ai.da.mapper.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import java.time.LocalDateTime; +import java.io.Serializable; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * design item表 存对应design的8张图片实体类 + * + * @author SHAHAIBO + * @since 2023-08-30 + */ +@Data +@ApiModel(value = "TDesignPythonOutfit对象", description = "design item表 存对应design的8张图片") +public class TDesignPythonOutfit implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 关联的design ID + */ + @ApiModelProperty(value = "关联的design ID") + private Long designId; + /** + * 关联的collection ID + */ + @ApiModelProperty(value = "关联的collection ID") + private Long collectionId; + /** + * design后的用户文件地址(python 返回) + */ + @ApiModelProperty(value = "design后的用户文件地址(python 返回)") + private String designUrl; + /** + * 保存用户ID + */ + @ApiModelProperty(value = "保存用户ID") + private Long userId; + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private LocalDateTime createDate; + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间") + private LocalDateTime updateDate; + /** + * 是否删除 + */ + @ApiModelProperty(value = "是否删除") + private String isDeleted; + + +} diff --git a/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfitDetail.java b/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfitDetail.java new file mode 100644 index 00000000..8b8ee496 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/entity/TDesignPythonOutfitDetail.java @@ -0,0 +1,90 @@ + +package com.ai.da.mapper.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import java.time.LocalDateTime; +import java.io.Serializable; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * design item详情表实体类 + * + * @author SHAHAIBO + * @since 2023-08-31 + */ +@Data +@ApiModel(value = "TDesignPythonOutfitDetail对象", description = "design item详情表") +public class TDesignPythonOutfitDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 关联的design ID + */ + @ApiModelProperty(value = "关联的design ID") + private Long designId; + /** + * 关联的design_item ID + */ + @ApiModelProperty(value = "关联的design_item ID") + private Long designPythonOutfitId; + /** + * 关联的elementId 没有为null + */ + @ApiModelProperty(value = "关联的elementId 没有为null") + private Long collectionElementId; + /** + * 图层 + */ + @ApiModelProperty(value = "图层") + private String imageCategory; + /** + * 对应的图片的绝对路径 + */ + @ApiModelProperty(value = "对应的图片的绝对路径") + private String imageUrl; + /** + * mask_url + */ + @ApiModelProperty(value = "mask_url") + private String maskUrl; + /** + * 位置 + */ + @ApiModelProperty(value = "位置") + private String position; + /** + * 用户ID + */ + @ApiModelProperty(value = "用户ID") + private Long userId; + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private LocalDateTime createDate; + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间") + private LocalDateTime updateDate; + /** + * 是否删除 + */ + @ApiModelProperty(value = "是否删除") + private Integer isDeleted; + + +} diff --git a/src/main/java/com/ai/da/mapper/entity/Workspace.java b/src/main/java/com/ai/da/mapper/entity/Workspace.java new file mode 100644 index 00000000..27a75cda --- /dev/null +++ b/src/main/java/com/ai/da/mapper/entity/Workspace.java @@ -0,0 +1,85 @@ + +package com.ai.da.mapper.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 实体类 + * + * @author SHAHAIBO + * @since 2023-08-01 + */ +@Data +@ApiModel(value = "Workspace对象", description = "Workspace对象") +@TableName("workspace") +public class Workspace implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 工作空间名称 + */ + @ApiModelProperty(value = "工作空间名称") + private String workSpaceName; + /** + * 用户ID + */ + @ApiModelProperty(value = "用户名") + private String userName; + /** + * 性别 + */ + @ApiModelProperty(value = "性别") + private String sex; + /** + * 服装部位 + */ + @ApiModelProperty(value = "服装部位") + private String position; + /** + * SYSTEM_DESIGNER占比 + */ + @ApiModelProperty(value = "SYSTEM_DESIGNER占比") + private Integer systemDesignerPercentage; + /** + * 人体模型 + */ + @ApiModelProperty(value = "人体模型") + private String mannequin; + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "更新时间") + private LocalDateTime updateTime; + /** + * 是否删除 + */ + @TableLogic + @ApiModelProperty(value = "是否删除") + private Integer isDeleted; + + +} diff --git a/src/main/java/com/ai/da/model/dto/WorkspaceDTO.java b/src/main/java/com/ai/da/model/dto/WorkspaceDTO.java new file mode 100644 index 00000000..ba44148d --- /dev/null +++ b/src/main/java/com/ai/da/model/dto/WorkspaceDTO.java @@ -0,0 +1,20 @@ + +package com.ai.da.model.dto; + +import com.ai.da.mapper.entity.Workspace; +import com.ai.da.model.vo.PageQueryBaseVo; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 数据传输对象实体类 + * + * @author Arcana + * @since 2023-08-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class WorkspaceDTO extends PageQueryBaseVo { + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/ai/da/model/enums/BizJson.java b/src/main/java/com/ai/da/model/enums/BizJson.java new file mode 100644 index 00000000..a96b30e8 --- /dev/null +++ b/src/main/java/com/ai/da/model/enums/BizJson.java @@ -0,0 +1,41 @@ +package com.ai.da.model.enums; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@Accessors(chain = true) +public class BizJson implements Serializable { + + private static final long serialVersionUID = 1L; + + public BizJson() {} + + public BizJson(String name, String key, String value) { + this.name = name; + this.key = key; + this.value = value; + } + + public BizJson(String key, String value) { + this.key = key; + this.value = value; + } + + /** + * 参数名称 + */ + private String name; + + /** + * 参数主键 + */ + private String key; + + /** + * 参数默认值 + */ + private String value; +} \ No newline at end of file diff --git a/src/main/java/com/ai/da/model/enums/IEnumDisplay.java b/src/main/java/com/ai/da/model/enums/IEnumDisplay.java new file mode 100644 index 00000000..165301a3 --- /dev/null +++ b/src/main/java/com/ai/da/model/enums/IEnumDisplay.java @@ -0,0 +1,10 @@ +package com.ai.da.model.enums; + +public interface IEnumDisplay { + + + String getValue(); + + String name(); + +} \ No newline at end of file diff --git a/src/main/java/com/ai/da/model/enums/Mannequin.java b/src/main/java/com/ai/da/model/enums/Mannequin.java new file mode 100644 index 00000000..31c91384 --- /dev/null +++ b/src/main/java/com/ai/da/model/enums/Mannequin.java @@ -0,0 +1,28 @@ +package com.ai.da.model.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @Author: SHAHAIBO + * @Date: 2023/08/01 17:21 + * @Description: 服装性别分类 + */ +public enum Mannequin implements IEnumDisplay { + + A("A"), + B("B"), + C("C") + ; + + private String value; + + Mannequin(String value) { + this.value = value; + } + + @Override + @JsonValue + public String getValue() { + return this.value; + } +} diff --git a/src/main/java/com/ai/da/model/enums/Position.java b/src/main/java/com/ai/da/model/enums/Position.java new file mode 100644 index 00000000..f84bff17 --- /dev/null +++ b/src/main/java/com/ai/da/model/enums/Position.java @@ -0,0 +1,27 @@ +package com.ai.da.model.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @Author: SHAHAIBO + * @Date: 2023/08/01 17:21 + * @Description: 服装性别分类 + */ +public enum Position implements IEnumDisplay { + + OVERALL("整体"), + SINGLE("部位") + ; + + private String value; + + Position(String value) { + this.value = value; + } + + @Override + @JsonValue + public String getValue() { + return this.value; + } +} diff --git a/src/main/java/com/ai/da/model/enums/Sex.java b/src/main/java/com/ai/da/model/enums/Sex.java new file mode 100644 index 00000000..05ae46ed --- /dev/null +++ b/src/main/java/com/ai/da/model/enums/Sex.java @@ -0,0 +1,28 @@ +package com.ai.da.model.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @Author: SHAHAIBO + * @Date: 2023/08/01 17:21 + * @Description: 服装性别分类 + */ +public enum Sex implements IEnumDisplay { + + MALE("男装"), + FEMALE("女装"), + CHILD("童装") + ; + + private String value; + + Sex(String value) { + this.value = value; + } + + @Override + @JsonValue + public String getValue() { + return this.value; + } +} diff --git a/src/main/java/com/ai/da/model/vo/TDesignPythonOutfitDetailVO.java b/src/main/java/com/ai/da/model/vo/TDesignPythonOutfitDetailVO.java new file mode 100644 index 00000000..ffb2600a --- /dev/null +++ b/src/main/java/com/ai/da/model/vo/TDesignPythonOutfitDetailVO.java @@ -0,0 +1,21 @@ + +package com.ai.da.model.vo; + +import com.ai.da.mapper.entity.TDesignPythonOutfitDetail; +import lombok.Data; +import lombok.EqualsAndHashCode; +import io.swagger.annotations.ApiModel; + +/** + * design item详情表视图实体类 + * + * @author Arcana + * @since 2023-09-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "TDesignPythonOutfitDetailVO对象", description = "design item详情表") +public class TDesignPythonOutfitDetailVO extends TDesignPythonOutfitDetail { + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/ai/da/model/vo/TDesignPythonOutfitVO.java b/src/main/java/com/ai/da/model/vo/TDesignPythonOutfitVO.java new file mode 100644 index 00000000..4d390af6 --- /dev/null +++ b/src/main/java/com/ai/da/model/vo/TDesignPythonOutfitVO.java @@ -0,0 +1,22 @@ + +package com.ai.da.model.vo; + + +import com.ai.da.mapper.entity.TDesignPythonOutfit; +import lombok.Data; +import lombok.EqualsAndHashCode; +import io.swagger.annotations.ApiModel; + +/** + * design item表 存对应design的8张图片视图实体类 + * + * @author Arcana + * @since 2023-09-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "TDesignPythonOutfitVO对象", description = "design item表 存对应design的8张图片") +public class TDesignPythonOutfitVO extends TDesignPythonOutfit { + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/ai/da/model/vo/WorkspaceVO.java b/src/main/java/com/ai/da/model/vo/WorkspaceVO.java new file mode 100644 index 00000000..910a1033 --- /dev/null +++ b/src/main/java/com/ai/da/model/vo/WorkspaceVO.java @@ -0,0 +1,21 @@ + +package com.ai.da.model.vo; + +import com.ai.da.mapper.entity.Workspace; +import lombok.Data; +import lombok.EqualsAndHashCode; +import io.swagger.annotations.ApiModel; + +/** + * 视图实体类 + * + * @author Arcana + * @since 2023-08-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "WorkspaceVO对象", description = "WorkspaceVO对象") +public class WorkspaceVO extends Workspace { + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index 3e6dd6b4..260d5df0 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -1090,7 +1090,8 @@ public class PythonService { log.info("design请求python 参数:####{}", param); RequestBody body = RequestBody.create(mediaType, param); Request request = new Request.Builder() - .url(accessPythonIp + ":10200/aifda/api/v1.0/generate") + .url("http://18.167.251.121:9991") +// .url(accessPythonIp + ":10200/aifda/api/v1.0/generate") .method("POST", body) .addHeader("Authorization", "Basic YWlkbGFiOjEyMw==") .addHeader("Content-Type", "application/json") @@ -1413,6 +1414,65 @@ public class PythonService { return originRatioList; } + public JSONObject designNew(DesignPythonObjects designPythonObjects) { + //限流校验 + AccessLimitUtils.validate("design",5); + OkHttpClient client = new OkHttpClient().newBuilder() + .connectTimeout(30, TimeUnit.SECONDS) + .pingInterval(5, TimeUnit.SECONDS)//websocket轮训间隔(单位:秒) + .readTimeout(60, TimeUnit.SECONDS)//读取超时(单位:秒) + .writeTimeout(60, TimeUnit.SECONDS)//写入超时(单位:秒) + .build(); + MediaType mediaType = MediaType.parse("application/json"); + //关闭FastJson的引用检测 防止出现$ref 现象 +// String param = JSON.toJSONString(designPythonObjects, SerializerFeature.DisableCircularReferenceDetect); + String param = "{\"objects\":[{\"basic\":{\"body_point_test\":{\"shoulder_left\":[755,519],\"toe_right\":[850,1355],\"ear_point_left\":[802,439],\"shoulder_right\":[912,519],\"waistband_right\":[891,725],\"hand_point_right\":[915,886],\"waistband_left\":[777,725],\"hand_point_left\":[754,886],\"head_point_left\":[804,424],\"head_point_right\":[864,424],\"ear_point_right\":[865,438],\"toe_left\":[817,1355],\"foot_length\":[784,1336,825,1336],\"head_point_up\":[834,390]},\"scale_bag\":0.7,\"scale_earrings\":0.16,\"self_template\":false,\"single_overall\":\"overall\",\"switch_category\":\"\"},\"items\":[{\"color\":\"50 187 147\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/202308/userFile/collection/Sketchboard/42/048419db-38c4-4aee-85a7-33f0666b18d2.jpg\",\"print\":{\"path\":\"https://www.aida.com.hk/download/202304/pythonFile/generatePrint/generatePrint-d7a67a96-83f9-429f-9028-3e1697501088.jpg\"},\"type\":\"Outwear\",\"image_id\":53547},{\"color\":\"137 50 50\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/skirt/0628001153.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Skirt\",\"image_id\":53548},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/hairstyle/hairstyle_242.jpg\",\"type\":\"Hairstyle\",\"image_id\":411},{\"color\":\"31 76 171\",\"path\":\"https://www.aida.com.hk/download/sys/accessories/shoes/shoes_11.jpg\",\"type\":\"Shoes\",\"image_id\":167},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/earring/earrings_12.png\",\"type\":\"Earring\",\"image_id\":93},{\"body_path\":\"model_1693218345.2714431.png\",\"type\":\"Body\",\"image_id\":0}]},{\"basic\":{\"body_point_test\":{\"shoulder_left\":[755,519],\"toe_right\":[850,1355],\"ear_point_left\":[802,439],\"shoulder_right\":[912,519],\"waistband_right\":[891,725],\"hand_point_right\":[915,886],\"waistband_left\":[777,725],\"hand_point_left\":[754,886],\"head_point_left\":[804,424],\"head_point_right\":[864,424],\"ear_point_right\":[865,438],\"toe_left\":[817,1355],\"foot_length\":[784,1336,825,1336],\"head_point_up\":[834,390]},\"scale_bag\":0.7,\"scale_earrings\":0.16,\"self_template\":false,\"single_overall\":\"overall\",\"switch_category\":\"\"},\"items\":[{\"color\":\"103 74 74\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/dress/0902005000.jpg\",\"print\":{\"path\":\"https://www.aida.com.hk/download/202304/userFile/library/Printboard/42/4ba535c2-a08b-4114-826b-a87885fd3623Fabric-03.png\"},\"type\":\"Dress\",\"image_id\":53549},{\"color\":\"204 182 182\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/skirt/0825000582.jpg\",\"print\":{\"path\":\"https://www.aida.com.hk/download/202304/userFile/library/Printboard/42/4ba535c2-a08b-4114-826b-a87885fd3623Fabric-03.png\"},\"type\":\"Skirt\",\"image_id\":53550},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/hairstyle/hairstyle_p2529.jpg\",\"type\":\"Hairstyle\",\"image_id\":898},{\"color\":\"137 50 50\",\"path\":\"https://www.aida.com.hk/download/sys/accessories/shoes/shoes_15.png\",\"type\":\"Shoes\",\"image_id\":171},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/earring/earrings_15.png\",\"type\":\"Earring\",\"image_id\":96},{\"body_path\":\"model_1693218345.2714431.png\",\"type\":\"Body\",\"image_id\":0}]},{\"basic\":{\"body_point_test\":{\"shoulder_left\":[755,519],\"toe_right\":[850,1355],\"ear_point_left\":[802,439],\"shoulder_right\":[912,519],\"waistband_right\":[891,725],\"hand_point_right\":[915,886],\"waistband_left\":[777,725],\"hand_point_left\":[754,886],\"head_point_left\":[804,424],\"head_point_right\":[864,424],\"ear_point_right\":[865,438],\"toe_left\":[817,1355],\"foot_length\":[784,1336,825,1336],\"head_point_up\":[834,390]},\"scale_bag\":0.7,\"scale_earrings\":0.16,\"self_template\":false,\"single_overall\":\"overall\",\"switch_category\":\"\"},\"items\":[{\"color\":\"49 127 162\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/outwear/0628001185.jpg\",\"print\":{\"path\":\"https://www.aida.com.hk/download/202308/pythonFile/generatePrint/generatePrint-487e93e6-1e21-46b8-b821-3188251dbdbc.jpg\"},\"type\":\"Outwear\",\"image_id\":53551},{\"color\":\"103 74 74\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/trousers/0628000635.jpg\",\"print\":{\"path\":\"https://www.aida.com.hk/download/202308/pythonFile/generatePrint/generatePrint-487e93e6-1e21-46b8-b821-3188251dbdbc.jpg\"},\"type\":\"Trousers\",\"image_id\":53552},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/hairstyle/hairstyle_p2102.jpg\",\"type\":\"Hairstyle\",\"image_id\":471},{\"color\":\"137 50 50\",\"path\":\"https://www.aida.com.hk/download/sys/accessories/shoes/shoes_41.jpg\",\"type\":\"Shoes\",\"image_id\":344},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/earring/earrings_5.png\",\"type\":\"Earring\",\"image_id\":87},{\"body_path\":\"model_1693218345.2714431.png\",\"type\":\"Body\",\"image_id\":0}]},{\"basic\":{\"body_point_test\":{\"shoulder_left\":[755,519],\"toe_right\":[850,1355],\"ear_point_left\":[802,439],\"shoulder_right\":[912,519],\"waistband_right\":[891,725],\"hand_point_right\":[915,886],\"waistband_left\":[777,725],\"hand_point_left\":[754,886],\"head_point_left\":[804,424],\"head_point_right\":[864,424],\"ear_point_right\":[865,438],\"toe_left\":[817,1355],\"foot_length\":[784,1336,825,1336],\"head_point_up\":[834,390]},\"scale_bag\":0.7,\"scale_earrings\":0.16,\"self_template\":false,\"single_overall\":\"overall\",\"switch_category\":\"\"},\"items\":[{\"color\":\"31 76 171\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/outwear/0902002198.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Outwear\",\"image_id\":53553},{\"color\":\"50 187 147\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/skirt/0916000791.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Skirt\",\"image_id\":53554},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/hairstyle/hairstyle_p2518.jpg\",\"type\":\"Hairstyle\",\"image_id\":887},{\"color\":\"137 50 50\",\"path\":\"https://www.aida.com.hk/download/sys/accessories/shoes/shoes_15.png\",\"type\":\"Shoes\",\"image_id\":171},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/earring/earrings_11.png\",\"type\":\"Earring\",\"image_id\":92},{\"body_path\":\"model_1693218345.2714431.png\",\"type\":\"Body\",\"image_id\":0}]},{\"basic\":{\"body_point_test\":{\"shoulder_left\":[755,519],\"toe_right\":[850,1355],\"ear_point_left\":[802,439],\"shoulder_right\":[912,519],\"waistband_right\":[891,725],\"hand_point_right\":[915,886],\"waistband_left\":[777,725],\"hand_point_left\":[754,886],\"head_point_left\":[804,424],\"head_point_right\":[864,424],\"ear_point_right\":[865,438],\"toe_left\":[817,1355],\"foot_length\":[784,1336,825,1336],\"head_point_up\":[834,390]},\"scale_bag\":0.7,\"scale_earrings\":0.16,\"self_template\":false,\"single_overall\":\"overall\",\"switch_category\":\"\"},\"items\":[{\"color\":\"204 182 182\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/outwear/0902000892.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Outwear\",\"image_id\":53555},{\"color\":\"204 182 182\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/trousers/0916000460.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Trousers\",\"image_id\":53556},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/hairstyle/hairstyle_204.jpg\",\"type\":\"Hairstyle\",\"image_id\":294},{\"color\":\"49 127 162\",\"path\":\"https://www.aida.com.hk/download/sys/accessories/shoes/shoes_15.png\",\"type\":\"Shoes\",\"image_id\":171},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/earring/earrings_5.png\",\"type\":\"Earring\",\"image_id\":87},{\"body_path\":\"model_1693218345.2714431.png\",\"type\":\"Body\",\"image_id\":0}]},{\"basic\":{\"body_point_test\":{\"shoulder_left\":[755,519],\"toe_right\":[850,1355],\"ear_point_left\":[802,439],\"shoulder_right\":[912,519],\"waistband_right\":[891,725],\"hand_point_right\":[915,886],\"waistband_left\":[777,725],\"hand_point_left\":[754,886],\"head_point_left\":[804,424],\"head_point_right\":[864,424],\"ear_point_right\":[865,438],\"toe_left\":[817,1355],\"foot_length\":[784,1336,825,1336],\"head_point_up\":[834,390]},\"scale_bag\":0.7,\"scale_earrings\":0.16,\"self_template\":false,\"single_overall\":\"overall\",\"switch_category\":\"\"},\"items\":[{\"color\":\"204 182 182\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/blouse/0902002193.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Blouse\",\"image_id\":53557},{\"color\":\"50 187 147\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/skirt/0902002112.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Skirt\",\"image_id\":53558},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/hairstyle/hairstyle_p2186.jpg\",\"type\":\"Hairstyle\",\"image_id\":555},{\"color\":\"204 182 182\",\"path\":\"https://www.aida.com.hk/download/sys/accessories/shoes/shoes_11.jpg\",\"type\":\"Shoes\",\"image_id\":167},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/earring/earrings_12.png\",\"type\":\"Earring\",\"image_id\":93},{\"body_path\":\"model_1693218345.2714431.png\",\"type\":\"Body\",\"image_id\":0}]},{\"basic\":{\"body_point_test\":{\"shoulder_left\":[755,519],\"toe_right\":[850,1355],\"ear_point_left\":[802,439],\"shoulder_right\":[912,519],\"waistband_right\":[891,725],\"hand_point_right\":[915,886],\"waistband_left\":[777,725],\"hand_point_left\":[754,886],\"head_point_left\":[804,424],\"head_point_right\":[864,424],\"ear_point_right\":[865,438],\"toe_left\":[817,1355],\"foot_length\":[784,1336,825,1336],\"head_point_up\":[834,390]},\"scale_bag\":0.7,\"scale_earrings\":0.16,\"self_template\":false,\"single_overall\":\"overall\",\"switch_category\":\"\"},\"items\":[{\"color\":\"204 182 182\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/blouse/0902002193.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Blouse\",\"image_id\":53557},{\"color\":\"137 50 50\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/skirt/0902002861.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Skirt\",\"image_id\":53560},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/hairstyle/hairstyle_p2128.jpg\",\"type\":\"Hairstyle\",\"image_id\":497},{\"color\":\"49 127 162\",\"path\":\"https://www.aida.com.hk/download/sys/accessories/shoes/shoes_39.jpg\",\"type\":\"Shoes\",\"image_id\":192},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/earring/earrings_4.png\",\"type\":\"Earring\",\"image_id\":86},{\"body_path\":\"model_1693218345.2714431.png\",\"type\":\"Body\",\"image_id\":0}]},{\"basic\":{\"body_point_test\":{\"shoulder_left\":[755,519],\"toe_right\":[850,1355],\"ear_point_left\":[802,439],\"shoulder_right\":[912,519],\"waistband_right\":[891,725],\"hand_point_right\":[915,886],\"waistband_left\":[777,725],\"hand_point_left\":[754,886],\"head_point_left\":[804,424],\"head_point_right\":[864,424],\"ear_point_right\":[865,438],\"toe_left\":[817,1355],\"foot_length\":[784,1336,825,1336],\"head_point_up\":[834,390]},\"scale_bag\":0.7,\"scale_earrings\":0.16,\"self_template\":false,\"single_overall\":\"overall\",\"switch_category\":\"\"},\"items\":[{\"color\":\"204 182 182\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/blouse/0902002193.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Blouse\",\"image_id\":53557},{\"color\":\"49 127 162\",\"icon\":\"none\",\"path\":\"https://www.aida.com.hk/download/sys/images/skirt/0902000567.jpg\",\"print\":{\"path\":\"none\"},\"type\":\"Skirt\",\"image_id\":53562},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/hairstyle/hairstyle_p2357.jpg\",\"type\":\"Hairstyle\",\"image_id\":726},{\"color\":\"137 50 50\",\"path\":\"https://www.aida.com.hk/download/sys/accessories/shoes/shoes_6.jpg\",\"type\":\"Shoes\",\"image_id\":163},{\"path\":\"https://www.aida.com.hk/download/sys/accessories/earring/earrings_15.png\",\"type\":\"Earring\",\"image_id\":96},{\"body_path\":\"model_1693218345.2714431.png\",\"type\":\"Body\",\"image_id\":0}]}]}"; + log.info("design请求python 参数:####{}", param); + RequestBody body = RequestBody.create(mediaType, param); + Request request = new Request.Builder() + .url("http://18.167.251.121:9991") +// .url(accessPythonIp + ":10200/aifda/api/v1.0/generate") + .method("POST", body) + .addHeader("Authorization", "Basic YWlkbGFiOjEyMw==") + .addHeader("Content-Type", "application/json") + .build(); + Response response = null; + try { + response = client.newCall(request).execute(); +// log.info("PythonService##response###{}", response); +// log.info("PythonService##responseBodyStr###{}", response.body().string()); +// log.info("PythonService##responseBodyJson###{}", JSON.toJSONString(response.body())); + String responseBody = response.body().string(); + JSONObject responseObject = JSON.parseObject(responseBody); + return responseObject; + } catch (IOException ioException) { + log.error("PythonService##design异常###{}", ExceptionUtil.getThrowableList(ioException)); + } + //去除限流 + AccessLimitUtils.validateOut("design"); + if (Objects.isNull(response)) { + log.error("PythonService##design异常###{}", "response or body is empty!"); + throw new BusinessException("system error!"); + } + JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(response)); + log.info("PythonService##jsonObject###{}", jsonObject); + Boolean result = jsonObject.getBoolean("successful"); + if (response.isSuccessful()) { + try { + String responseBody = response.body().string(); + JSONObject responseObject = JSON.parseObject(responseBody); + return responseObject; + }catch (IOException e) { + throw new RuntimeException(e); + } + } + log.info("PythonService##design异常jsonObject###{}", jsonObject); + //生成失败 + throw new BusinessException("generate design exception!"); + } + + + public String generateSketchCaption(String url) { //限流校验 AccessLimitUtils.validate("generateSketchCaption",5); diff --git a/src/main/java/com/ai/da/service/DesignService.java b/src/main/java/com/ai/da/service/DesignService.java index cdf597ee..af8ff742 100644 --- a/src/main/java/com/ai/da/service/DesignService.java +++ b/src/main/java/com/ai/da/service/DesignService.java @@ -5,6 +5,7 @@ import com.ai.da.model.dto.*; import com.ai.da.model.vo.DesignCollectionVO; import com.ai.da.model.vo.DesignItemDetailVO; import com.ai.da.model.vo.DesignLikeVO; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import java.math.BigDecimal; @@ -21,7 +22,7 @@ public interface DesignService extends IService { * @param designDTO * @return */ - DesignCollectionVO designCollection(DesignCollectionDTO designDTO); + JSONObject designCollection(DesignCollectionDTO designDTO); /** * redesign diff --git a/src/main/java/com/ai/da/service/ITDesignPythonOutfitDetailService.java b/src/main/java/com/ai/da/service/ITDesignPythonOutfitDetailService.java new file mode 100644 index 00000000..c1352975 --- /dev/null +++ b/src/main/java/com/ai/da/service/ITDesignPythonOutfitDetailService.java @@ -0,0 +1,26 @@ +package com.ai.da.service; + + +import com.ai.da.mapper.entity.TDesignPythonOutfitDetail; +import com.ai.da.model.vo.TDesignPythonOutfitDetailVO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * design item详情表 服务类 + * + * @author Arcana + * @since 2023-09-04 + */ +public interface ITDesignPythonOutfitDetailService extends IService { + + /** + * 自定义分页 + * + * @param page + * @param tDesignPythonOutfitDetail + * @return + */ + IPage selectTDesignPythonOutfitDetailPage(IPage page, TDesignPythonOutfitDetailVO tDesignPythonOutfitDetail); + +} diff --git a/src/main/java/com/ai/da/service/ITDesignPythonOutfitService.java b/src/main/java/com/ai/da/service/ITDesignPythonOutfitService.java new file mode 100644 index 00000000..0df44dd0 --- /dev/null +++ b/src/main/java/com/ai/da/service/ITDesignPythonOutfitService.java @@ -0,0 +1,25 @@ +package com.ai.da.service; + +import com.ai.da.mapper.entity.TDesignPythonOutfit; +import com.ai.da.model.vo.TDesignPythonOutfitVO; +import com.baomidou.mybatisplus.extension.service.IService; +import com.baomidou.mybatisplus.core.metadata.IPage; + +/** + * design item表 存对应design的8张图片 服务类 + * + * @author Arcana + * @since 2023-09-04 + */ +public interface ITDesignPythonOutfitService extends IService { + + /** + * 自定义分页 + * + * @param page + * @param tDesignPythonOutfit + * @return + */ + IPage selectTDesignPythonOutfitPage(IPage page, TDesignPythonOutfitVO tDesignPythonOutfit); + +} diff --git a/src/main/java/com/ai/da/service/WorkspaceService.java b/src/main/java/com/ai/da/service/WorkspaceService.java new file mode 100644 index 00000000..701d68f8 --- /dev/null +++ b/src/main/java/com/ai/da/service/WorkspaceService.java @@ -0,0 +1,36 @@ +package com.ai.da.service; + + +import com.ai.da.mapper.entity.Workspace; +import com.ai.da.model.dto.WorkspaceDTO; +import com.ai.da.model.enums.BizJson; +import com.ai.da.model.vo.WorkspaceVO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * 服务类 + * + * @author Arcana + * @since 2023-08-01 + */ +public interface WorkspaceService extends IService { + + /** + * 自定义分页 + * + * @param page + * @param workspace + * @return + */ + IPage selectWorkspacePage(IPage page, WorkspaceVO workspace); + + boolean saveOrUpdate(Workspace workspace); + + IPage getPage(WorkspaceDTO query); + + List getEnumValues(String enumName); +} diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index 4feedbb1..b9f70342 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -12,6 +12,8 @@ import com.ai.da.common.utils.DateUtil; import com.ai.da.common.utils.FileUtil; import com.ai.da.common.utils.LocalCacheUtils; import com.ai.da.mapper.DesignMapper; +import com.ai.da.mapper.TDesignPythonOutfitDetailMapper; +import com.ai.da.mapper.TDesignPythonOutfitMapper; import com.ai.da.mapper.entity.*; import com.ai.da.mapper.entity.Collection; import com.ai.da.model.dto.*; @@ -22,6 +24,8 @@ import com.ai.da.python.vo.DesignPythonItemPrint; import com.ai.da.python.vo.DesignPythonObjects; import com.ai.da.service.*; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; @@ -76,16 +80,20 @@ public class DesignServiceImpl extends ServiceImpl impleme @Resource private TCollectionElementRelationService tCollectionElementRelationService; @Resource + private ITDesignPythonOutfitService designPythonOutfitService; + @Resource + private ITDesignPythonOutfitDetailService designPythonOutfitDetailService; + @Resource private PanToneService panToneService; // @Transactional @Override - public DesignCollectionVO designCollection(DesignCollectionDTO designDTO) { + public JSONObject designCollection(DesignCollectionDTO designDTO) { AuthPrincipalVo userInfo = UserContext.getUserHolder(); //校验collection element ValidateElementVO elementVO =collectionElementService.validateElement(designDTO); //design - return designOrRedesignOperate(designDTO,userInfo,null,elementVO); + return designOrRedesignOperateNew(designDTO,userInfo,null,elementVO); } private void calculateLibraryAndSysFile(DesignCollectionDTO designDTO,ValidateElementVO elementVO,AuthPrincipalVo userInfo){ //查询用户 sketch library @@ -183,16 +191,61 @@ public class DesignServiceImpl extends ServiceImpl impleme //缓存保存的文件 方便后面处理进度问题 setDesignProcess(userInfo.getId(),pythonObjects); //design - pythonService.design(pythonObjects); + JSONObject responseJSONObject= pythonService.designNew(pythonObjects); //生成library generateLibrary(elementVO,designDTO.getTimeZone()); //处理关联关系,修复element覆盖得情况 List reLationelements =collectionElementService.getByOnlyCollectionId(collectionId); List reLationelementIds = reLationelements.stream().map(CollectionElement::getId).collect(Collectors.toList()); handleCollectionElementRelation(collectionId,(null == collectionIdParam) ? false :true,reLationelementIds); + //保存python返回信息 +// return savePythonDesignItemAndDetail(pythonObjects,designId,collectionId,userInfo,designDTO.getTimeZone(),responseJSONObject); //保存designItem 和detail return saveDesignItemAndDetail(pythonObjects,designId,collectionId,userInfo,designDTO.getTimeZone()); } + + private JSONObject designOrRedesignOperateNew(DesignCollectionDTO designDTO,AuthPrincipalVo userInfo, + Long collectionIdParam,ValidateElementVO elementVO){ + if(CollectionUtil.isNotEmpty(designDTO.getSketchBoards())){ + //编辑sketchBoard + collectionElementService.editSketchBoardsElement(elementVO,designDTO.getSketchBoards()); + } + if(CollectionUtil.isNotEmpty(designDTO.getPrintBoards())){ + //编辑printBoard + collectionElementService.editPrintBoardsElement(elementVO,designDTO.getPrintBoards()); + } + //保存collection + Long collectionId = (null == collectionIdParam) ? + collectionService.saveCollection(userInfo.getId(),designDTO.getTimeZone(),designDTO.getMoodTemplateId()) : collectionIdParam; + List elementIds =getElementId(elementVO); + //批量关联element 到 collection + collectionElementService.relationCollection(elementIds,collectionId); + //library转化为collection(生成) + saveCollectionElemntsByLibrarys(elementVO,collectionId); + //保存颜色版 + List colorElementList = collectionElementService.saveColorBoard(designDTO.getColorBoards(),collectionId,designDTO.getTimeZone()); + //保存design + Long designId = saveOne(designDTO,collectionId,userInfo.getId()); + //计算library + calculateLibraryAndSysFile(designDTO,elementVO,userInfo); + //组装design入参 + DesignPythonObjects pythonObjects =pythonService.covertDesignParam(designDTO.getSystemScale(), + designDTO.getSingleOverall(),designDTO.getSwitchCategory(),elementVO); + //缓存保存的文件 方便后面处理进度问题 + setDesignProcess(userInfo.getId(),pythonObjects); + //design + JSONObject responseJSONObject= pythonService.designNew(pythonObjects); + //生成library + generateLibrary(elementVO,designDTO.getTimeZone()); + //处理关联关系,修复element覆盖得情况 + List reLationelements =collectionElementService.getByOnlyCollectionId(collectionId); + List reLationelementIds = reLationelements.stream().map(CollectionElement::getId).collect(Collectors.toList()); + handleCollectionElementRelation(collectionId,(null == collectionIdParam) ? false :true,reLationelementIds); + //保存python返回信息 + return savePythonDesignItemAndDetail(pythonObjects,designId,collectionId,userInfo,designDTO.getTimeZone(),responseJSONObject); + //保存designItem 和detail +// return saveDesignItemAndDetail(pythonObjects,designId,collectionId,userInfo,designDTO.getTimeZone()); + } private void handleCollectionElementRelation(Long collectionId ,Boolean isEdit,List elementIds ){ if (CollectionUtils.isEmpty(elementIds) || collectionId == null){ return; @@ -263,6 +316,79 @@ public class DesignServiceImpl extends ServiceImpl impleme return object.getBasic().getSave_name();}).collect(Collectors.toList()); LocalCacheUtils.setDesignProcessCache(userId,saveNames); } + private JSONObject savePythonDesignItemAndDetail(DesignPythonObjects pythonObjects + ,Long designId,Long collectionId,AuthPrincipalVo userInfo,String timeZone, JSONObject responseJSONObject){ + DesignCollectionVO response = new DesignCollectionVO(); + response.setDesignId(designId); + response.setCollectionId(collectionId); + List designCollectionItems = Lists.newArrayList(); + response.setDesignCollectionItems(designCollectionItems); + + pythonObjects.getObjects().forEach(item ->{ + DesignItem designItem = new DesignItem(); + designItem.setAccountId(userInfo.getId()); + designItem.setCollectionId(collectionId); + designItem.setDesignId(designId); + designItem.setCreateDate(DateUtil.getByTimeZone(timeZone)); + //生成的八张图片 + designItem.setDesignUrl(item.getBasic().getSave_name()); + designItem.setHasLike((byte)0); + //生成designItem + Long designItemId = designItemService.saveOne(designItem); + //response + designCollectionItems.add(new DesignCollectionItemVO(designItemId,designItem.getDesignUrl())); + + List designItemDetails = Lists.newArrayList(); + item.getItems().forEach(detail ->{ + if(null == detail){ + return; + } + DesignItemDetail designItemDetail = CopyUtil.copyObject(detail,DesignItemDetail.class); + designItemDetail.setAccountId(userInfo.getId()); + designItemDetail.setDesignId(designId); + designItemDetail.setDesignItemId(designItemId); + designItemDetail.setCollectionElementId(detail.getElementId()); + designItemDetail.setCreateDate(DateUtil.getByTimeZone(timeZone)); + if(SysFileLevel2TypeEnum.BODY.getRealName().equals(detail.getType())){ + designItemDetail.setPath(detail.getBody_path()); + //BODY不关联businessId + designItemDetail.setBusinessId(0L); + } + designItemDetail.setIconPath(detail.getIcon()); + DesignPythonItemPrint printObject = detail.getPrint(); + designItemDetail.setPrintPath(Objects.isNull(printObject)? "" :printObject.getPath()); + designItemDetails.add(designItemDetail); + }); + designItemDetailService.saveBatch(designItemDetails); + }); + JSONObject data = responseJSONObject.getJSONObject("data"); + for (int i = 0; i < 8; i++) { + JSONObject outfit = data.getJSONObject(i + ""); + TDesignPythonOutfit designPythonOutfit = new TDesignPythonOutfit(); + designPythonOutfit.setUserId(userInfo.getId()); + designPythonOutfit.setDesignId(designId); + designPythonOutfit.setCollectionId(collectionId); + designPythonOutfit.setDesignUrl(outfit.getString("synthesis_url")); + designPythonOutfitService.save(designPythonOutfit); + JSONArray layers = outfit.getJSONArray("layers"); + List list = new ArrayList<>(); + for (int i1 = 0; i1 < layers.size(); i1++) { + JSONObject jsonObject = layers.getJSONObject(i1); + TDesignPythonOutfitDetail designPythonOutfitDetail = new TDesignPythonOutfitDetail(); + designPythonOutfitDetail.setDesignId(designId); + designPythonOutfitDetail.setDesignPythonOutfitId(designPythonOutfit.getId()); + designPythonOutfitDetail.setPosition(jsonObject.getString("position")); + designPythonOutfitDetail.setImageUrl(jsonObject.getString("image_url")); + designPythonOutfitDetail.setImageCategory(jsonObject.getString("image_category")); + designPythonOutfitDetail.setMaskUrl(jsonObject.getString("mask_url")); + designPythonOutfitDetail.setUserId(userInfo.getId()); + list.add(designPythonOutfitDetail); + } + designPythonOutfitDetailService.saveBatch(list); + } + return responseJSONObject; + } + private DesignCollectionVO saveDesignItemAndDetail(DesignPythonObjects pythonObjects ,Long designId,Long collectionId,AuthPrincipalVo userInfo,String timeZone){ DesignCollectionVO response = new DesignCollectionVO(); diff --git a/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java b/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java new file mode 100644 index 00000000..e5206ebb --- /dev/null +++ b/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitDetailServiceImpl.java @@ -0,0 +1,25 @@ +package com.ai.da.service.impl; + +import com.ai.da.mapper.TDesignPythonOutfitDetailMapper; +import com.ai.da.mapper.entity.TDesignPythonOutfitDetail; +import com.ai.da.model.vo.TDesignPythonOutfitDetailVO; +import com.ai.da.service.ITDesignPythonOutfitDetailService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.metadata.IPage; + +/** + * design item详情表 服务实现类 + * + * @author SHAHAIBO + * @since 2023-09-04 + */ +@Service +public class TDesignPythonOutfitDetailServiceImpl extends ServiceImpl implements ITDesignPythonOutfitDetailService { + + @Override + public IPage selectTDesignPythonOutfitDetailPage(IPage page, TDesignPythonOutfitDetailVO tDesignPythonOutfitDetail) { + return page.setRecords(baseMapper.selectTDesignPythonOutfitDetailPage(page, tDesignPythonOutfitDetail)); + } + +} diff --git a/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitServiceImpl.java b/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitServiceImpl.java new file mode 100644 index 00000000..174e56ae --- /dev/null +++ b/src/main/java/com/ai/da/service/impl/TDesignPythonOutfitServiceImpl.java @@ -0,0 +1,25 @@ +package com.ai.da.service.impl; + +import com.ai.da.mapper.TDesignPythonOutfitMapper; +import com.ai.da.mapper.entity.TDesignPythonOutfit; +import com.ai.da.model.vo.TDesignPythonOutfitVO; +import com.ai.da.service.ITDesignPythonOutfitService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.metadata.IPage; + +/** + * design item表 存对应design的8张图片 服务实现类 + * + * @author SHAHAIBO + * @since 2023-09-04 + */ +@Service +public class TDesignPythonOutfitServiceImpl extends ServiceImpl implements ITDesignPythonOutfitService { + + @Override + public IPage selectTDesignPythonOutfitPage(IPage page, TDesignPythonOutfitVO tDesignPythonOutfit) { + return page.setRecords(baseMapper.selectTDesignPythonOutfitPage(page, tDesignPythonOutfit)); + } + +} diff --git a/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java b/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java new file mode 100644 index 00000000..540ecb7d --- /dev/null +++ b/src/main/java/com/ai/da/service/impl/WorkspaceServiceImpl.java @@ -0,0 +1,86 @@ +package com.ai.da.service.impl; + +import com.ai.da.common.context.UserContext; +import com.ai.da.mapper.WorkspaceMapper; +import com.ai.da.mapper.entity.Account; +import com.ai.da.mapper.entity.Workspace; +import com.ai.da.model.dto.WorkspaceDTO; +import com.ai.da.model.enums.BizJson; +import com.ai.da.model.enums.IEnumDisplay; +import com.ai.da.model.vo.AuthPrincipalVo; +import com.ai.da.model.vo.WorkspaceVO; +import com.ai.da.service.WorkspaceService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + + +/** + * 服务实现类 + * + * @author Arcana + * @since 2023-08-01 + */ +@Service +public class WorkspaceServiceImpl extends ServiceImpl implements WorkspaceService { + + @Resource + private WorkspaceMapper workspaceMapper; + + @Override + public IPage selectWorkspacePage(IPage page, WorkspaceVO workspace) { + return page.setRecords(baseMapper.selectWorkspacePage(page, workspace)); + } + + @Override + public boolean saveOrUpdate(Workspace workspace) { + AuthPrincipalVo userInfo = UserContext.getUserHolder(); + workspace.setUserName(userInfo.getUsername()); + if (null == workspace.getId()) { + return workspaceMapper.insert(workspace) == 1; + }else { + return workspaceMapper.updateById(workspace) == 1; + } + } + + @Override + public IPage getPage(WorkspaceDTO query) { + String userName = UserContext.getUserHolder().getUsername(); + QueryWrapper qw = new QueryWrapper<>(); + qw.lambda().eq(Workspace::getUserName, userName); + IPage page = workspaceMapper.selectPage(new Page<>(query.getPage(), query.getSize()), qw); + return page; + } + + @Override + public List getEnumValues(String className) { + Class clazz; + try { + clazz = Class.forName(IEnumDisplay.class.getPackage().getName() + "." + className); + } catch (ClassNotFoundException e) { + throw new RuntimeException(className + "-枚举类型未找到"); + } + return getEnumValues(clazz); + } + + private List getEnumValues(Class clazz) { + List kvs = new ArrayList(); + IEnumDisplay[] items = (IEnumDisplay[]) clazz.getEnumConstants(); + for (IEnumDisplay item : items) { + kvs.add(new BizJson(item.getValue(), item.name(), null)); + } + return kvs; + } + +} diff --git a/src/main/resources/mapper/TDesignPythonOutfitDetailMapper.xml b/src/main/resources/mapper/TDesignPythonOutfitDetailMapper.xml new file mode 100644 index 00000000..79ac4aa1 --- /dev/null +++ b/src/main/resources/mapper/TDesignPythonOutfitDetailMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/TDesignPythonOutfitMapper.xml b/src/main/resources/mapper/TDesignPythonOutfitMapper.xml new file mode 100644 index 00000000..e886f817 --- /dev/null +++ b/src/main/resources/mapper/TDesignPythonOutfitMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/WorkspaceMapper.xml b/src/main/resources/mapper/WorkspaceMapper.xml new file mode 100644 index 00000000..7d91e718 --- /dev/null +++ b/src/main/resources/mapper/WorkspaceMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + +