From 68f6ae2a8d34fdb67f9da461de9869e4aee43954 Mon Sep 17 00:00:00 2001 From: shahaibo <1023316923@qq.com> Date: Tue, 20 Feb 2024 10:12:44 +0800 Subject: [PATCH] TASK:design new; --- pom.xml | 7 + .../da/common/config/CRMReportInterface.java | 393 ++++++ .../enums/CurrentDesignPictureTypeEnum.java | 6 +- .../com/ai/da/common/utils/RandomsUtil.java | 4 + .../ai/da/controller/AccountController.java | 5 +- .../ai/da/controller/DesignController.java | 1 + .../da/mapper/primary/CollocationMapper.java | 13 + .../ai/da/mapper/primary/DressingMapper.java | 11 + .../{ => primary}/GenerateCancelMapper.java | 4 +- .../{ => primary}/LibraryCopyMapper.java | 5 +- .../LibraryModelPointCopyMapper.java | 5 +- .../da/mapper/primary/entity/BaseEntity.java | 44 + .../da/mapper/primary/entity/Collocation.java | 50 + .../mapper/primary/entity/CustomerData.java | 23 + .../entity/Dressing.java} | 23 +- .../mapper/primary/entity/GenerateCancel.java | 2 +- .../da/mapper/primary/entity/LibraryCopy.java | 83 ++ .../primary/entity/LibraryModelPointCopy.java | 81 ++ .../primary/entity/TransactionData.java | 149 +++ .../secondary/AttributeRetrievalMapper.java | 25 + .../mapper/secondary/FemaleDressMapper.java | 16 - .../entity/AttributeRecognitionJSON.java | 22 + .../secondary/entity/AttributeRetrieval.java | 24 + .../java/com/ai/da/python/PythonService.java | 1057 +++++++++++++---- .../com/ai/da/service/AccountService.java | 1 - .../da/service/impl/AccountServiceImpl.java | 3 - .../da/service/impl/GenerateServiceImpl.java | 10 +- .../da/service/impl/LibraryServiceImpl.java | 3 +- src/main/resources/application-dev.properties | 26 +- .../resources/application-test.properties | 2 +- .../mapper/primary/CollocationMapper.xml | 30 + .../mapper/primary/DressingMapper.xml | 26 + .../secondary/AttributeRetrievalMapper.xml | 68 ++ .../mapper/secondary/FemaleDressMapper.xml | 8 - 34 files changed, 1914 insertions(+), 316 deletions(-) create mode 100644 src/main/java/com/ai/da/common/config/CRMReportInterface.java create mode 100644 src/main/java/com/ai/da/mapper/primary/CollocationMapper.java create mode 100644 src/main/java/com/ai/da/mapper/primary/DressingMapper.java rename src/main/java/com/ai/da/mapper/{ => primary}/GenerateCancelMapper.java (60%) rename src/main/java/com/ai/da/mapper/{ => primary}/LibraryCopyMapper.java (65%) rename src/main/java/com/ai/da/mapper/{ => primary}/LibraryModelPointCopyMapper.java (63%) create mode 100644 src/main/java/com/ai/da/mapper/primary/entity/BaseEntity.java create mode 100644 src/main/java/com/ai/da/mapper/primary/entity/Collocation.java create mode 100644 src/main/java/com/ai/da/mapper/primary/entity/CustomerData.java rename src/main/java/com/ai/da/mapper/{secondary/entity/FemaleDress.java => primary/entity/Dressing.java} (55%) create mode 100644 src/main/java/com/ai/da/mapper/primary/entity/LibraryCopy.java create mode 100644 src/main/java/com/ai/da/mapper/primary/entity/LibraryModelPointCopy.java create mode 100644 src/main/java/com/ai/da/mapper/primary/entity/TransactionData.java create mode 100644 src/main/java/com/ai/da/mapper/secondary/AttributeRetrievalMapper.java delete mode 100644 src/main/java/com/ai/da/mapper/secondary/FemaleDressMapper.java create mode 100644 src/main/java/com/ai/da/mapper/secondary/entity/AttributeRecognitionJSON.java create mode 100644 src/main/java/com/ai/da/mapper/secondary/entity/AttributeRetrieval.java create mode 100644 src/main/resources/mapper/primary/CollocationMapper.xml create mode 100644 src/main/resources/mapper/primary/DressingMapper.xml create mode 100644 src/main/resources/mapper/secondary/AttributeRetrievalMapper.xml delete mode 100644 src/main/resources/mapper/secondary/FemaleDressMapper.xml 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 @@ - - - - - - - -