diff --git a/pom.xml b/pom.xml
index 14913240..af34168f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -158,6 +158,13 @@
1.4
+
+ com.microsoft.sqlserver
+ mssql-jdbc
+ 9.2.1.jre8
+
+
+
org.springframework.boot
diff --git a/src/main/java/com/ai/da/common/config/CRMReportInterface.java b/src/main/java/com/ai/da/common/config/CRMReportInterface.java
new file mode 100644
index 00000000..3714d11d
--- /dev/null
+++ b/src/main/java/com/ai/da/common/config/CRMReportInterface.java
@@ -0,0 +1,393 @@
+package com.ai.da.common.config;
+
+import com.ai.da.mapper.primary.entity.CustomerData;
+import com.ai.da.mapper.primary.entity.TransactionData;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class CRMReportInterface {
+
+ // JDBC 驱动器名称以及数据库 URL
+ static final String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
+ static final String DB_URL = "jdbc:sqlserver://118.142.0.178:1550;databaseName=Hayman_prod";
+
+ // 数据库凭据
+ static final String USER = "user01";
+ static final String PASS = "haySIS-2302";
+
+ public static void main(String[] args) {
+ Connection conn = null;
+ Statement stmt = null;
+ try {
+ // 注册 JDBC 驱动器
+ Class.forName(JDBC_DRIVER);
+
+ // 打开一个连接
+ System.out.println("连接数据库...");
+ conn = DriverManager.getConnection(DB_URL, USER, PASS);
+
+ // 执行查询步骤1: 生成 RW0095 报告以获取客户完整数据
+ System.out.println("执行步骤1:生成 RW0095 报告...");
+ // 执行相应的查询并获取数据
+// List customerData = retrieveCustomerData();
+ // 执行查询步骤2: 使用 MZG013 报告检查客户的销售历史
+ System.out.println("执行步骤2:使用 MZG013 报告检查客户的销售历史...");
+ // 执行相应的查询并获取数据
+ List transactionData = retrieveTransactionData();
+ List collect = transactionData.stream().map(TransactionData::getUserMember).collect(Collectors.toList());
+ List customerData = retrieveCustomerData(collect);
+ for (TransactionData transactionDatum : transactionData) {
+ for (CustomerData customerDatum : customerData) {
+ if (customerDatum.getMbrCode().equals(transactionDatum.getUserMember())) {
+ customerDatum.setLastMonth(transactionDatum.getSumAmt());
+ break;
+ }
+ }
+ }
+ // 执行步骤3: 合并(vlookup)RW0095中的客户购买金额
+ System.out.println("执行步骤3:合并客户购买金额...");
+ // 执行相应的操作,如vlookup
+
+ // 执行步骤4: 按“发行店”筛选以分离不同文件并逐个发送给店铺
+ System.out.println("执行步骤4:按发行店筛选并发送文件给店铺...");
+ // 执行相应的操作,如过滤和导出
+ String filePath = "C:\\Users\\10233\\Desktop\\CRM.csv";
+ exportToCSV(customerData, filePath);
+ // 关闭连接
+ conn.close();
+ } catch (SQLException se) {
+ // 处理 JDBC 错误
+ se.printStackTrace();
+ } catch (Exception e) {
+ // 处理 Class.forName 错误
+ e.printStackTrace();
+ } finally {
+ // 关闭资源
+ try {
+ if (stmt != null) stmt.close();
+ } catch (SQLException se2) {
+ } // 什么都不做
+ try {
+ if (conn != null) conn.close();
+ } catch (SQLException se) {
+ se.printStackTrace();
+ }
+ }
+ System.out.println("接口执行完成!");
+ }
+
+ private static void exportToCSV(List customerDataList, String filePath) throws IOException {
+ FileWriter writer = new FileWriter(filePath);
+
+// // 写入 CSV 文件的第一行,即字段名
+// writer.append("User Member,Mbr Name,Sh Code,Sum Amt\n");
+//
+// // 遍历数据列表,并将每一行数据写入 CSV 文件
+// for (TransactionData transaction : transactionDataList) {
+// writer.append(transaction.getUserMember()).append(",");
+// writer.append(transaction.getMbrName()).append(",");
+// writer.append(transaction.getShCode()).append(",");
+// writer.append(String.valueOf(transaction.getSumAmt())).append("\n");
+// }
+ writer.append("mbrCode,mbrName,mbrMobile,mbrGroup,mbrStatus,joinDate,mbrIssue,birthMonth,mbrSex,offBonus,effBonus,sumBonus,lastMonth\n");
+
+ // 遍历 customerDataList,并将数据写入 CSV 文件
+ for (CustomerData customer : customerDataList) {
+ writer.append(customer.getMbrCode()).append(",");
+ writer.append(customer.getMbrName()).append(",");
+ writer.append(customer.getMbrMobile()).append(",");
+ writer.append(customer.getMbrGroup()).append(",");
+ writer.append(customer.getMbrStatus()).append(",");
+ writer.append(customer.getJoinDate().toString()).append(","); // 日期需要根据实际情况格式化
+ writer.append(customer.getMbrIssue()).append(",");
+ writer.append(Integer.toString(customer.getBirthMonth())).append(",");
+ writer.append(customer.getMbrSex()).append(",");
+ writer.append(Double.toString(customer.getOffBonus())).append(",");
+ writer.append(Double.toString(customer.getEffBonus())).append(",");
+ writer.append(Double.toString(customer.getSumBonus())).append(",");
+ writer.append(Double.toString(customer.getLastMonth())).append("\n");
+ }
+
+ writer.close();
+ }
+
+ public static List retrieveCustomerData(List collect) {
+ List customerDataList = new ArrayList<>();
+ Connection conn = null;
+ Statement stmt = null;
+ try {
+ // 注册 JDBC 驱动器
+ Class.forName(JDBC_DRIVER);
+
+ // 打开一个连接
+ System.out.println("连接数据库...");
+ conn = DriverManager.getConnection(DB_URL, USER, PASS);
+
+ // 执行查询
+ System.out.println("创建声明...");
+ stmt = conn.createStatement();
+ String sql;
+ // 构建 IN 子句的字符串,用于添加到 SQL 查询中
+ StringBuilder inClause = new StringBuilder("(");
+ for (String code : collect) {
+ inClause.append("'").append(code).append("',");
+ }
+ inClause.deleteCharAt(inClause.length() - 1); // 删除最后一个逗号
+ inClause.append(")");
+
+ // 构建完整的 SQL 查询语句
+ sql = "SELECT * FROM V_RW0095B WHERE mbr_code IN " + inClause.toString();
+ ResultSet rs = stmt.executeQuery(sql);
+
+
+ // 处理结果集
+ while (rs.next()) {
+ // 将每行数据转换为 CustomerData 对象并添加到列表中
+ CustomerData customer = new CustomerData();
+ customer.setMbrCode(rs.getString("mbr_code"));
+ customer.setMbrName(rs.getString("mbr_name"));
+ customer.setMbrMobile(rs.getString("mbr_mobile"));
+ customer.setMbrGroup(rs.getString("mbr_group"));
+ customer.setMbrStatus(rs.getString("mbr_status"));
+ customer.setJoinDate(rs.getDate("join_date"));
+ customer.setMbrIssue(rs.getString("mbr_issue"));
+ customer.setBirthMonth(rs.getInt("birth_m"));
+ customer.setMbrSex(rs.getString("mbr_sex"));
+ customer.setOffBonus(rs.getDouble("off_bonus"));
+ customer.setEffBonus(rs.getDouble("eff_bonus"));
+ customer.setSumBonus(rs.getDouble("sum_bonus"));
+ customerDataList.add(customer);
+
+ }
+
+ // 清理环境
+ rs.close();
+ stmt.close();
+ conn.close();
+ } catch (SQLException se) {
+ // 处理 JDBC 错误
+ se.printStackTrace();
+ } catch (Exception e) {
+ // 处理 Class.forName 错误
+ e.printStackTrace();
+ } finally {
+ // 关闭资源
+ try {
+ if (stmt != null) stmt.close();
+ } catch (SQLException se2) {
+ } // 什么都不做
+ try {
+ if (conn != null) conn.close();
+ } catch (SQLException se) {
+ se.printStackTrace();
+ }
+ }
+ System.out.println("查询执行完成!");
+ return customerDataList;
+ }
+
+ public static List retrieveTransactionData() {
+ List transactionDataList = new ArrayList<>();
+ Connection conn = null;
+ Statement stmt = null;
+ try {
+ // 注册 JDBC 驱动器
+ Class.forName(JDBC_DRIVER);
+
+ // 打开一个连接
+ System.out.println("连接数据库...");
+ conn = DriverManager.getConnection(DB_URL, USER, PASS);
+
+ // 执行查询
+ System.out.println("创建声明...");
+ stmt = conn.createStatement();
+ String sql;
+ sql = "SELECT user_member,mbr_name,sum(trx_bas_amt) sumAmtByMebBySh FROM V_MZG013\n" +
+ "WHERE trx_date >= DATEADD(day, -7, GETDATE())\n" +
+ "and user_member is not NULL\n" +
+ "GROUP BY user_member,mbr_name";
+ ResultSet rs = stmt.executeQuery(sql);
+
+ // 处理结果集
+ while (rs.next()) {
+ // 将每行数据转换为 TransactionData 对象并添加到列表中
+ TransactionData transaction = new TransactionData();
+ transaction.setUserMember(rs.getString("user_member"));
+ transaction.setMbrName(rs.getString("mbr_name"));
+// transaction.setShCode(rs.getString("sh_code"));
+ transaction.setSumAmt(rs.getDouble("sumAmtByMebBySh"));
+// transaction.setTrxNo(rs.getString("trx_no"));
+// transaction.setTrxDate(rs.getTimestamp("trx_date"));
+// transaction.setTrxType(rs.getString("trx_type"));
+// transaction.setTrxStatus(rs.getString("trx_status"));
+// transaction.setTrxTotQty(rs.getDouble("trx_tot_qty"));
+// transaction.setCurrCode(rs.getString("curr_code"));
+// transaction.setExchRate(rs.getDouble("exch_rate"));
+// transaction.setDiscountPerc(rs.getDouble("discount_perc"));
+// transaction.setTrxAccAmt(rs.getDouble("trx_acc_amt"));
+// transaction.setTrxBasAmt(rs.getDouble("trx_bas_amt"));
+// transaction.setOutstandAmt(rs.getDouble("outstand_amt"));
+// transaction.setReceiveAmt(rs.getDouble("receive_amt"));
+// transaction.setChangeAmt(rs.getDouble("change_amt"));
+// transaction.setTrxTotBonus(rs.getDouble("trx_tot_bonus"));
+// transaction.setDepositNo(rs.getString("deposit_no"));
+// transaction.setDepositAmt(rs.getDouble("deposit_amt"));
+// transaction.setDepositStatus(rs.getString("deposit_status"));
+// transaction.setTrxAmtDesc(rs.getString("trx_amt_desc"));
+// transaction.setRemark(rs.getString("remark"));
+// transaction.setShCode(rs.getString("sh_code"));
+// transaction.setWhCodeFrom(rs.getString("wh_code_from"));
+// transaction.setWhCodeTo(rs.getString("wh_code_to"));
+// transaction.setIssuedBy(rs.getString("issued_by"));
+// transaction.setClientCode(rs.getString("client_code"));
+// transaction.setClientName(rs.getString("client_name"));
+// transaction.setSalesmanCode(rs.getString("salesman_code"));
+// transaction.setCtypeCode(rs.getString("ctype_code"));
+// transaction.setUpdatedOn(rs.getTimestamp("updated_on"));
+// transaction.setDocType(rs.getString("doc_type"));
+// transaction.setRefNo(rs.getString("ref_no"));
+// transaction.setAdjType(rs.getString("adj_type"));
+// transaction.setRefType(rs.getString("ref_type"));
+// transaction.setOrderNo(rs.getString("order_no"));
+// transaction.setRecoverF(rs.getString("recover_f"));
+// transaction.setRecoverT(rs.getString("recover_t"));
+// transaction.setRequestBy(rs.getString("request_by"));
+// transaction.setError(rs.getString("error"));
+// transaction.setAuthorizedDate(rs.getTimestamp("authorized_date"));
+// transaction.setAuthorizedBy(rs.getString("authorized_by"));
+// transaction.setChangeCurrCode(rs.getString("change_curr_code"));
+// transaction.setChgRate(rs.getDouble("chg_rate"));
+// transaction.setCashier(rs.getString("cashier"));
+// transaction.setCashiNo(rs.getString("cashi_no"));
+// transaction.setSalesmanCode2(rs.getString("salesman_code2"));
+// transaction.setClassId(rs.getString("class_id"));
+// transaction.setDisAmt(rs.getDouble("dis_amt"));
+// transaction.setAcStatus(rs.getString("ac_status"));
+// transaction.setReprint(rs.getString("reprint"));
+// transaction.setAlt1(rs.getString("alt_1"));
+// transaction.setAlt2(rs.getString("alt_2"));
+// transaction.setAlt3(rs.getString("alt_3"));
+// transaction.setAlt4(rs.getString("alt_4"));
+// transaction.setAlt5(rs.getString("alt_5"));
+// transaction.setAltD1(rs.getDate("alt_d1"));
+// transaction.setAltD2(rs.getDate("alt_d2"));
+// transaction.setAltD3(rs.getDate("alt_d3"));
+// transaction.setAltD4(rs.getDate("alt_d4"));
+// transaction.setAltD5(rs.getDate("alt_d5"));
+// transaction.setSalesmanCode3(rs.getString("salesman_code3"));
+// transaction.setContractNo(rs.getString("contract_no"));
+// transaction.setExpireDate(rs.getTimestamp("expire_date"));
+// transaction.setDepositNetAmt(rs.getDouble("deposit_netamt"));
+// transaction.setClientRestriction(rs.getString("client_restriction"));
+// transaction.setRefStatus(rs.getString("ref_status"));
+// transaction.setMbrDis(rs.getDouble("mbr_dis"));
+// transaction.setPmtDiscount(rs.getDouble("pmt_discount"));
+// transaction.setPmtAmount(rs.getDouble("pmt_amount"));
+// transaction.setPmtNo(rs.getString("pmt_no"));
+// transaction.setRefCode(rs.getString("ref_code"));
+// transaction.setDocApproved(rs.getString("doc_approved"));
+// transaction.setRefractionNo(rs.getString("refraction_no"));
+// transaction.setCcpTot(rs.getDouble("ccp_tot"));
+// transaction.setCcpRed(rs.getDouble("ccp_red"));
+// transaction.setCcpExpired(rs.getDouble("ccp_expired"));
+// transaction.setPrintedTimes(rs.getInt("printed_times"));
+// transaction.setPickupShop(rs.getString("pickup_shop"));
+// transaction.setDeliveryDate(rs.getDate("delivery_date"));
+// transaction.setDeliveryTime(rs.getString("delivery_time"));
+// transaction.setWsCode(rs.getString("ws_code"));
+// transaction.setClCode(rs.getString("cl_code"));
+// transaction.setClDesc(rs.getString("cl_desc"));
+// transaction.setRatio(rs.getString("ratio"));
+// transaction.setUserMember(rs.getString("user_member"));
+// transaction.setHflag(rs.getString("hflag"));
+// transaction.setIssueShop(rs.getString("issue_shop"));
+// transaction.setHoUpdBy(rs.getString("ho_upd_by"));
+// transaction.setHoUpdOn(rs.getTimestamp("ho_upd_on"));
+// transaction.setBonusExpired(rs.getDouble("bonus_expired"));
+// transaction.setBonusRed(rs.getDouble("bonus_red"));
+// transaction.setConfirmedOn(rs.getTimestamp("confirmed_on"));
+// transaction.setConfirmedBy(rs.getString("confirmed_by"));
+// transaction.setDocConfirmed(rs.getString("doc_confirmed"));
+// transaction.setBrNo(rs.getString("br_no"));
+// transaction.setChangeAmt2(rs.getDouble("change_amt2"));
+// transaction.setSalesDate(rs.getDate("sales_date"));
+// transaction.setMbrName(rs.getString("mbr_name"));
+// transaction.setCanEntryDis(rs.getString("can_entry_dis"));
+// transaction.setReactiveClient(rs.getString("reactive_client"));
+// transaction.setReactiveMbr(rs.getString("reactive_mbr"));
+// transaction.setShUpdBy(rs.getString("sh_upd_by"));
+// transaction.setShUpdOn(rs.getTimestamp("sh_upd_on"));
+// transaction.setTax1(rs.getDouble("tax1"));
+// transaction.setTax2(rs.getDouble("tax2"));
+// transaction.setTax3(rs.getDouble("tax3"));
+// transaction.setTax4(rs.getDouble("tax4"));
+// transaction.setTax5(rs.getDouble("tax5"));
+// transaction.setAltChar1(rs.getString("alt_char1"));
+// transaction.setAltChar2(rs.getString("alt_char2"));
+// transaction.setAltChar3(rs.getString("alt_char3"));
+// transaction.setAltChar4(rs.getString("alt_char4"));
+// transaction.setAltChar5(rs.getString("alt_char5"));
+// transaction.setAltNum1(rs.getDouble("alt_num1"));
+// transaction.setAltNum2(rs.getDouble("alt_num2"));
+// transaction.setAltNum3(rs.getDouble("alt_num3"));
+// transaction.setAltNum4(rs.getDouble("alt_num4"));
+// transaction.setAltNum5(rs.getDouble("alt_num5"));
+// transaction.setNewClient(rs.getString("new_client"));
+// transaction.setNewMbr(rs.getString("new_mbr"));
+// transaction.setPmtExtraDiscount(rs.getDouble("pmt_extra_discount"));
+// transaction.setPmtExtraAmount(rs.getDouble("pmt_extra_amount"));
+// transaction.setManualDiscount(rs.getDouble("manual_discount"));
+// transaction.setManualAmount(rs.getDouble("manual_amount"));
+// transaction.setUsermbrDiscount(rs.getDouble("usermbr_discount"));
+// transaction.setClientDiscount(rs.getDouble("client_discount"));
+// transaction.setHoldVoid(rs.getString("hold_void"));
+// transaction.setPayBasAmt(rs.getDouble("pay_bas_amt"));
+// transaction.setPayDesc(rs.getString("pay_desc"));
+// transaction.setPayCode(rs.getString("pay_code"));
+// transaction.setCardNo(rs.getString("card_no"));
+// transaction.setPayCurr(rs.getString("pay_curr"));
+// transaction.setPayCurrAmt(rs.getDouble("pay_curr_amt"));
+// transaction.setOnbehalfPaid(rs.getString("onbehalf_paid"));
+// transaction.setOnbehalfLoc(rs.getString("onbehalf_loc"));
+// transaction.setOldCardNo(rs.getString("old_card_no"));
+// transaction.setTrxYear(rs.getInt("TRX_YEAR"));
+// transaction.setTrxMonth(rs.getInt("TRX_MONTH"));
+
+ transactionDataList.add(transaction);
+ }
+
+
+ // 清理环境
+ rs.close();
+ stmt.close();
+ conn.close();
+ } catch (SQLException | ClassNotFoundException e) {
+ // 处理异常
+ e.printStackTrace();
+ }
+ System.out.println("查询执行完成!");
+ return transactionDataList;
+ }
+
+ // 示例:导出数据到CSV文件
+ private static void exportToCSV(ResultSet resultSet, String filePath) throws SQLException, IOException {
+ FileWriter writer = new FileWriter(filePath);
+
+ while (resultSet.next()) {
+ // 将结果写入CSV文件
+ // 这里需要根据实际情况将数据写入CSV文件
+ }
+
+ writer.close();
+ }
+}
+
diff --git a/src/main/java/com/ai/da/common/enums/CurrentDesignPictureTypeEnum.java b/src/main/java/com/ai/da/common/enums/CurrentDesignPictureTypeEnum.java
index d254997d..259d93ce 100644
--- a/src/main/java/com/ai/da/common/enums/CurrentDesignPictureTypeEnum.java
+++ b/src/main/java/com/ai/da/common/enums/CurrentDesignPictureTypeEnum.java
@@ -20,15 +20,15 @@ public enum CurrentDesignPictureTypeEnum {
/**
* USER_LIBRARY
*/
- USER_LIBRARY(2, "userLibrary"),
+// USER_LIBRARY(2, "userLibrary"),
/**
* SYS_FILE
*/
- SYS_FILE(3, "sysFile"),
+ SYS_FILE(2, "sysFile"),
/**
* noPIN
*/
- NO_PIN(4, "noPIN");
+ NO_PIN(3, "noPIN");
private Integer code;
private String desc;
diff --git a/src/main/java/com/ai/da/common/utils/RandomsUtil.java b/src/main/java/com/ai/da/common/utils/RandomsUtil.java
index fd4b352f..dc68ec90 100644
--- a/src/main/java/com/ai/da/common/utils/RandomsUtil.java
+++ b/src/main/java/com/ai/da/common/utils/RandomsUtil.java
@@ -48,5 +48,9 @@ public class RandomsUtil {
return RandomUtil.randomLong(randomStart, randomEnd);
}
+ public static Integer randomSysFile(Integer randomEnd) {
+ return RandomUtil.randomInt(randomEnd);
+ }
+
}
diff --git a/src/main/java/com/ai/da/controller/AccountController.java b/src/main/java/com/ai/da/controller/AccountController.java
index d9ed7803..ce1cd82f 100644
--- a/src/main/java/com/ai/da/controller/AccountController.java
+++ b/src/main/java/com/ai/da/controller/AccountController.java
@@ -2,13 +2,10 @@ package com.ai.da.controller;
import com.ai.da.common.response.PageBaseResponse;
import com.ai.da.common.response.Response;
-import com.ai.da.common.security.jwt.JWTTokenHelper;
-import com.ai.da.mapper.entity.TrialOrder;
+import com.ai.da.mapper.primary.entity.TrialOrder;
import com.ai.da.model.dto.*;
-import com.ai.da.model.enums.Language;
import com.ai.da.model.vo.AccountLoginVO;
import com.ai.da.model.vo.AccountPreLoginVO;
-import com.ai.da.model.vo.QueryLibraryPageVO;
import com.ai.da.service.AccountService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
diff --git a/src/main/java/com/ai/da/controller/DesignController.java b/src/main/java/com/ai/da/controller/DesignController.java
index b36cf6f9..87fe11a6 100644
--- a/src/main/java/com/ai/da/controller/DesignController.java
+++ b/src/main/java/com/ai/da/controller/DesignController.java
@@ -30,6 +30,7 @@ public class DesignController {
@ApiOperation(value = "设计 Conllection")
@PostMapping("/designCollection")
+ @CrossOrigin
public Response designCollection(@Valid @RequestBody DesignCollectionDTO designDTO) {
return Response.success(designService.designCollection(designDTO));
}
diff --git a/src/main/java/com/ai/da/mapper/primary/CollocationMapper.java b/src/main/java/com/ai/da/mapper/primary/CollocationMapper.java
new file mode 100644
index 00000000..7e9af210
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/primary/CollocationMapper.java
@@ -0,0 +1,13 @@
+package com.ai.da.mapper.primary;
+
+import com.ai.da.common.config.mybatis.plus.CommonMapper;
+import com.ai.da.mapper.primary.entity.Collection;
+import com.ai.da.mapper.primary.entity.Collocation;
+import com.ai.da.python.vo.DesignPythonItem;
+
+import java.util.List;
+
+public interface CollocationMapper extends CommonMapper {
+
+ List getCollocationListBySketch(String apparel, String styleCategory);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ai/da/mapper/primary/DressingMapper.java b/src/main/java/com/ai/da/mapper/primary/DressingMapper.java
new file mode 100644
index 00000000..ca0f5bf5
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/primary/DressingMapper.java
@@ -0,0 +1,11 @@
+package com.ai.da.mapper.primary;
+
+import com.ai.da.common.config.mybatis.plus.CommonMapper;
+import com.ai.da.mapper.primary.entity.Dressing;
+
+import java.util.List;
+
+public interface DressingMapper extends CommonMapper {
+
+ List getOtherSketchCategoryNameList(Long id, String styleCategory);
+}
diff --git a/src/main/java/com/ai/da/mapper/GenerateCancelMapper.java b/src/main/java/com/ai/da/mapper/primary/GenerateCancelMapper.java
similarity index 60%
rename from src/main/java/com/ai/da/mapper/GenerateCancelMapper.java
rename to src/main/java/com/ai/da/mapper/primary/GenerateCancelMapper.java
index 3e24ea09..3a9cfee8 100644
--- a/src/main/java/com/ai/da/mapper/GenerateCancelMapper.java
+++ b/src/main/java/com/ai/da/mapper/primary/GenerateCancelMapper.java
@@ -1,7 +1,7 @@
-package com.ai.da.mapper;
+package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
-import com.ai.da.mapper.entity.GenerateCancel;
+import com.ai.da.mapper.primary.entity.GenerateCancel;
public interface GenerateCancelMapper extends CommonMapper {
}
diff --git a/src/main/java/com/ai/da/mapper/LibraryCopyMapper.java b/src/main/java/com/ai/da/mapper/primary/LibraryCopyMapper.java
similarity index 65%
rename from src/main/java/com/ai/da/mapper/LibraryCopyMapper.java
rename to src/main/java/com/ai/da/mapper/primary/LibraryCopyMapper.java
index 3cec4a2e..6d7954a4 100644
--- a/src/main/java/com/ai/da/mapper/LibraryCopyMapper.java
+++ b/src/main/java/com/ai/da/mapper/primary/LibraryCopyMapper.java
@@ -1,8 +1,7 @@
-package com.ai.da.mapper;
+package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
-import com.ai.da.mapper.entity.Library;
-import com.ai.da.mapper.entity.LibraryCopy;
+import com.ai.da.mapper.primary.entity.LibraryCopy;
/**
* Mapper 接口
diff --git a/src/main/java/com/ai/da/mapper/LibraryModelPointCopyMapper.java b/src/main/java/com/ai/da/mapper/primary/LibraryModelPointCopyMapper.java
similarity index 63%
rename from src/main/java/com/ai/da/mapper/LibraryModelPointCopyMapper.java
rename to src/main/java/com/ai/da/mapper/primary/LibraryModelPointCopyMapper.java
index 05447f66..93767df6 100644
--- a/src/main/java/com/ai/da/mapper/LibraryModelPointCopyMapper.java
+++ b/src/main/java/com/ai/da/mapper/primary/LibraryModelPointCopyMapper.java
@@ -1,8 +1,7 @@
-package com.ai.da.mapper;
+package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
-import com.ai.da.mapper.entity.LibraryModelPoint;
-import com.ai.da.mapper.entity.LibraryModelPointCopy;
+import com.ai.da.mapper.primary.entity.LibraryModelPointCopy;
/**
* Mapper 接口
diff --git a/src/main/java/com/ai/da/mapper/primary/entity/BaseEntity.java b/src/main/java/com/ai/da/mapper/primary/entity/BaseEntity.java
new file mode 100644
index 00000000..862feb59
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/primary/entity/BaseEntity.java
@@ -0,0 +1,44 @@
+package com.ai.da.mapper.primary.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ private Long id;
+
+ /**
+ * 创建时间
+ */
+ private Date createDate;
+
+ /**
+ * 更新时间
+ */
+ private Date updateDate;
+
+ /**
+ * 是否已删除
+ */
+ private Integer isDeleted;
+
+ /**
+ * 用户ID
+ */
+// private Long userId;
+
+}
diff --git a/src/main/java/com/ai/da/mapper/primary/entity/Collocation.java b/src/main/java/com/ai/da/mapper/primary/entity/Collocation.java
new file mode 100644
index 00000000..cbc6edba
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/primary/entity/Collocation.java
@@ -0,0 +1,50 @@
+package com.ai.da.mapper.primary.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("collocation")
+public class Collocation implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 用户ID
+ */
+ private String name;
+
+ /**
+ * mood模板id
+ */
+ private Integer isSystem;
+
+ private Long userId;
+
+ /**
+ * 创建时间
+ */
+ private Date createDate;
+
+ /**
+ * 更新时间
+ */
+ private Date updateDate;
+
+ private Integer isDeleted;
+}
diff --git a/src/main/java/com/ai/da/mapper/primary/entity/CustomerData.java b/src/main/java/com/ai/da/mapper/primary/entity/CustomerData.java
new file mode 100644
index 00000000..0056e030
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/primary/entity/CustomerData.java
@@ -0,0 +1,23 @@
+package com.ai.da.mapper.primary.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CustomerData {
+ private String mbrCode;
+ private String mbrName;
+ private String mbrMobile;
+ private String mbrGroup;
+ private String mbrStatus;
+ private Date joinDate;
+ private String mbrIssue;
+ private int birthMonth;
+ private String mbrSex;
+ private double offBonus;
+ private double effBonus;
+ private double sumBonus;
+
+ private double lastMonth;
+}
diff --git a/src/main/java/com/ai/da/mapper/secondary/entity/FemaleDress.java b/src/main/java/com/ai/da/mapper/primary/entity/Dressing.java
similarity index 55%
rename from src/main/java/com/ai/da/mapper/secondary/entity/FemaleDress.java
rename to src/main/java/com/ai/da/mapper/primary/entity/Dressing.java
index 7c64bd9f..306d39bc 100644
--- a/src/main/java/com/ai/da/mapper/secondary/entity/FemaleDress.java
+++ b/src/main/java/com/ai/da/mapper/primary/entity/Dressing.java
@@ -1,4 +1,4 @@
-package com.ai.da.mapper.secondary.entity;
+package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -8,18 +8,23 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
+import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
-@TableName("female_dress")
-public class FemaleDress implements Serializable {
+@TableName("dressing")
+public class Dressing implements Serializable {
+
private static final long serialVersionUID = 1L;
- /**
- * ID
- */
- @TableId(value = "ID", type = IdType.AUTO)
+ @TableId(value = "id", type = IdType.AUTO)
private Long id;
- private String imgName;
-}
\ No newline at end of file
+
+ private String apparel;
+ private String styleCategory;
+ private String ageGroup;
+ private String position;
+ private Integer priority;
+
+}
diff --git a/src/main/java/com/ai/da/mapper/primary/entity/GenerateCancel.java b/src/main/java/com/ai/da/mapper/primary/entity/GenerateCancel.java
index 8726b9ed..efa0d7c9 100644
--- a/src/main/java/com/ai/da/mapper/primary/entity/GenerateCancel.java
+++ b/src/main/java/com/ai/da/mapper/primary/entity/GenerateCancel.java
@@ -1,4 +1,4 @@
-package com.ai.da.mapper.entity;
+package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
diff --git a/src/main/java/com/ai/da/mapper/primary/entity/LibraryCopy.java b/src/main/java/com/ai/da/mapper/primary/entity/LibraryCopy.java
new file mode 100644
index 00000000..42171cec
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/primary/entity/LibraryCopy.java
@@ -0,0 +1,83 @@
+package com.ai.da.mapper.primary.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Attendance
+ *
+ * @author easy-generator
+ * @since 2022-06-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_library_copy")
+public class LibraryCopy implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 用户ID
+ */
+ private Long accountId;
+
+ /**
+ * 一级类型
+ */
+ private String level1Type;
+
+ /**
+ * 二级类型
+ */
+ private String level2Type;
+
+ private String level3Type;
+
+ /**
+ * 元素名
+ */
+ private String name;
+
+ /**
+ * 元素存放地址
+ */
+ private String url;
+ /**
+ * md5值
+ */
+ private String md5;
+ /**
+ * 图片高度,目前只争对 models类型
+ */
+ private Integer high;
+ /**
+ * 图片宽度,目前只争对 models类型
+ */
+ private Integer width;
+
+ /**
+ * 创建时间
+ */
+ private Date createDate;
+
+ /**
+ * 更新时间
+ */
+ private Date updateDate;
+
+// private Integer isCopy;
+}
diff --git a/src/main/java/com/ai/da/mapper/primary/entity/LibraryModelPointCopy.java b/src/main/java/com/ai/da/mapper/primary/entity/LibraryModelPointCopy.java
new file mode 100644
index 00000000..a14b5579
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/primary/entity/LibraryModelPointCopy.java
@@ -0,0 +1,81 @@
+package com.ai.da.mapper.primary.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Attendance
+ *
+ * @author easy-generator
+ * @since 2022-11-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_library_model_point_copy")
+public class LibraryModelPointCopy implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * modelType
+ */
+ private String modelType;
+
+ /**
+ * 关联的 library或sys Id
+ */
+ private Long libraryId;
+
+ /**
+ * 左肩
+ */
+ private String shoulderLeft;
+
+ /**
+ * 右肩
+ */
+ private String shoulderRight;
+
+ /**
+ * 左腰
+ */
+ private String waistbandLeft;
+
+ /**
+ * 右腰
+ */
+ private String waistbandRight;
+ /**
+ * 左手
+ */
+ private String handLeft;
+
+ /**
+ * 右手
+ */
+ private String handRight;
+
+ /**
+ * 创建时间
+ */
+ private Date createDate;
+
+ /**
+ * 更新时间
+ */
+ private Date updateDate;
+}
diff --git a/src/main/java/com/ai/da/mapper/primary/entity/TransactionData.java b/src/main/java/com/ai/da/mapper/primary/entity/TransactionData.java
new file mode 100644
index 00000000..8209be65
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/primary/entity/TransactionData.java
@@ -0,0 +1,149 @@
+package com.ai.da.mapper.primary.entity;
+
+import lombok.Data;
+
+import java.sql.Date;
+import java.sql.Timestamp;
+
+@Data
+public class TransactionData {
+ private String trxNo;
+ private Timestamp trxDate;
+ private String trxType;
+ private String trxStatus;
+ private double trxTotQty;
+ private String currCode;
+ private double exchRate;
+ private double discountPerc;
+ private double trxAccAmt;
+ private double trxBasAmt;
+ private double outstandAmt;
+ private double receiveAmt;
+ private double changeAmt;
+ private double trxTotBonus;
+ private String depositNo;
+ private double depositAmt;
+ private String depositStatus;
+ private String trxAmtDesc;
+ private String remark;
+ private String shCode;
+ private String whCodeFrom;
+ private String whCodeTo;
+ private String issuedBy;
+ private String clientCode;
+ private String clientName;
+ private String salesmanCode;
+ private String ctypeCode;
+ private Timestamp updatedOn;
+ private String docType;
+ private String refNo;
+ private String adjType;
+ private String refType;
+ private String orderNo;
+ private String recoverF;
+ private String recoverT;
+ private String requestBy;
+ private String error;
+ private Timestamp authorizedDate;
+ private String authorizedBy;
+ private String changeCurrCode;
+ private double chgRate;
+ private String cashier;
+ private String cashiNo;
+ private String salesmanCode2;
+ private String classId;
+ private double disAmt;
+ private String acStatus;
+ private String reprint;
+ private String alt1;
+ private String alt2;
+ private String alt3;
+ private String alt4;
+ private String alt5;
+ private Date altD1;
+ private Date altD2;
+ private Date altD3;
+ private Date altD4;
+ private Date altD5;
+ private String salesmanCode3;
+ private String contractNo;
+ private Timestamp expireDate;
+ private double depositNetAmt;
+ private String clientRestriction;
+ private String refStatus;
+ private double mbrDis;
+ private double pmtDiscount;
+ private double pmtAmount;
+ private String pmtNo;
+ private String refCode;
+ private String docApproved;
+ private String refractionNo;
+ private double ccpTot;
+ private double ccpRed;
+ private double ccpExpired;
+ private int printedTimes;
+ private String pickupShop;
+ private Date deliveryDate;
+ private String deliveryTime;
+ private String wsCode;
+ private String clCode;
+ private String clDesc;
+ private String ratio;
+ private String userMember;
+ private String hflag;
+ private String issueShop;
+ private String hoUpdBy;
+ private Timestamp hoUpdOn;
+ private double bonusExpired;
+ private double bonusRed;
+ private Timestamp confirmedOn;
+ private String confirmedBy;
+ private String docConfirmed;
+ private String brNo;
+ private double changeAmt2;
+ private Date salesDate;
+ private String mbrName;
+ private String canEntryDis;
+ private String reactiveClient;
+ private String reactiveMbr;
+ private String shUpdBy;
+ private Timestamp shUpdOn;
+ private double tax1;
+ private double tax2;
+ private double tax3;
+ private double tax4;
+ private double tax5;
+ private String altChar1;
+ private String altChar2;
+ private String altChar3;
+ private String altChar4;
+ private String altChar5;
+ private double altNum1;
+ private double altNum2;
+ private double altNum3;
+ private double altNum4;
+ private double altNum5;
+ private String newClient;
+ private String newMbr;
+ private double pmtExtraDiscount;
+ private double pmtExtraAmount;
+ private double manualDiscount;
+ private double manualAmount;
+ private double usermbrDiscount;
+ private double clientDiscount;
+ private String holdVoid;
+ private double payBasAmt;
+ private String payDesc;
+ private String payCode;
+ private String cardNo;
+ private String payCurr;
+ private double payCurrAmt;
+ private String onbehalfPaid;
+ private String onbehalfLoc;
+ private String oldCardNo;
+ private int trxYear;
+ private int trxMonth;
+
+ private double sumAmt;
+}
+
diff --git a/src/main/java/com/ai/da/mapper/secondary/AttributeRetrievalMapper.java b/src/main/java/com/ai/da/mapper/secondary/AttributeRetrievalMapper.java
new file mode 100644
index 00000000..cd657a7e
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/secondary/AttributeRetrievalMapper.java
@@ -0,0 +1,25 @@
+package com.ai.da.mapper.secondary;
+
+import com.ai.da.mapper.secondary.entity.AttributeRetrieval;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Mapper 接口
+ *
+ * @author easy-generator
+ * @since 2022-06-13
+ */
+
+@Mapper
+public interface AttributeRetrievalMapper {
+
+
+ List getSystemSketchPool(@Param("attributeRetrievalAttrDict") AttributeRetrieval attributeRetrievalAttrDict, @Param("tableName") String tableName, @Param("poolNum") int poolNum);
+
+ AttributeRetrieval getSystemRandom(String tableName);
+
+ List getSystemSketchPoolBySameCategory(AttributeRetrieval attributeRetrievalAttrDict, String tableName);
+}
diff --git a/src/main/java/com/ai/da/mapper/secondary/FemaleDressMapper.java b/src/main/java/com/ai/da/mapper/secondary/FemaleDressMapper.java
deleted file mode 100644
index 4f63c7a7..00000000
--- a/src/main/java/com/ai/da/mapper/secondary/FemaleDressMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.ai.da.mapper.secondary;
-
-import com.ai.da.common.config.mybatis.plus.CommonMapper;
-import com.ai.da.mapper.secondary.entity.FemaleDress;
-
-/**
- * Mapper 接口
- *
- * @author easy-generator
- * @since 2022-06-13
- */
-public interface FemaleDressMapper extends CommonMapper {
-
-
-
-}
diff --git a/src/main/java/com/ai/da/mapper/secondary/entity/AttributeRecognitionJSON.java b/src/main/java/com/ai/da/mapper/secondary/entity/AttributeRecognitionJSON.java
new file mode 100644
index 00000000..a04f4e4b
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/secondary/entity/AttributeRecognitionJSON.java
@@ -0,0 +1,22 @@
+package com.ai.da.mapper.secondary.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AttributeRecognitionJSON {
+ private Long id;
+ private List imgName;
+ private List length;
+ private List sleeveLength;
+ private List sleeveShape;
+ private List sleeveShoulder;
+ private List neckline;
+ private List collar;
+ private List design;
+ private List silhouette;
+ private List type;
+ private List openingType;
+ private List subtype;
+}
diff --git a/src/main/java/com/ai/da/mapper/secondary/entity/AttributeRetrieval.java b/src/main/java/com/ai/da/mapper/secondary/entity/AttributeRetrieval.java
new file mode 100644
index 00000000..c8611586
--- /dev/null
+++ b/src/main/java/com/ai/da/mapper/secondary/entity/AttributeRetrieval.java
@@ -0,0 +1,24 @@
+package com.ai.da.mapper.secondary.entity;
+
+import lombok.Data;
+
+@Data
+public class AttributeRetrieval {
+ private Long id;
+ private String imgName;
+ private String length;
+ private String sleeveLength;
+ private String sleeveShape;
+ private String sleeveShoulder;
+ private String neckline;
+ private String collar;
+ private String design;
+ private String silhouette;
+ private String type;
+ private String openingType;
+ private String subtype;
+
+ private String sleeve;
+ private String sleeve1;
+ private String sleeve2;
+}
diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java
index cc8f32ae..3179e1bd 100644
--- a/src/main/java/com/ai/da/python/PythonService.java
+++ b/src/main/java/com/ai/da/python/PythonService.java
@@ -6,8 +6,15 @@ import com.ai.da.common.config.FileProperties;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.enums.*;
import com.ai.da.common.utils.*;
+import com.ai.da.mapper.primary.CollocationMapper;
+import com.ai.da.mapper.primary.DressingMapper;
import com.ai.da.mapper.primary.entity.CollectionElement;
+import com.ai.da.mapper.primary.entity.Collocation;
import com.ai.da.mapper.primary.entity.DesignHistory;
+import com.ai.da.mapper.primary.entity.Dressing;
+import com.ai.da.mapper.secondary.AttributeRetrievalMapper;
+import com.ai.da.mapper.secondary.entity.AttributeRetrieval;
+import com.ai.da.mapper.secondary.entity.AttributeRecognitionJSON;
import com.ai.da.model.dto.*;
import com.ai.da.model.enums.MalePosition;
import com.ai.da.model.enums.Sex;
@@ -21,6 +28,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
@@ -37,6 +45,7 @@ import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.net.HttpURLConnection;
import java.util.*;
import java.util.concurrent.TimeUnit;
@@ -218,71 +227,88 @@ public class PythonService {
elementVO.setNoPinPrintNum(noPinPrintNum);
//系统比列
- BigDecimal sysRatio = systemScale;
- int pinSketchNum = calculatePinSketchNum(elementVO.getSketchBoardElements(), elementVO.getHasUseMd5List());
- int sysSketchNum = calculateSysSketchNum(sysRatio, pinSketchNum);
-// int noPinSketchNum = calculateNoPinSketchNum(pinSketchNum, sysSketchNum);
-// int sysPictureNum = calculateSysPictureNum(sysRatio, pinPictureNum);
-// int userPictureNum = calculateUserLibraryPictureNum(sysPictureNum, pinPictureNum);
-// int noPinPictureNum = 8 - pinPictureNum - sysPictureNum - userPictureNum;
+// BigDecimal sysRatio = systemScale;
+ int pinSketchNum = 0;
+ int sysSketchNum = 0;
+ int noPinSketchNum = 0;
-// for (int i = 0; i < 8; i++) {
-// //sketch计算
-// CurrentDesignPictureTypeEnum designPictureType =
-// calculateCurrentDesignPictureType(pinPictureNum, sysPictureNum, userPictureNum, noPinPictureNum);
-// if (Objects.isNull(designPictureType)) {
-// break;
-// }
-// switch (designPictureType) {
-// case PIN:
-// pinPictureNum--;
-// break;
-// case USER_LIBRARY:
-// userPictureNum--;
-// break;
-// case SYS_FILE:
-// sysPictureNum--;
-// break;
-// case NO_PIN:
-// noPinPictureNum--;
-// break;
-// default:
-// }
-// //print计算
-// CurrentDesignPrintPictureTypeEnum designPrintPictureType =
-// calculateCurrentDesignPintPictureType(pinPrintNum, noPinPrintNum, noPrintNum);
-// if (Objects.isNull(designPrintPictureType)) {
-// break;
-// }
-// switch (designPrintPictureType) {
-// case PIN:
-// pinPrintNum--;
-// break;
-// case NO_PIN:
-// noPinPrintNum--;
-// break;
-// case NO:
-// noPrintNum--;
-// break;
-// default:
-// }
-// //确定本次designSingle是否print
-// DesignPythonItemPrint designPythonItemPrint = getRandomPrint(elementVO, designPrintPictureType);
-// elementVO.setDesignPythonItemPrint(designPythonItemPrint);
-// //参数透传 确定本次designSingle如果需要print对应的种类
-// elementVO.setDesignPrintPictureTypeLayoutList(calculateCurrentDesignPintPictureTypeLayout(elementVO.getModelSex()));
-// //designSingle具体参数组装
-// DesignPythonObject pythonObject = new DesignPythonObject();
-// pythonObject.setItems(coverToDesignPythonItem(elementVO, designPictureType));
-// pythonObject.setBasic(coverToBasic(pythonObject.getItems().get(0),
-// singleOverall, switchCategory, elementVO.getDesignLibraryModelPoint()));
-// objects.add(pythonObject);
-// }
+ for (int i = 0; i < 8; i++) {
+ //sketch计算
+ CurrentDesignPictureTypeEnum designPictureType = calculateCurrentDesignPictureTypeNew(elementVO, pinSketchNum, sysSketchNum, noPinSketchNum, systemScale);
+ if (Objects.isNull(designPictureType)) {
+ break;
+ }
+ //print计算
+ CurrentDesignPrintPictureTypeEnum designPrintPictureType = calculateCurrentDesignPintPictureType(pinPrintNum, noPinPrintNum, noPrintNum);
+ if (Objects.isNull(designPrintPictureType)) {
+ break;
+ }
+ switch (designPictureType) {
+ case PIN:
+ pinSketchNum ++;
+ break;
+ case NO_PIN:
+ noPinSketchNum --;
+ break;
+ case SYS_FILE:
+ sysSketchNum --;
+ break;
+ default:
+ }
+ switch (designPrintPictureType) {
+ case PIN:
+ pinPrintNum--;
+ break;
+ case NO_PIN:
+ noPinPrintNum--;
+ break;
+ case NO:
+ noPrintNum--;
+ break;
+ default:
+ }
+ //确定本次designSingle是否print
+ DesignPythonItemPrint designPythonItemPrint = getRandomPrint(elementVO, designPrintPictureType);
+ elementVO.setDesignPythonItemPrint(designPythonItemPrint);
+ //参数透传 确定本次designSingle如果需要print对应的种类
+ elementVO.setDesignPrintPictureTypeLayoutList(calculateCurrentDesignPintPictureTypeLayout(elementVO.getModelSex()));
+ //designSingle具体参数组装
+ DesignPythonObject pythonObject = new DesignPythonObject();
+ pythonObject.setItems(coverToDesignPythonItemNew(elementVO, designPictureType, systemScale));
+ pythonObject.setBasic(coverToBasic(pythonObject.getItems().get(0),
+ singleOverall, switchCategory, elementVO.getDesignLibraryModelPoint()));
+ objects.add(pythonObject);
+ }
return designPythonObjects;
}
+ private CurrentDesignPictureTypeEnum calculateCurrentDesignPictureTypeNew(ValidateElementVO elementVO, int pinSketchNum, int sysSketchNum, int noPinSketchNum, BigDecimal systemScale) {
+ List pinData = getPinData(elementVO);
+ if (CollectionUtil.isNotEmpty(pinData)) {
+ return CurrentDesignPictureTypeEnum.PIN;
+ }else {
+ if (sysSketchNum == 0 && noPinSketchNum == 0) {
+ sysSketchNum = systemScale.multiply(BigDecimal.valueOf(8 - pinSketchNum)).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+ noPinSketchNum = 8 - pinSketchNum - sysSketchNum;
+ }
+ if (noPinSketchNum > 0) {
+ return CurrentDesignPictureTypeEnum.NO_PIN;
+ }
+ return CurrentDesignPictureTypeEnum.SYS_FILE;
+ }
+ }
+
+ private int calculateNoPinSketchNum(int pinSketchNum, int sysSketchNum) {
+ return 8 - pinSketchNum - sysSketchNum;
+ }
+
private int calculateSysSketchNum(BigDecimal sysRatio, int pinSketchNum) {
- return 0;
+ // Calculate sysRatio * (8 - pinSketchNum)
+ BigDecimal result = sysRatio.multiply(BigDecimal.valueOf(8 - pinSketchNum));
+
+ // Round the result to the nearest integer using half-up rounding
+
+ return result.setScale(0, RoundingMode.HALF_UP).intValue();
}
private int calculatePinSketchNum(List sketchBoardElements, List hasUseMd5List) {
@@ -302,20 +328,18 @@ public class PythonService {
}
//计算当前的图片类型
- private CurrentDesignPictureTypeEnum calculateCurrentDesignPictureType(int pinPictureNum, int sysPictureNum, int userPictureNum, int noPinPictureNum) {
+ private CurrentDesignPictureTypeEnum calculateCurrentDesignPictureType(int pinSketchNum, int sysSketchNum, int noPinSketchNum) {
List codes = Lists.newArrayList();
- if (pinPictureNum > 0) {
+ if (pinSketchNum > 0) {
//pin默认优先选择 不参与计算 后续有调整再说
// codes.add(pinPictureNum);
return CurrentDesignPictureTypeEnum.PIN;
}
- if (sysPictureNum > 0) {
+ if (sysSketchNum > 0) {
codes.add(CurrentDesignPictureTypeEnum.SYS_FILE.getCode());
}
- if (userPictureNum > 0) {
- codes.add(CurrentDesignPictureTypeEnum.USER_LIBRARY.getCode());
- }
- if (noPinPictureNum > 0) {
+
+ if (noPinSketchNum > 0) {
codes.add(CurrentDesignPictureTypeEnum.NO_PIN.getCode());
}
List pictureTypeEnums = CurrentDesignPictureTypeEnum.ofList(codes);
@@ -491,6 +515,494 @@ public class PythonService {
return items;
}
+ private List coverToDesignPythonItemNew(ValidateElementVO elementVO, CurrentDesignPictureTypeEnum designPictureType, BigDecimal systemScale) {
+ List itemList = new ArrayList<>();
+ // 根据当前designPictureType确定单一部位的sketch
+ DesignPythonItem designPythonItem = calculatePythonItem(elementVO, designPictureType);
+ if (Objects.nonNull(designPythonItem)) {
+ itemList.add(designPythonItem);
+ if (elementVO.getSingleOverall().equals(SingleOverallEnum.OVERALL.getRealName())) {
+ // 根据确定的单一部位sketch,确定一整套穿搭
+ List otherSketchCategoryList = getOtherSketchCategoryList(elementVO.getModelSex(), designPythonItem);
+ if (!CollectionUtils.isEmpty(otherSketchCategoryList)) {
+ JSONObject attributeRecognition = getAttributeRecognition(designPythonItem, designPythonItem.getType(), elementVO.getModelSex());
+ for (String styleCategory : otherSketchCategoryList) {
+ DesignPythonItem otherSketch = processAttributeRecognition(attributeRecognition, elementVO, designPictureType, styleCategory, systemScale);
+ itemList.add(otherSketch);
+ }
+ }
+ itemList.addAll(calculatePythonItemHairstyleShoes(elementVO, elementVO.getDesignLibraryModelPoint()));
+ }
+ }
+ return itemList;
+ }
+
+ private DesignPythonItem processAttributeRecognition(JSONObject attributeRecognition, ValidateElementVO elementVO, CurrentDesignPictureTypeEnum designPictureType, String styleCategory, BigDecimal systemScale) {
+ switch (designPictureType) {
+ case PIN: {
+ // 优先去pin里面找符合类别的
+ List collectPin = elementVO.getSketchBoardElements().stream().filter(o -> o.getHasPin() == 1 && o.getLevel2Type().equals(styleCategory)).collect(Collectors.toList());
+ if (CollectionUtil.isNotEmpty(collectPin)) {
+ int randomNum = RandomsUtil.randomSysFile(collectPin.size());
+ elementVO.getHasUseMd5List().add(collectPin.get(randomNum).getMd5());
+ return coverSketchToDesignPythonItem(collectPin.get(randomNum).getId(), collectPin.get(randomNum), elementVO);
+ }else {
+ // 找不到就根据特征找一个系统池子,与noPinSketch组成一个池子,如果没有noPinSketch就只由系统池子作为池子。
+ List collectNoPin = elementVO.getSketchBoardElements().stream().filter(o -> o.getHasPin() == 0 && o.getLevel2Type().equals(styleCategory)).collect(Collectors.toList());
+ int poolNum = 20;
+ if (CollectionUtil.isNotEmpty(collectNoPin)) {
+ int collectionNoPinSize = collectNoPin.size();
+ if (systemScale.compareTo(BigDecimal.ZERO) == 0) {
+ int randomNum = RandomsUtil.randomSysFile(collectNoPin.size());
+ return coverSketchToDesignPythonItem(null, collectNoPin.get(randomNum), elementVO);
+ }else if (systemScale.compareTo(BigDecimal.ONE) != 0) {
+ BigDecimal collectNoPinSize = BigDecimal.valueOf(collectNoPin.size());
+ poolNum = collectNoPinSize.divide(systemScale, 0, RoundingMode.DOWN).intValue();
+ List list = getSystemSketchPool(attributeRecognition, styleCategory, elementVO.getModelSex(), poolNum);
+ collectNoPin.addAll(list);
+ int randomNum = RandomsUtil.randomSysFile(collectNoPin.size());
+ if (randomNum < collectionNoPinSize) {
+ return coverSketchToDesignPythonItem(collectNoPin.get(randomNum).getId(), collectNoPin.get(randomNum), elementVO);
+ }else {
+ return coverSketchToDesignPythonItem(null, collectNoPin.get(randomNum), elementVO);
+ }
+ }
+ }
+ List list = getSystemSketchPool(attributeRecognition, styleCategory, elementVO.getModelSex(), poolNum);
+ int randomNum = RandomsUtil.randomSysFile(list.size());
+ return coverSketchToDesignPythonItem(null, list.get(randomNum), elementVO);
+ }
+ }
+ case NO_PIN:
+ case SYS_FILE: {
+ List collectNoPin = elementVO.getSketchBoardElements().stream().filter(o -> o.getHasPin() == 0 && o.getLevel2Type().equals(styleCategory)).collect(Collectors.toList());
+ int poolNum = 20;
+ if (CollectionUtil.isNotEmpty(collectNoPin)) {
+ int collectionNoPinSize = collectNoPin.size();
+ if (systemScale.compareTo(BigDecimal.ZERO) == 0) {
+ int randomNum = RandomsUtil.randomSysFile(collectNoPin.size());
+ return coverSketchToDesignPythonItem(null, collectNoPin.get(randomNum), elementVO);
+ }else if (systemScale.compareTo(BigDecimal.ONE) != 0) {
+ BigDecimal collectNoPinSize = BigDecimal.valueOf(collectNoPin.size());
+ poolNum = collectNoPinSize.divide(systemScale, 0, RoundingMode.DOWN).intValue();
+ List list = getSystemSketchPool(attributeRecognition, styleCategory, elementVO.getModelSex(), poolNum);
+ collectNoPin.addAll(list);
+ int randomNum = RandomsUtil.randomSysFile(collectNoPin.size());
+ if (randomNum < collectionNoPinSize) {
+ return coverSketchToDesignPythonItem(collectNoPin.get(randomNum).getId(), collectNoPin.get(randomNum), elementVO);
+ }else {
+ return coverSketchToDesignPythonItem(null, collectNoPin.get(randomNum), elementVO);
+ }
+ }
+ }
+ List list = getSystemSketchPool(attributeRecognition, styleCategory, elementVO.getModelSex(), poolNum);
+ int randomNum = RandomsUtil.randomSysFile(list.size());
+ return coverSketchToDesignPythonItem(null, list.get(randomNum), elementVO);
+ }
+ default:
+ throw new BusinessException("unknown designPictureType");
+ }
+ }
+
+ private DesignPythonItem processAttributeRecognitionBySameCategory(JSONObject attributeRecognition, ValidateElementVO elementVO, String styleCategory) {
+ List list = getSystemSketchPoolBySameCategory(attributeRecognition, styleCategory, elementVO.getModelSex());
+ int randomNum = RandomsUtil.randomSysFile(list.size());
+ return coverSketchToDesignPythonItem(null, list.get(randomNum), elementVO);
+ }
+
+ @Resource
+ private AttributeRetrievalMapper attributeRetrievalMapper;
+ private List getSystemSketchPool(JSONObject attributeRecognition, String styleCategory, String modelSex, int poolNum) {
+ /**
+ * female trousers->female_pants
+ * female blouse->female_top
+ * female skirt->female_skirt
+ * female outwear->female_outwear
+ * female dress->female_dress
+ */
+ JSONObject data = attributeRecognition.getJSONObject("data");
+ JSONObject attrDict = ((JSONObject) data.getJSONArray("list").get(0)).getJSONObject("attr_dict");
+ AttributeRecognitionJSON attrDictJSON = attrDict.toJavaObject(AttributeRecognitionJSON.class);
+ AttributeRetrieval attributeRetrievalAttrDict = toAttrDict(attrDictJSON);
+ String tableName;
+ tableName = getTableName(modelSex, styleCategory);
+ List attributeRetrievalList = attributeRetrievalMapper.getSystemSketchPool(attributeRetrievalAttrDict, tableName, poolNum);
+ if (CollectionUtil.isEmpty(attributeRetrievalList) || attributeRetrievalList.size() < poolNum) {
+ attributeRetrievalAttrDict.setDesign(null);
+ attributeRetrievalList = attributeRetrievalMapper.getSystemSketchPool(attributeRetrievalAttrDict, tableName, poolNum);
+ }
+ if (CollectionUtil.isEmpty(attributeRetrievalList) || attributeRetrievalList.size() < poolNum) {
+ attributeRetrievalAttrDict.setSilhouette(null);
+ attributeRetrievalList = attributeRetrievalMapper.getSystemSketchPool(attributeRetrievalAttrDict, tableName, poolNum);
+ }
+ return toColoectionElementList(attributeRetrievalList, styleCategory, modelSex);
+ }
+
+ private List getSystemSketchPoolBySameCategory(JSONObject attributeRecognition, String styleCategory, String modelSex) {
+ /**
+ * female trousers->female_pants
+ * female blouse->female_top
+ * female skirt->female_skirt
+ * female outwear->female_outwear
+ * female dress->female_dress
+ */
+ JSONObject data = attributeRecognition.getJSONObject("data");
+ JSONObject attrDict = ((JSONObject) data.getJSONArray("list").get(0)).getJSONObject("attr_dict");
+ AttributeRecognitionJSON attrDictJSON = attrDict.toJavaObject(AttributeRecognitionJSON.class);
+ AttributeRetrieval attributeRetrievalAttrDict = toAttrDict(attrDictJSON);
+ String tableName;
+ tableName = getTableName(modelSex, styleCategory);
+
+ // 存储非空字段的列表
+ List nonNullFields = new ArrayList<>();
+ if (attributeRetrievalAttrDict.getType() != null) nonNullFields.add("type");
+ if (attributeRetrievalAttrDict.getOpeningType() != null) nonNullFields.add("openingType");
+ if (attributeRetrievalAttrDict.getSubtype() != null) nonNullFields.add("subtype");
+
+ // 只有当非空字段数量大于等于2时才进行处理
+ if (nonNullFields.size() >= 2) {
+ // 随机数生成器
+ Random random = new Random();
+ // 随机选择一个字段保留
+ String fieldToKeep = nonNullFields.get(random.nextInt(nonNullFields.size()));
+
+ // 设置保留的字段为非null,其他字段为null
+ for (String field : nonNullFields) {
+ if (!field.equals(fieldToKeep)) {
+ switch (field) {
+ case "type":
+ attributeRetrievalAttrDict.setType(null);
+ break;
+ case "openingType":
+ attributeRetrievalAttrDict.setOpeningType(null);
+ break;
+ case "subtype":
+ attributeRetrievalAttrDict.setSubtype(null);
+ break;
+ }
+ }
+ }
+ }
+
+ List attributeRetrievalList = attributeRetrievalMapper.getSystemSketchPoolBySameCategory(attributeRetrievalAttrDict, tableName);
+ if (CollectionUtil.isEmpty(attributeRetrievalList)) {
+ System.out.println(attributeRetrievalAttrDict);
+ System.out.println(tableName);
+ }
+ return toColoectionElementList(attributeRetrievalList, styleCategory, modelSex);
+ }
+
+ private List toColoectionElementList(List attributeRetrievalList, String styleCategory, String modelSex) {
+ List systemPool = new ArrayList<>();
+ for (AttributeRetrieval attributeRetrieval : attributeRetrievalList) {
+ CollectionElement system = toCollectionElement(attributeRetrieval, styleCategory, modelSex);
+ systemPool.add(system);
+ }
+ return systemPool;
+ }
+
+ private CollectionElement toCollectionElement(AttributeRetrieval attributeRetrieval, String styleCategory, String modelSex) {
+ CollectionElement element = new CollectionElement();
+ element.setLevel2Type(styleCategory);
+ element.setUrl("aida-sys-image/images/" + modelSex.toLowerCase() + "/" + attributeRetrieval.getImgName());
+ if (element.getUrl().contains("top")) {
+ element.setUrl(element.getUrl().replace("top", "tops"));
+ }
+ if (element.getUrl().contains("bottom")) {
+ element.setUrl(element.getUrl().replace("bottom", "bottoms"));
+ }
+ if (element.getUrl().contains("outer")) {
+ element.setUrl(element.getUrl().replace("outer", "outwear"));
+ }
+ return element;
+ }
+
+ private AttributeRetrieval toAttrDict(AttributeRecognitionJSON attrDictJSON) {
+ AttributeRetrieval attributeRetrieval = new AttributeRetrieval();
+// attributeRetrieval.setImgName(attrDictJSON.getImgName().get(0));
+// attributeRetrieval.setLength(attrDictJSON.getLength().get(0));
+// attributeRetrieval.setSleeveLength(attrDictJSON.getSleeveLength().get(0));
+// attributeRetrieval.setSleeveShape(attrDictJSON.getSleeveShape().get(0));
+// attributeRetrieval.setSleeveShoulder(attrDictJSON.getSleeveShoulder().get(0));
+// attributeRetrieval.setNeckline(attrDictJSON.getNeckline().get(0));
+// attributeRetrieval.setCollar(attrDictJSON.getCollar().get(0));
+ if (CollectionUtil.isNotEmpty(attrDictJSON.getDesign()) && attrDictJSON.getDesign().get(0) != null) {
+ attributeRetrieval.setDesign(attrDictJSON.getDesign().get(0));
+ }
+ if (CollectionUtil.isNotEmpty(attrDictJSON.getSilhouette()) && attrDictJSON.getSilhouette().get(0) != null) {
+ attributeRetrieval.setSilhouette(attrDictJSON.getSilhouette().get(0));
+ }
+ if (CollectionUtil.isNotEmpty(attrDictJSON.getType()) && attrDictJSON.getType().get(0) != null) {
+ attributeRetrieval.setType(attrDictJSON.getType().get(0));
+ }
+ if (CollectionUtil.isNotEmpty(attrDictJSON.getSubtype()) && attrDictJSON.getSubtype().get(0) != null) {
+ attributeRetrieval.setSubtype(attrDictJSON.getSubtype().get(0));
+ }
+ if (CollectionUtil.isNotEmpty(attrDictJSON.getOpeningType()) && attrDictJSON.getOpeningType().get(0) != null) {
+ attributeRetrieval.setOpeningType(attrDictJSON.getOpeningType().get(0));
+ }
+ return attributeRetrieval;
+ }
+
+ public JSONObject getAttributeRecognition(DesignPythonItem designPythonItem, String styleCategory, String modelSex) {
+ // todo 限流校验
+// 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 现象
+ JSONObject paramJSONObject = new JSONObject();
+ paramJSONObject.put("category", styleCategory);
+ paramJSONObject.put("colony", modelSex);
+ paramJSONObject.put("sketch_img_url", designPythonItem.getPath());
+ JSONArray paramArray = new JSONArray();
+ paramArray.add(paramJSONObject);
+ String param = JSON.toJSONString(paramArray, SerializerFeature.DisableCircularReferenceDetect);
+ log.info("design请求python 参数:####{}", param);
+ RequestBody body = RequestBody.create(mediaType, param);
+ Request request = new Request.Builder()
+ .url(accessPythonIp + ":" + accessPythonPort + "/api/attribute_recognition")
+ .method("POST", body)
+// .addHeader("Authorization", "Basic YWlkbGFiOjEyMw==")
+ .addHeader("Content-Type", "application/json")
+ .build();
+ Response response;
+ String responseBody;
+ try {
+ response = client.newCall(request).execute();
+ } catch (IOException ioException) {
+ AccessLimitUtils.validateOut("design");
+ log.error("PythonService##design异常###{}", ExceptionUtil.getThrowableList(ioException));
+ throw new BusinessException("design.interface.exception");
+ }
+ //去除限流
+// AccessLimitUtils.validateOut("design");
+ if (response.isSuccessful()) {
+ try {
+ if (Objects.nonNull(response.body())) {
+ responseBody = response.body().string();
+ JSONObject responseObject = JSON.parseObject(responseBody);
+ log.info("PythonService##responseObject###{}", responseObject);
+ return responseObject;
+ }
+ throw new BusinessException("design.interface.exception");
+ } catch (IOException | JSONException e) {
+ log.error("PythonService##design异常###{}", e.getMessage());
+ throw new BusinessException("design.interface.exception");
+ }
+ }
+ log.error("PythonService##design异常response###{}", response);
+ //生成失败
+ throw new BusinessException("design.interface.exception");
+ }
+
+ public JSONObject getAttributeRecognitionBySameCategory(CollectionElement element, String modelSex) {
+ // todo 限流校验
+// 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 现象
+ JSONObject paramJSONObject = new JSONObject();
+ paramJSONObject.put("category", element.getLevel2Type());
+ paramJSONObject.put("colony", modelSex);
+ paramJSONObject.put("sketch_img_url", element.getUrl());
+ JSONArray paramArray = new JSONArray();
+ paramArray.add(paramJSONObject);
+ String param = JSON.toJSONString(paramArray, SerializerFeature.DisableCircularReferenceDetect);
+ log.info("design请求python 参数:####{}", param);
+ RequestBody body = RequestBody.create(mediaType, param);
+ Request request = new Request.Builder()
+ .url(accessPythonIp + ":" + accessPythonPort + "/api/attribute_recognition")
+ .method("POST", body)
+// .addHeader("Authorization", "Basic YWlkbGFiOjEyMw==")
+ .addHeader("Content-Type", "application/json")
+ .build();
+ Response response;
+ String responseBody;
+ try {
+ response = client.newCall(request).execute();
+ } catch (IOException ioException) {
+ AccessLimitUtils.validateOut("design");
+ log.error("PythonService##design异常###{}", ExceptionUtil.getThrowableList(ioException));
+ throw new BusinessException("design.interface.exception");
+ }
+ //去除限流
+// AccessLimitUtils.validateOut("design");
+ if (response.isSuccessful()) {
+ try {
+ if (Objects.nonNull(response.body())) {
+ responseBody = response.body().string();
+ JSONObject responseObject = JSON.parseObject(responseBody);
+ log.info("PythonService##responseObject###{}", responseObject);
+ return responseObject;
+ }
+ throw new BusinessException("design.interface.exception");
+ } catch (IOException | JSONException e) {
+ log.error("PythonService##design异常###{}", e.getMessage());
+ throw new BusinessException("design.interface.exception");
+ }
+ }
+ log.error("PythonService##design异常response###{}", response);
+ //生成失败
+ throw new BusinessException("design.interface.exception");
+ }
+
+ @Resource
+ private CollocationMapper collocationMapper;
+ @Resource
+ private DressingMapper dressingMapper;
+ private List getOtherSketchCategoryList(String modelSex, DesignPythonItem designPythonItem) {
+ List collocationList = collocationMapper.getCollocationListBySketch(modelSex, designPythonItem.getType());
+ if (CollectionUtil.isNotEmpty(collocationList)) {
+ Random random = new Random();
+ int randomNumber = random.nextInt(collocationList.size());
+ List otherSketchCategoryList = dressingMapper.getOtherSketchCategoryNameList(collocationList.get(randomNumber).getId(), designPythonItem.getType().toLowerCase());
+ return otherSketchCategoryList;
+ }
+ return null;
+ }
+
+ private DesignPythonItem calculatePythonItem(ValidateElementVO elementVO, CurrentDesignPictureTypeEnum designPictureType) {
+ switch (designPictureType) {
+ case PIN: {
+ List pinData = getPinData(elementVO);
+ if (CollectionUtil.isEmpty(pinData)) {
+ throw new BusinessException("pinData is null");
+ }
+ Random random = new Random();
+ int randomNumber = random.nextInt(pinData.size());
+ elementVO.getHasUseMd5List().add(pinData.get(randomNumber).getMd5());
+ return coverSketchToDesignPythonItem(pinData.get(randomNumber).getId(), pinData.get(randomNumber), elementVO);
+ }
+ case NO_PIN: {
+ List noPinData = getNoPinData(elementVO);
+ if (CollectionUtil.isEmpty(noPinData)) {
+ // 根据pin的获取 type
+ List sketchBoardPins = elementVO.getSketchBoardElements()
+ .stream().filter(v -> v.getHasPin() == 1).collect(Collectors.toList());
+ if (elementVO.getSingleOverall().equals(SingleOverallEnum.SINGLE.getRealName())) {
+ sketchBoardPins = sketchBoardPins.stream().filter(o -> o.getLevel2Type().equals(elementVO.getSwitchCategory())).collect(Collectors.toList());
+ }
+ if (CollectionUtil.isNotEmpty(sketchBoardPins)) {
+ Integer randomNum = RandomsUtil.randomSysFile(sketchBoardPins.size());
+ CollectionElement element = sketchBoardPins.get(randomNum);
+ JSONObject attributeRecognition = getAttributeRecognitionBySameCategory(element, elementVO.getModelSex());
+ return processAttributeRecognitionBySameCategory(attributeRecognition, elementVO, element.getLevel2Type());
+ }
+
+ QueryWrapper qw = new QueryWrapper<>();
+ qw.lambda().eq(Dressing::getApparel, elementVO.getModelSex());
+ if (elementVO.getSingleOverall().equals(SingleOverallEnum.SINGLE.getRealName())) {
+ qw.lambda().eq(Dressing::getApparel, elementVO.getSwitchCategory());
+ }
+ List dressings = dressingMapper.selectList(qw);
+ if (CollectionUtil.isEmpty(dressings)) {
+ throw new BusinessException("dressings is null");
+ }
+ Integer randomNum = RandomsUtil.randomSysFile(dressings.size());
+ String category = dressings.get(randomNum).getStyleCategory();
+ String tableName;
+ tableName = getTableName(elementVO.getModelSex(), category);
+
+ AttributeRetrieval attributeRetrieval = attributeRetrievalMapper.getSystemRandom(tableName);
+ CollectionElement collectionElement = toCollectionElement(attributeRetrieval, category, elementVO.getModelSex());
+ return coverSketchToDesignPythonItem(null, collectionElement, elementVO);
+ }
+ Random random = new Random();
+ int randomNumber = random.nextInt(noPinData.size());
+ return coverSketchToDesignPythonItem(noPinData.get(randomNumber).getId(), noPinData.get(randomNumber), elementVO);
+ }
+ case SYS_FILE: {
+ // 根据pin noPin的获取 type
+ List sketchBoardPins = elementVO.getSketchBoardElements();
+ if (elementVO.getSingleOverall().equals(SingleOverallEnum.SINGLE.getRealName())) {
+ sketchBoardPins = sketchBoardPins.stream().filter(o -> o.getLevel2Type().equals(elementVO.getSwitchCategory())).collect(Collectors.toList());
+ }
+ if (CollectionUtil.isNotEmpty(sketchBoardPins)) {
+ Integer randomNum = RandomsUtil.randomSysFile(sketchBoardPins.size());
+ CollectionElement element = sketchBoardPins.get(randomNum);
+ JSONObject attributeRecognition = getAttributeRecognitionBySameCategory(element, elementVO.getModelSex());
+ return processAttributeRecognitionBySameCategory(attributeRecognition, elementVO, element.getLevel2Type());
+ }
+
+ QueryWrapper qw = new QueryWrapper<>();
+ qw.lambda().eq(Dressing::getApparel, elementVO.getModelSex());
+ if (elementVO.getSingleOverall().equals(SingleOverallEnum.SINGLE.getRealName())) {
+ qw.lambda().eq(Dressing::getApparel, elementVO.getSwitchCategory());
+ }
+ List dressings = dressingMapper.selectList(qw);
+ if (CollectionUtil.isEmpty(dressings)) {
+ throw new BusinessException("dressings is null");
+ }
+ Integer randomNum = RandomsUtil.randomSysFile(dressings.size());
+ String category = dressings.get(randomNum).getStyleCategory();
+ String tableName;
+ tableName = getTableName(elementVO.getModelSex(), category);
+
+ AttributeRetrieval attributeRetrieval = attributeRetrievalMapper.getSystemRandom(tableName);
+ CollectionElement collectionElement = toCollectionElement(attributeRetrieval, category, elementVO.getModelSex());
+ return coverSketchToDesignPythonItem(null, collectionElement, elementVO);
+ }
+ default:
+ return null;
+ }
+ }
+
+ private String getTableName(String modelSex, String category) {
+ switch (modelSex) {
+ case "Female": {
+ switch (category) {
+ case "Blouse": {
+ return "female_top";
+ }
+ case "Trousers": {
+ return "female_pants";
+ }
+ case "Skirt": {
+ return "female_skirt";
+ }
+ case "Outwear": {
+ return "female_outwear";
+ }
+ case "Dress": {
+ return "female_dress";
+ }
+ default: {
+ throw new BusinessException("unknown attributeRetrieval dressing");
+ }
+ }
+ }
+ case "Male": {
+ switch (category) {
+ case "Tops": {
+ return "male_top";
+ }
+ case "Bottoms": {
+ return "male_bottom";
+ }
+ case "Outwear": {
+ return "male_outwear";
+ }
+ default: {
+ throw new BusinessException("unknown male dressing");
+ }
+ }
+ }
+ default: {
+ throw new BusinessException("unknown modelSex");
+ }
+ }
+ }
+
private DesignPythonItem calculatePythonItemOutwear(List pinData, ValidateElementVO elementVO, CurrentDesignPictureTypeEnum designPictureType) {
DesignPythonItem outwear = null;
//剩余的的PinData
@@ -568,39 +1080,39 @@ public class PythonService {
}
}
break;
- case USER_LIBRARY:
- //single模式
- if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
- if (DesignPythonItem.OUTWEAR.contains(elementVO.getSwitchCategory())) {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
- outwear = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- outwear.setBusinessId(sysFileVO.getId());
- return outwear;
- }
- outwear = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- outwear.setBusinessId(libraryVo.getId());
- }
- } else {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- DesignPythonItem.OUTWEAR, elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileMaleBottoms(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
- outwear = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- outwear.setBusinessId(sysFileVO.getId());
- //添加已使用的md5
- return outwear;
- }
- outwear = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- outwear.setBusinessId(libraryVo.getId());
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- }
- break;
+// case USER_LIBRARY:
+// //single模式
+// if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
+// if (DesignPythonItem.OUTWEAR.contains(elementVO.getSwitchCategory())) {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// outwear = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// outwear.setBusinessId(sysFileVO.getId());
+// return outwear;
+// }
+// outwear = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// outwear.setBusinessId(libraryVo.getId());
+// }
+// } else {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// DesignPythonItem.OUTWEAR, elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileMaleBottoms(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// outwear = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// outwear.setBusinessId(sysFileVO.getId());
+// //添加已使用的md5
+// return outwear;
+// }
+// outwear = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// outwear.setBusinessId(libraryVo.getId());
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// }
+// break;
case SYS_FILE:
//single模式
if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
@@ -735,39 +1247,39 @@ public class PythonService {
}
}
break;
- case USER_LIBRARY:
- //single模式
- if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
- if (DesignPythonItem.BOTTOMS.contains(elementVO.getSwitchCategory())) {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
- bottom = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- bottom.setBusinessId(sysFileVO.getId());
- return bottom;
- }
- bottom = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- bottom.setBusinessId(libraryVo.getId());
- }
- } else {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- DesignPythonItem.BOTTOMS, elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileMaleBottoms(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
- bottom = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- bottom.setBusinessId(sysFileVO.getId());
- //添加已使用的md5
- return bottom;
- }
- bottom = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- bottom.setBusinessId(libraryVo.getId());
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- }
- break;
+// case USER_LIBRARY:
+// //single模式
+// if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
+// if (DesignPythonItem.BOTTOMS.contains(elementVO.getSwitchCategory())) {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// bottom = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// bottom.setBusinessId(sysFileVO.getId());
+// return bottom;
+// }
+// bottom = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// bottom.setBusinessId(libraryVo.getId());
+// }
+// } else {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// DesignPythonItem.BOTTOMS, elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileMaleBottoms(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// bottom = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// bottom.setBusinessId(sysFileVO.getId());
+// //添加已使用的md5
+// return bottom;
+// }
+// bottom = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// bottom.setBusinessId(libraryVo.getId());
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// }
+// break;
case SYS_FILE:
//single模式
if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
@@ -902,39 +1414,39 @@ public class PythonService {
}
}
break;
- case USER_LIBRARY:
- //single模式
- if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
- if (DesignPythonItem.TOPS.contains(elementVO.getSwitchCategory())) {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
- top = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- top.setBusinessId(sysFileVO.getId());
- return top;
- }
- top = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- top.setBusinessId(libraryVo.getId());
- }
- } else {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- DesignPythonItem.TOPS, elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileMaleTops(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
- top = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- top.setBusinessId(sysFileVO.getId());
- //添加已使用的md5
- return top;
- }
- top = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- top.setBusinessId(libraryVo.getId());
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- }
- break;
+// case USER_LIBRARY:
+// //single模式
+// if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
+// if (DesignPythonItem.TOPS.contains(elementVO.getSwitchCategory())) {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// top = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// top.setBusinessId(sysFileVO.getId());
+// return top;
+// }
+// top = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// top.setBusinessId(libraryVo.getId());
+// }
+// } else {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// DesignPythonItem.TOPS, elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileMaleTops(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// top = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// top.setBusinessId(sysFileVO.getId());
+// //添加已使用的md5
+// return top;
+// }
+// top = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// top.setBusinessId(libraryVo.getId());
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// }
+// break;
case SYS_FILE:
//single模式
if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
@@ -1105,39 +1617,39 @@ public class PythonService {
}
}
break;
- case USER_LIBRARY:
- //single模式
- if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
- if (DesignPythonItem.SKIRT_TROUSERS.contains(elementVO.getSwitchCategory())) {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
- skirt = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- skirt.setBusinessId(sysFileVO.getId());
- return skirt;
- }
- skirt = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- skirt.setBusinessId(libraryVo.getId());
- }
- } else {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- DesignPythonItem.SKIRT_TROUSERS, elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileSkirt(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
- skirt = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- skirt.setBusinessId(sysFileVO.getId());
- //添加已使用的md5
- return skirt;
- }
- skirt = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- skirt.setBusinessId(libraryVo.getId());
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- }
- break;
+// case USER_LIBRARY:
+// //single模式
+// if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
+// if (DesignPythonItem.SKIRT_TROUSERS.contains(elementVO.getSwitchCategory())) {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// skirt = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// skirt.setBusinessId(sysFileVO.getId());
+// return skirt;
+// }
+// skirt = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// skirt.setBusinessId(libraryVo.getId());
+// }
+// } else {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// DesignPythonItem.SKIRT_TROUSERS, elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileSkirt(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// skirt = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// skirt.setBusinessId(sysFileVO.getId());
+// //添加已使用的md5
+// return skirt;
+// }
+// skirt = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// skirt.setBusinessId(libraryVo.getId());
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// }
+// break;
case SYS_FILE:
//single模式
if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
@@ -1276,42 +1788,42 @@ public class PythonService {
}
}
break;
- case USER_LIBRARY:
- //single模式
- if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
- if (DesignPythonItem.OUTWEAR_DRESS_BLOUSE.contains(elementVO.getSwitchCategory())) {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
- DesignPythonItem item = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- item.setBusinessId(sysFileVO.getId());
- items.add(item);
- return items;
- }
- DesignPythonItem item = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- item.setBusinessId(libraryVo.getId());
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- items.add(item);
- }
- } else {
- LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
- DesignPythonItem.OUTWEAR_DRESS_BLOUSE, elementVO.getHasUseMd5List());
- if (StringUtils.isEmpty(libraryVo)) {
- //系统获取
- SysFileVO sysFileVO = getRandomSysFileOutwear(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
- DesignPythonItem item = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
- item.setBusinessId(sysFileVO.getId());
- items.add(item);
- return items;
- }
- DesignPythonItem item = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
- item.setBusinessId(libraryVo.getId());
- elementVO.getHasUseMd5List().add(libraryVo.getMd5());
- items.add(item);
- }
- break;
+// case USER_LIBRARY:
+// //single模式
+// if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
+// if (DesignPythonItem.OUTWEAR_DRESS_BLOUSE.contains(elementVO.getSwitchCategory())) {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// Arrays.asList(elementVO.getSwitchCategory()), elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileByLevel2Type(elementVO.getSwitchCategory(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// DesignPythonItem item = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// item.setBusinessId(sysFileVO.getId());
+// items.add(item);
+// return items;
+// }
+// DesignPythonItem item = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// item.setBusinessId(libraryVo.getId());
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// items.add(item);
+// }
+// } else {
+// LibraryVo libraryVo = getRandomLibrary(elementVO.getLibraryVos(),
+// DesignPythonItem.OUTWEAR_DRESS_BLOUSE, elementVO.getHasUseMd5List());
+// if (StringUtils.isEmpty(libraryVo)) {
+// //系统获取
+// SysFileVO sysFileVO = getRandomSysFileOutwear(elementVO.getSysFileVo(), elementVO.getSysFileIds(), elementVO.getModelSex());
+// DesignPythonItem item = coverToDesignPythonItem(null, sysFileVO.getLevel2Type(), sysFileVO.getUrl(), elementVO);
+// item.setBusinessId(sysFileVO.getId());
+// items.add(item);
+// return items;
+// }
+// DesignPythonItem item = coverToDesignPythonItem(null, libraryVo.getLevel2Type(), libraryVo.getUrl(), elementVO);
+// item.setBusinessId(libraryVo.getId());
+// elementVO.getHasUseMd5List().add(libraryVo.getMd5());
+// items.add(item);
+// }
+// break;
case SYS_FILE:
//single模式
if (SingleOverallEnum.SINGLE.getRealName().equals(elementVO.getSingleOverall())) {
@@ -1399,6 +1911,32 @@ public class PythonService {
return designPythonItemBlouse;
}
+ private DesignPythonItem coverSketchToDesignPythonItem(Long elementId, CollectionElement collectionElement, ValidateElementVO elementVO) {
+ DesignPythonItem designPythonItemBlouse = new DesignPythonItem();
+ if (Objects.nonNull(elementId)) {
+ designPythonItemBlouse.setElementId(elementId);
+ designPythonItemBlouse.setBusinessId(elementId);
+ }
+ designPythonItemBlouse.setType(collectionElement.getLevel2Type());
+ designPythonItemBlouse.setPath(collectionElement.getUrl());
+ //所有的icon都是none
+ designPythonItemBlouse.setIcon("none");
+ designPythonItemBlouse.setColor(getRandomColor(elementVO.getColorBoards()));
+ if (!elementVO.getDesignPythonItemPrint().getPath().equals("none")
+ && elementVO.getDesignPrintPictureTypeLayoutList().contains(collectionElement.getLevel2Type())) {
+ DesignPythonItemPrint designPythonItemPrint = CopyUtil.copyObject(elementVO.getDesignPythonItemPrint(), DesignPythonItemPrint.class);
+ designPythonItemPrint.setIfSingle(false);
+ designPythonItemPrint.setPrint_path_list(Collections.singletonList(designPythonItemPrint.getPath()));
+ designPythonItemBlouse.setPrint(designPythonItemPrint);
+ } else {
+ DesignPythonItemPrint designPythonItemPrint = new DesignPythonItemPrint();
+ designPythonItemPrint.setIfSingle(false);
+ designPythonItemPrint.setPrint_path_list(new ArrayList<>());
+ designPythonItemBlouse.setPrint(designPythonItemPrint);
+ }
+ return designPythonItemBlouse;
+ }
+
private List residuePinData(List pinData, List existPinDataIds, List hasUseMd5List) {
if (CollectionUtils.isEmpty(pinData)) {
return null;
@@ -1412,9 +1950,9 @@ public class PythonService {
DesignPythonBasic basic = new DesignPythonBasic();
basic.setSingle_overall(singleOverall);
basic.setSwitch_category(switchCategory);
- basic.setSave_name(getPythonOutputPath(
- StringUtils.isEmpty(designPythonItem.getPath()) ? designPythonItem.getBody_path() : designPythonItem.getPath(),
- PythonToJavaApiOperationTypeEnum.DESIGN_COLLECTION));
+// basic.setSave_name(getPythonOutputPath(
+// StringUtils.isEmpty(designPythonItem.getPath()) ? designPythonItem.getBody_path() : designPythonItem.getPath(),
+// PythonToJavaApiOperationTypeEnum.DESIGN_COLLECTION));
basic.setScale_bag(0.7);
basic.setSelf_template(Boolean.FALSE);
if (Objects.nonNull(designLibraryModelPoint)) {
@@ -1465,6 +2003,19 @@ public class PythonService {
return integerList;
}
+ private List getPinData(ValidateElementVO elementVO) {
+ List pinData = getPinData(elementVO.getSketchBoardElements(), elementVO.getHasUseMd5List());
+ if (elementVO.getSingleOverall().equals(SingleOverallEnum.SINGLE.getRealName())) {
+ if (!CollectionUtils.isEmpty(pinData)) {
+ return pinData.stream().filter(o -> o.getLevel2Type().equals(elementVO.getSwitchCategory())).collect(Collectors.toList());
+ }else {
+ return pinData;
+ }
+ }else {
+ return pinData;
+ }
+ }
+
private List getPinData(List sketchBoardElements, List hasUseMd5List) {
if (CollectionUtils.isEmpty(sketchBoardElements)) {
return null;
@@ -1474,11 +2025,31 @@ public class PythonService {
if (CollectionUtils.isEmpty(sketchBoardPins)) {
return null;
}
-// List response = resolveElementFilterHistoryMd5(sketchBoardPins);
-// if (CollectionUtils.isEmpty(response)) {
-// return null;
-// }
- return CopyUtil.copyList(sketchBoardPins, CollectionElement.class);
+ return sketchBoardPins;
+ }
+
+ private List getNoPinData(ValidateElementVO elementVO) {
+ if (elementVO.getSingleOverall().equals(SingleOverallEnum.SINGLE.getRealName())) {
+ List noPinData = getNoPinData(elementVO.getSketchBoardElements());
+ if (CollectionUtils.isEmpty(noPinData)) {
+ return null;
+ }
+ return noPinData.stream().filter(o -> o.getLevel2Type().equals(elementVO.getSwitchCategory())).collect(Collectors.toList());
+ }else {
+ return getNoPinData(elementVO.getSketchBoardElements());
+ }
+ }
+
+ private List getNoPinData(List sketchBoardElements) {
+ if (CollectionUtils.isEmpty(sketchBoardElements)) {
+ return null;
+ }
+ List sketchBoardPins = sketchBoardElements
+ .stream().filter(v -> v.getHasPin() == 0).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(sketchBoardPins)) {
+ return null;
+ }
+ return sketchBoardPins;
}
private List resolveElementFilterHistoryMd5(List elemet) {
diff --git a/src/main/java/com/ai/da/service/AccountService.java b/src/main/java/com/ai/da/service/AccountService.java
index d2982dd1..c00d2a4c 100644
--- a/src/main/java/com/ai/da/service/AccountService.java
+++ b/src/main/java/com/ai/da/service/AccountService.java
@@ -2,7 +2,6 @@ package com.ai.da.service;
import com.ai.da.mapper.primary.entity.Account;
import com.ai.da.mapper.primary.entity.TrialOrder;
-import com.ai.da.mapper.secondary.entity.FemaleDress;
import com.ai.da.model.dto.*;
import com.ai.da.model.vo.AccountLoginVO;
import com.ai.da.model.vo.AccountPreLoginVO;
diff --git a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java
index de53e544..38495eab 100644
--- a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java
+++ b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java
@@ -13,8 +13,6 @@ import com.ai.da.mapper.primary.TrialOrderMapper;
import com.ai.da.mapper.primary.entity.Account;
import com.ai.da.mapper.primary.entity.AccountLoginLog;
import com.ai.da.mapper.primary.entity.TrialOrder;
-import com.ai.da.mapper.secondary.FemaleDressMapper;
-import com.ai.da.mapper.secondary.entity.FemaleDress;
import com.ai.da.model.dto.*;
import com.ai.da.model.enums.AutoApproved;
import com.ai.da.model.enums.Language;
@@ -32,7 +30,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
diff --git a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java
index 095db937..14a16046 100644
--- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java
+++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java
@@ -5,11 +5,11 @@ import com.ai.da.common.context.UserContext;
import com.ai.da.common.enums.GenerateModeEnum;
import com.ai.da.common.enums.ModelNameEnum;
import com.ai.da.common.utils.*;
-import com.ai.da.mapper.CollectionElementMapper;
-import com.ai.da.mapper.GenerateCancelMapper;
-import com.ai.da.mapper.GenerateDetailMapper;
-import com.ai.da.mapper.GenerateMapper;
-import com.ai.da.mapper.entity.*;
+import com.ai.da.mapper.primary.CollectionElementMapper;
+import com.ai.da.mapper.primary.GenerateCancelMapper;
+import com.ai.da.mapper.primary.GenerateDetailMapper;
+import com.ai.da.mapper.primary.GenerateMapper;
+import com.ai.da.mapper.primary.entity.*;
import com.ai.da.model.dto.GenerateLikeDTO;
import com.ai.da.model.dto.GenerateThroughImageTextDTO;
import com.ai.da.model.dto.GenerateToPythonDTO;
diff --git a/src/main/java/com/ai/da/service/impl/LibraryServiceImpl.java b/src/main/java/com/ai/da/service/impl/LibraryServiceImpl.java
index 7b3874f1..d9c10610 100644
--- a/src/main/java/com/ai/da/service/impl/LibraryServiceImpl.java
+++ b/src/main/java/com/ai/da/service/impl/LibraryServiceImpl.java
@@ -12,8 +12,7 @@ import com.ai.da.common.utils.CopyUtil;
import com.ai.da.common.utils.DateUtil;
import com.ai.da.common.utils.FileUtil;
import com.ai.da.common.utils.MinioUtil;
-import com.ai.da.mapper.primary.LibraryMapper;
-import com.ai.da.mapper.primary.SysFileMapper;
+import com.ai.da.mapper.primary.*;
import com.ai.da.mapper.primary.entity.*;
import com.ai.da.model.dto.*;
import com.ai.da.model.enums.*;
diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties
index 55672070..4e41f8a4 100644
--- a/src/main/resources/application-dev.properties
+++ b/src/main/resources/application-dev.properties
@@ -1,11 +1,16 @@
-server.port=5567
+server.port=17088
+
+spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.primary.jdbcUrl=jdbc:mysql://18.167.251.121:33008/aida?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+spring.datasource.primary.username=aida_con
+spring.datasource.primary.password=123456
+
+spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.secondary.jdbcUrl=jdbc:mysql://18.167.251.121:33008/attribute_retrieval?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+spring.datasource.secondary.username=aida_con
+spring.datasource.secondary.password=123456
+
-#datasource
-spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.url=jdbc:mysql://18.167.251.121:33008/aida?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
-spring.datasource.username=aida_con
-spring.datasource.password=123456
-#spring.datasource.password=QWa998345
#security
spring.security.jwtSecret=JWTSECRET
@@ -23,8 +28,7 @@ rsa.private_key=MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8
#mybatis
mybatis-plus.global-config.banner=false
-mybatis-plus.mapper-locations=classpath:mapper/*Mapper.xml
-#mybatis-plus.configuration.log-impl= org.apache.ibatis.logging.stdout.StdOutImpl
+mybatis-plus.mapper-locations=classpath:mapper/*/*.xml
mybatis-plus.global-config.db-config.logic-delete-field=isDeleted
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
@@ -39,10 +43,8 @@ file.windows.path=D:\\upload\\
spring.servlet.multipart.max-file-size = 10MB
spring.servlet.multipart.max-request-size= 10MB
#访问python服务的ip(对应环境)
-#access.python.ip=http://43.198.80.117
access.python.ip=http://18.167.251.121
-#access.python.ip=http://18.167.251.121:9991/
-access.python.port=9990
+access.python.port=9992
minio.endpoint=https://www.minio.aida.com.hk:9000
minio.accessKey=admin
diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties
index 59ce6439..28eaf8ac 100644
--- a/src/main/resources/application-test.properties
+++ b/src/main/resources/application-test.properties
@@ -42,7 +42,7 @@ spring.servlet.multipart.max-request-size= 10MB
#access.python.ip=http://43.198.80.117
access.python.ip=http://18.167.251.121
#access.python.ip=http://18.167.251.121:9991/
-access.python.port=9990
+access.python.port=9992
minio.endpoint=https://www.minio.aida.com.hk:9000
minio.accessKey=admin
diff --git a/src/main/resources/mapper/primary/CollocationMapper.xml b/src/main/resources/mapper/primary/CollocationMapper.xml
new file mode 100644
index 00000000..8eeeda2a
--- /dev/null
+++ b/src/main/resources/mapper/primary/CollocationMapper.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/primary/DressingMapper.xml b/src/main/resources/mapper/primary/DressingMapper.xml
new file mode 100644
index 00000000..9e112248
--- /dev/null
+++ b/src/main/resources/mapper/primary/DressingMapper.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/secondary/AttributeRetrievalMapper.xml b/src/main/resources/mapper/secondary/AttributeRetrievalMapper.xml
new file mode 100644
index 00000000..434ab153
--- /dev/null
+++ b/src/main/resources/mapper/secondary/AttributeRetrievalMapper.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/secondary/FemaleDressMapper.xml b/src/main/resources/mapper/secondary/FemaleDressMapper.xml
deleted file mode 100644
index abaf4205..00000000
--- a/src/main/resources/mapper/secondary/FemaleDressMapper.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-