Compare commits
1 Commits
b826f0bf39
...
dev/dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 2e7004f9dc |
@@ -559,7 +559,7 @@ public class GenerateConsumer {
|
|||||||
log.info("============ProcessPoseTransformResult End listening==========");
|
log.info("============ProcessPoseTransformResult End listening==========");
|
||||||
}
|
}
|
||||||
|
|
||||||
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
|
/*@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
|
||||||
@RabbitHandler
|
@RabbitHandler
|
||||||
public void generateConsumer1(Message msg, Channel channel) {
|
public void generateConsumer1(Message msg, Channel channel) {
|
||||||
generate(msg, channel, "consumer 1");
|
generate(msg, channel, "consumer 1");
|
||||||
@@ -635,7 +635,7 @@ public class GenerateConsumer {
|
|||||||
@RabbitHandler
|
@RabbitHandler
|
||||||
public void getPoseTransformationResult(Message msg, Channel channel) {
|
public void getPoseTransformationResult(Message msg, Channel channel) {
|
||||||
processPoseTransformResult(msg, channel);
|
processPoseTransformResult(msg, channel);
|
||||||
}
|
}*/
|
||||||
// @RabbitListener(queues = "#{rabbitMQProperties.queues.designBatch}")
|
// @RabbitListener(queues = "#{rabbitMQProperties.queues.designBatch}")
|
||||||
// @RabbitHandler
|
// @RabbitHandler
|
||||||
// public void getDesignBatchResult(Message msg, Channel channel) {
|
// public void getDesignBatchResult(Message msg, Channel channel) {
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class AuthenticationFilter extends OncePerRequestFilter {
|
|||||||
//GlobalAwardController
|
//GlobalAwardController
|
||||||
"/api/global-award/uploads/pdf/init", "/api/global-award/uploads/pdf/chunk", "/api/global-award/uploads/pdf/complete", "/api/global-award/uploads/pdf/status",
|
"/api/global-award/uploads/pdf/init", "/api/global-award/uploads/pdf/chunk", "/api/global-award/uploads/pdf/complete", "/api/global-award/uploads/pdf/status",
|
||||||
"/api/global-award/uploads/video/init", "/api/global-award/uploads/video/chunk", "/api/global-award/uploads/video/complete", "/api/global-award/uploads/video/status",
|
"/api/global-award/uploads/video/init", "/api/global-award/uploads/video/chunk", "/api/global-award/uploads/video/complete", "/api/global-award/uploads/video/status",
|
||||||
"/api/global-award/contestants/save", "/api/global-award/contestants/by-email", "/api/global-award/checkEmail", "/api/global-award/checkCode","/api/global-award/contestants/export"
|
"/api/global-award/contestants/save", "/api/global-award/contestants/by-email", "/api/global-award/checkEmail", "/api/global-award/checkCode"
|
||||||
);
|
);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -163,14 +163,6 @@ public class GlobalAwardController {
|
|||||||
return Response.success(globalAwardService.checkCode(email, code));
|
return Response.success(globalAwardService.checkCode(email, code));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/contestants/export")
|
|
||||||
@ApiOperation(value = "导出参赛者列表为Excel", notes = "导出所有参赛者信息为xlsx并触发下载")
|
|
||||||
public Response<Void> exportContestants() throws Exception {
|
|
||||||
// 将文件保存到服务端本地目录(uploadDir/exports),不返回文件内容给客户端
|
|
||||||
globalAwardService.saveContestantsToLocal();
|
|
||||||
return Response.success();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public interface DesignMapper extends CommonMapper<Design> {
|
|||||||
Long insertDesign(Design design);
|
Long insertDesign(Design design);
|
||||||
|
|
||||||
List<UserDesignStatisticDTO> getDesignStatistic(String startTime, String endTime, List<Long> ids, String email,
|
List<UserDesignStatisticDTO> getDesignStatistic(String startTime, String endTime, List<Long> ids, String email,
|
||||||
String role, String organizationName, boolean filterBySecond);
|
String role, String organizationName);
|
||||||
|
|
||||||
List<Design> selectDeleteList();
|
List<Design> selectDeleteList();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,9 +26,6 @@ public class Contestant {
|
|||||||
|
|
||||||
private String email;
|
private String email;
|
||||||
|
|
||||||
@TableField("contestant_number")
|
|
||||||
private Integer contestantNumber;
|
|
||||||
|
|
||||||
@TableField("first_name")
|
@TableField("first_name")
|
||||||
private String firstName;
|
private String firstName;
|
||||||
|
|
||||||
|
|||||||
@@ -2851,21 +2851,13 @@ public class PythonService {
|
|||||||
gradientString = JSONObject.toJSONString(designSingleItem.getGradient());
|
gradientString = JSONObject.toJSONString(designSingleItem.getGradient());
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintToPython printToPython;
|
PrintToPython printToPython = resolveDesignSinglePrint(designSingleItem.getPrintObject().getPrints(),
|
||||||
if (designSingleIncludeLayersDTO.getDesignType().equals("default")){
|
designSingleItem.getPartialDesign().getPartialDesignMinioPath());
|
||||||
printToPython = resolveDesignSinglePrint(designSingleItem.getPrintObject().getPrints(),
|
resolveDesignElement(designSingleItem.getTrims(), printToPython);
|
||||||
designSingleItem.getPartialDesign().getPartialDesignMinioPath());
|
|
||||||
} else {
|
|
||||||
printToPython = null;
|
|
||||||
}
|
|
||||||
/*PrintToPython printToPython = resolveDesignSinglePrint(designSingleItem.getPrintObject().getPrints(),
|
|
||||||
designSingleItem.getPartialDesign().getPartialDesignMinioPath());*/
|
|
||||||
// resolveDesignElement(designSingleItem.getTrims(), printToPython);
|
|
||||||
log.info("组装参数【服装:{}的maskUrl: {}】",designSingleItem.getType(), designSingleItem.getMaskUrl());
|
log.info("组装参数【服装:{}的maskUrl: {}】",designSingleItem.getType(), designSingleItem.getMaskUrl());
|
||||||
|
|
||||||
String partialDesign = designSingleItem.getPartialDesign().getPartialDesignMinioPath();
|
String mergeImagePath = !StringUtil.isNullOrEmpty(printToPython.getPartial())
|
||||||
String mergeImagePath = !StringUtil.isNullOrEmpty(partialDesign)
|
? printToPython.getPartial() : designSingleItem.getPath();
|
||||||
? partialDesign : designSingleItem.getPath();
|
|
||||||
response.add(new DesignPythonItem(
|
response.add(new DesignPythonItem(
|
||||||
designSingleItem.getType(),
|
designSingleItem.getType(),
|
||||||
designSingleItem.getPath(),
|
designSingleItem.getPath(),
|
||||||
@@ -2904,9 +2896,9 @@ public class PythonService {
|
|||||||
|
|
||||||
private PrintToPython resolveDesignSinglePrint(List<DesignSinglePrint> printObject, String partialDesign) {
|
private PrintToPython resolveDesignSinglePrint(List<DesignSinglePrint> printObject, String partialDesign) {
|
||||||
PrintToPython printToPython = new PrintToPython();
|
PrintToPython printToPython = new PrintToPython();
|
||||||
// DesignPythonItemPrint printSingle = new DesignPythonItemPrint();
|
DesignPythonItemPrint printSingle = new DesignPythonItemPrint();
|
||||||
DesignPythonItemPrint printOverall = new DesignPythonItemPrint();
|
DesignPythonItemPrint printOverall = new DesignPythonItemPrint();
|
||||||
// printToPython.setSingle(printSingle);
|
printToPython.setSingle(printSingle);
|
||||||
printToPython.setOverall(printOverall);
|
printToPython.setOverall(printOverall);
|
||||||
printToPython.setPartial(StringUtil.isNullOrEmpty(partialDesign) ? null : partialDesign);
|
printToPython.setPartial(StringUtil.isNullOrEmpty(partialDesign) ? null : partialDesign);
|
||||||
if (Objects.isNull(printObject) || printObject.isEmpty()){
|
if (Objects.isNull(printObject) || printObject.isEmpty()){
|
||||||
@@ -2953,14 +2945,14 @@ public class PythonService {
|
|||||||
}
|
}
|
||||||
// log.info("本次print打点locations###{}###fileVO{}", p.getLocation(), JSON.toJSONString(fileVO));
|
// log.info("本次print打点locations###{}###fileVO{}", p.getLocation(), JSON.toJSONString(fileVO));
|
||||||
});
|
});
|
||||||
/*locationS.removeAll(Collections.singleton(null));
|
locationS.removeAll(Collections.singleton(null));
|
||||||
scaleS.removeAll(Collections.singleton(null));
|
scaleS.removeAll(Collections.singleton(null));
|
||||||
angleS.removeAll(Collections.singleton(null));
|
angleS.removeAll(Collections.singleton(null));
|
||||||
pathsS.removeAll(Collections.singleton(null));
|
pathsS.removeAll(Collections.singleton(null));
|
||||||
printSingle.setLocation(locationS);
|
printSingle.setLocation(locationS);
|
||||||
printSingle.setPrint_scale_list(scaleS);
|
printSingle.setPrint_scale_list(scaleS);
|
||||||
printSingle.setPrint_angle_list(angleS);
|
printSingle.setPrint_angle_list(angleS);
|
||||||
printSingle.setPrint_path_list(pathsS);*/
|
printSingle.setPrint_path_list(pathsS);
|
||||||
|
|
||||||
locationO.removeAll(Collections.singleton(null));
|
locationO.removeAll(Collections.singleton(null));
|
||||||
scaleO.removeAll(Collections.singleton(null));
|
scaleO.removeAll(Collections.singleton(null));
|
||||||
|
|||||||
@@ -20,17 +20,6 @@ public interface GlobalAwardService {
|
|||||||
CheckOTPVO checkCode(String email, String otp);
|
CheckOTPVO checkCode(String email, String otp);
|
||||||
|
|
||||||
void checkSecurityToken(String email, String securityToken);
|
void checkSecurityToken(String email, String securityToken);
|
||||||
|
|
||||||
/**
|
|
||||||
* 导出参赛者列表为 Excel(二进制)
|
|
||||||
* @return Excel 文件的字节数组
|
|
||||||
*/
|
|
||||||
byte[] exportContestants() throws Exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将参赛者列表导出并保存到服务端本地目录(使用服务配置的 uploadDir/exports)
|
|
||||||
*/
|
|
||||||
void saveContestantsToLocal() throws Exception;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -244,13 +244,12 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
AccountLoginVO response = CopyUtil.copyObject(account, AccountLoginVO.class);
|
AccountLoginVO response = CopyUtil.copyObject(account, AccountLoginVO.class);
|
||||||
response.setEmail(account.getUserEmail());
|
response.setEmail(account.getUserEmail());
|
||||||
String token = LocalCacheUtils.getTokenCache(String.valueOf(account.getId()));
|
String token = LocalCacheUtils.getTokenCache(String.valueOf(account.getId()));
|
||||||
/*if (StringUtils.isNotBlank(token)) {
|
if (StringUtils.isNotBlank(token)) {
|
||||||
//用户已登入
|
//用户已登入
|
||||||
response.setToken(token);
|
response.setToken(token);
|
||||||
} else {
|
} else {
|
||||||
response.setToken(createAccountToken(account));
|
response.setToken(createAccountToken(account));
|
||||||
}*/
|
}
|
||||||
response.setToken(createAccountToken(account));
|
|
||||||
response.setUserId(account.getId());
|
response.setUserId(account.getId());
|
||||||
response.setSystemUser(account.getSystemUser());
|
response.setSystemUser(account.getSystemUser());
|
||||||
// 设置头像
|
// 设置头像
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import io.netty.util.internal.StringUtil;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.poi.xssf.usermodel.*;
|
import org.apache.poi.xssf.usermodel.*;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@@ -148,17 +149,7 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
|||||||
|| ADMIN_IDS.contains(account.getId())
|
|| ADMIN_IDS.contains(account.getId())
|
||||||
|| ADMIN_IDS_READ_ONLY.contains(account.getId())
|
|| ADMIN_IDS_READ_ONLY.contains(account.getId())
|
||||||
)) {
|
)) {
|
||||||
boolean filterBySecond ;
|
if (StringUtil.isNullOrEmpty(startTime)) startTime = "2024-02-01 00:00:00";
|
||||||
if (StringUtil.isNullOrEmpty(startTime)) {
|
|
||||||
startTime = "2024-02-01 00:00:00";
|
|
||||||
filterBySecond = true;
|
|
||||||
} else {
|
|
||||||
LocalDateTime thresholdTime = LocalDateTime.of(2024, 5, 1, 0, 0, 0);
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
||||||
LocalDateTime startDateTime = LocalDateTime.parse(startTime, formatter);
|
|
||||||
filterBySecond = startDateTime.isBefore(thresholdTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (StringUtil.isNullOrEmpty(endTime)) {
|
if (StringUtil.isNullOrEmpty(endTime)) {
|
||||||
// yyyy-MM-dd HH:mm:ss "HH"表示24小时制 "hh"表示12小时制
|
// yyyy-MM-dd HH:mm:ss "HH"表示24小时制 "hh"表示12小时制
|
||||||
endTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
endTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||||
@@ -182,7 +173,7 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
|||||||
default:
|
default:
|
||||||
throw new BusinessException("have.no.permission", ResultEnum.PROMPT.getCode());
|
throw new BusinessException("have.no.permission", ResultEnum.PROMPT.getCode());
|
||||||
}
|
}
|
||||||
return designMapper.getDesignStatistic(startTime, endTime, ids, email, role, account.getOrganizationName(), filterBySecond);
|
return designMapper.getDesignStatistic(startTime, endTime, ids, email, role, account.getOrganizationName());
|
||||||
} else {
|
} else {
|
||||||
throw new BusinessException("have.no.permission", ResultEnum.PROMPT.getCode());
|
throw new BusinessException("have.no.permission", ResultEnum.PROMPT.getCode());
|
||||||
}
|
}
|
||||||
@@ -704,19 +695,14 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
|||||||
|
|
||||||
String username = UserContext.getUserHolder().getUsername();
|
String username = UserContext.getUserHolder().getUsername();
|
||||||
Account account = new Account();
|
Account account = new Account();
|
||||||
account.setId(accountId);
|
|
||||||
// 修改用户有效期截止日期、用户类型、积分
|
// 修改用户有效期截止日期、用户类型、积分
|
||||||
if (!Objects.isNull(validEndTime)) {
|
if (!Objects.isNull(validEndTime)) {
|
||||||
account.setValidEndTime(validEndTime);
|
account.setValidEndTime(validEndTime);
|
||||||
log.info("管理员:{},修改用户 {} 信息,将账号到期时间置为:{}", username, accountId, validEndTime);
|
log.info("管理员:{},修改用户 {} 信息,将账号到期时间置为:{}", username, accountId, validEndTime);
|
||||||
}
|
}
|
||||||
if (!Objects.isNull(systemUser) && !systemUser.equals(0)) {
|
if (!Objects.isNull(systemUser)) {
|
||||||
account.setSystemUser(systemUser);
|
account.setSystemUser(systemUser);
|
||||||
log.info("管理员:{},修改用户 {} 信息,将账号身份置为:{}", username, accountId, systemUser);
|
log.info("管理员:{},修改用户 {} 信息,将账号身份置为:{}", username, accountId, systemUser);
|
||||||
} else if (systemUser.equals(0)){
|
|
||||||
// 将用户身份设置为游客
|
|
||||||
accountService.toVisitor(account);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
/*if (!StringUtils.isNullOrEmpty(systemUser)) {
|
/*if (!StringUtils.isNullOrEmpty(systemUser)) {
|
||||||
int systemUser = 0;
|
int systemUser = 0;
|
||||||
@@ -742,6 +728,7 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// todo 如果修改管理员账号的积分上限或子账号数量,则其所有子账号的积分上限需要重新计算
|
// todo 如果修改管理员账号的积分上限或子账号数量,则其所有子账号的积分上限需要重新计算
|
||||||
|
account.setId(accountId);
|
||||||
account.setUpdateDate(new Date());
|
account.setUpdateDate(new Date());
|
||||||
return accountMapper.updateById(account) == 1;
|
return accountMapper.updateById(account) == 1;
|
||||||
// accountService.update(account,null);
|
// accountService.update(account,null);
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ import java.math.BigDecimal;
|
|||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
@@ -1670,24 +1669,6 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
.lt("create_date", endTime)
|
.lt("create_date", endTime)
|
||||||
.select("count(id) as count");
|
.select("count(id) as count");
|
||||||
|
|
||||||
// 如果startTime早于2024-05-01 00:00:00,添加额外的筛选条件
|
|
||||||
LocalDateTime thresholdTime = LocalDateTime.of(2024, 5, 1, 0, 0, 0);
|
|
||||||
|
|
||||||
try {
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
||||||
LocalDateTime startDateTime = LocalDateTime.parse(startTime, formatter);
|
|
||||||
|
|
||||||
if (startDateTime.isBefore(thresholdTime)) {
|
|
||||||
// 使用 notLike 来排除以 ":01" 或 ":02" 结尾的时间
|
|
||||||
// 方案2.1:使用 apply 方法执行数据库函数 (create_date 字段的实际存储格式(可能包含毫秒),所以取最后三个字符进行匹配)
|
|
||||||
queryWrapper.apply("DATE_FORMAT(create_date, '%s') NOT IN ('01', '02')");
|
|
||||||
/*queryWrapper.notLike("create_date", "%:01")
|
|
||||||
.notLike("create_date", "%:02");*/
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.warn("Failed to parse startTime: {}, skip time-based filtering", startTime, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Objects.isNull(accountIds) && !accountIds.isEmpty()) {
|
if (!Objects.isNull(accountIds) && !accountIds.isEmpty()) {
|
||||||
queryWrapper.in("account_id", accountIds);
|
queryWrapper.in("account_id", accountIds);
|
||||||
}
|
}
|
||||||
@@ -1695,7 +1676,7 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
|||||||
List<Map<String, Object>> result = baseMapper.selectMaps(queryWrapper);
|
List<Map<String, Object>> result = baseMapper.selectMaps(queryWrapper);
|
||||||
if (result != null && !result.isEmpty()) {
|
if (result != null && !result.isEmpty()) {
|
||||||
Object countObj = result.get(0).get("count");
|
Object countObj = result.get(0).get("count");
|
||||||
return countObj != null ? ((Number) countObj).longValue() : 0L;
|
return (Long) countObj;
|
||||||
} else {
|
} else {
|
||||||
return 0L;
|
return 0L;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4295,7 +4295,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
|
|||||||
MotionModeEnum motionModeEnum = MotionModeEnum.of(poseTransformDTO.getMode());
|
MotionModeEnum motionModeEnum = MotionModeEnum.of(poseTransformDTO.getMode());
|
||||||
switch (motionModeEnum) {
|
switch (motionModeEnum) {
|
||||||
case POSE_TO_VIDEO:
|
case POSE_TO_VIDEO:
|
||||||
params.put("pose_id", poseTransformDTO.getPoseId().toString());
|
params.put("pose_id", poseTransformDTO.getPoseId());
|
||||||
params.put("image_url", poseTransformDTO.getProductImage());
|
params.put("image_url", poseTransformDTO.getProductImage());
|
||||||
break;
|
break;
|
||||||
case PROMPT_TO_VIDEO:
|
case PROMPT_TO_VIDEO:
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
|
||||||
@@ -30,20 +29,6 @@ import java.io.IOException;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
|
||||||
import org.apache.poi.ss.usermodel.Row;
|
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -143,7 +128,6 @@ public class GlobalAwardServiceImpl implements GlobalAwardService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public Map<String, Object> saveContestant(ContestantDTO request) {
|
public Map<String, Object> saveContestant(ContestantDTO request) {
|
||||||
Map<String,Object> resp = new HashMap<>();
|
Map<String,Object> resp = new HashMap<>();
|
||||||
if (request.getEmail() == null) {
|
if (request.getEmail() == null) {
|
||||||
@@ -158,14 +142,7 @@ public class GlobalAwardServiceImpl implements GlobalAwardService {
|
|||||||
|
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
if (existing == null) {
|
if (existing == null) {
|
||||||
// 生成唯一的参赛选手编号(从10000开始),使用数据库行锁保证并发安全与原子性
|
|
||||||
QueryWrapper<Contestant> numQw = new QueryWrapper<>();
|
|
||||||
numQw.isNotNull("contestant_number").orderByDesc("contestant_number").last("FOR UPDATE");
|
|
||||||
Contestant maxRow = contestantMapper.selectOne(numQw);
|
|
||||||
Integer nextContestantNumber = (maxRow == null || maxRow.getContestantNumber() == null) ? 10000 : maxRow.getContestantNumber() + 1;
|
|
||||||
|
|
||||||
Contestant toInsert = Contestant.builder()
|
Contestant toInsert = Contestant.builder()
|
||||||
.contestantNumber(nextContestantNumber)
|
|
||||||
.email(request.getEmail())
|
.email(request.getEmail())
|
||||||
.firstName(request.getFirstName())
|
.firstName(request.getFirstName())
|
||||||
.lastName(request.getLastName())
|
.lastName(request.getLastName())
|
||||||
@@ -183,7 +160,6 @@ public class GlobalAwardServiceImpl implements GlobalAwardService {
|
|||||||
.build();
|
.build();
|
||||||
contestantMapper.insert(toInsert);
|
contestantMapper.insert(toInsert);
|
||||||
resp.put("success", true);
|
resp.put("success", true);
|
||||||
resp.put("contestant_number", nextContestantNumber);
|
|
||||||
sendSiteMsg(toInsert.getId(), toInsert.getEmail());
|
sendSiteMsg(toInsert.getId(), toInsert.getEmail());
|
||||||
return resp;
|
return resp;
|
||||||
} else {
|
} else {
|
||||||
@@ -202,109 +178,10 @@ public class GlobalAwardServiceImpl implements GlobalAwardService {
|
|||||||
existing.setUpdatedAt(now);
|
existing.setUpdatedAt(now);
|
||||||
contestantMapper.updateById(existing);
|
contestantMapper.updateById(existing);
|
||||||
resp.put("success", true);
|
resp.put("success", true);
|
||||||
resp.put("contestant_number", existing.getContestantNumber());
|
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] exportContestants() throws Exception {
|
|
||||||
List<Contestant> list = contestantMapper.selectList(new QueryWrapper<>());
|
|
||||||
try (XSSFWorkbook workbook = new XSSFWorkbook(); ByteArrayOutputStream out = new ByteArrayOutputStream()) {
|
|
||||||
Sheet sheet = workbook.createSheet("contestants");
|
|
||||||
int rowIdx = 0;
|
|
||||||
Row header = sheet.createRow(rowIdx++);
|
|
||||||
String[] headers = new String[] {
|
|
||||||
"contestantNumber", "email", "firstName", "lastName", "gender", "occupation",
|
|
||||||
"age", "countryRegionCity", "phoneNumber", "designTitle", "designDescription",
|
|
||||||
"pdfPath", "videoPath", "createdAt", "updatedAt"
|
|
||||||
};
|
|
||||||
for (int i = 0; i < headers.length; i++) {
|
|
||||||
Cell c = header.createCell(i);
|
|
||||||
c.setCellValue(headers[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Contestant cst : list) {
|
|
||||||
Row r = sheet.createRow(rowIdx++);
|
|
||||||
int ci = 0;
|
|
||||||
r.createCell(ci++).setCellValue(cst.getContestantNumber() == null ? "" : cst.getContestantNumber().toString());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getEmail() == null ? "" : cst.getEmail());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getFirstName() == null ? "" : cst.getFirstName());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getLastName() == null ? "" : cst.getLastName());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getGender() == null ? "" : cst.getGender());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getOccupation() == null ? "" : cst.getOccupation());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getAge() == null ? "" : cst.getAge().toString());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getCountryRegionCity() == null ? "" : cst.getCountryRegionCity());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getPhoneNumber() == null ? "" : cst.getPhoneNumber());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getDesignTitle() == null ? "" : cst.getDesignTitle());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getDesignDescription() == null ? "" : cst.getDesignDescription());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getPdfPath() == null ? "" : cst.getPdfPath());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getVideoPath() == null ? "" : cst.getVideoPath());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getCreatedAt() == null ? "" : cst.getCreatedAt().toString());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getUpdatedAt() == null ? "" : cst.getUpdatedAt().toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
workbook.write(out);
|
|
||||||
out.flush();
|
|
||||||
return out.toByteArray();
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error("export contestants failed", e);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void saveContestantsToLocal() throws Exception {
|
|
||||||
List<Contestant> list = contestantMapper.selectList(new QueryWrapper<>());
|
|
||||||
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss");
|
|
||||||
String ts = LocalDateTime.now().format(fmt);
|
|
||||||
Path exportDir = Paths.get(uploadDir == null ? "uploads" : uploadDir, "exports");
|
|
||||||
Files.createDirectories(exportDir);
|
|
||||||
Path outPath = exportDir.resolve("contestants_" + ts + ".xlsx");
|
|
||||||
|
|
||||||
try (XSSFWorkbook workbook = new XSSFWorkbook(); FileOutputStream fos = new FileOutputStream(outPath.toFile())) {
|
|
||||||
Sheet sheet = workbook.createSheet("contestants");
|
|
||||||
int rowIdx = 0;
|
|
||||||
Row header = sheet.createRow(rowIdx++);
|
|
||||||
String[] headers = new String[] {
|
|
||||||
"contestantNumber", "email", "firstName", "lastName", "gender", "occupation",
|
|
||||||
"age", "countryRegionCity", "phoneNumber", "designTitle", "designDescription",
|
|
||||||
"pdfPath", "videoPath", "createdAt", "updatedAt"
|
|
||||||
};
|
|
||||||
for (int i = 0; i < headers.length; i++) {
|
|
||||||
Cell c = header.createCell(i);
|
|
||||||
c.setCellValue(headers[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Contestant cst : list) {
|
|
||||||
Row r = sheet.createRow(rowIdx++);
|
|
||||||
int ci = 0;
|
|
||||||
r.createCell(ci++).setCellValue(cst.getContestantNumber() == null ? "" : cst.getContestantNumber().toString());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getEmail() == null ? "" : cst.getEmail());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getFirstName() == null ? "" : cst.getFirstName());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getLastName() == null ? "" : cst.getLastName());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getGender() == null ? "" : cst.getGender());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getOccupation() == null ? "" : cst.getOccupation());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getAge() == null ? "" : cst.getAge().toString());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getCountryRegionCity() == null ? "" : cst.getCountryRegionCity());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getPhoneNumber() == null ? "" : cst.getPhoneNumber());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getDesignTitle() == null ? "" : cst.getDesignTitle());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getDesignDescription() == null ? "" : cst.getDesignDescription());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getPdfPath() == null ? "" : cst.getPdfPath());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getVideoPath() == null ? "" : cst.getVideoPath());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getCreatedAt() == null ? "" : cst.getCreatedAt().toString());
|
|
||||||
r.createCell(ci++).setCellValue(cst.getUpdatedAt() == null ? "" : cst.getUpdatedAt().toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
workbook.write(fos);
|
|
||||||
fos.flush();
|
|
||||||
log.info("Exported contestants to local file: {}", outPath.toString());
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error("save contestants to local failed", e);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ContestantDTO getContestantByID(String id) {
|
public ContestantDTO getContestantByID(String id) {
|
||||||
if (id == null) {
|
if (id == null) {
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import io.netty.util.internal.StringUtil;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
@@ -54,11 +53,7 @@ public class LibraryModelPointServiceImpl extends ServiceImpl<LibraryModelPointM
|
|||||||
private final PythonTAllInfoService pythonTAllInfoService;
|
private final PythonTAllInfoService pythonTAllInfoService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public LibraryModelPointVO saveOrEditTemplatePoint(LibraryModelPointDTO libraryModelPointDTO) {
|
public LibraryModelPointVO saveOrEditTemplatePoint(LibraryModelPointDTO libraryModelPointDTO) {
|
||||||
// 参数校验
|
|
||||||
validateInputParams(libraryModelPointDTO);
|
|
||||||
|
|
||||||
LibraryModelPointVO libraryModelPointVO = CopyUtil.copyObject(libraryModelPointDTO, LibraryModelPointVO.class);
|
LibraryModelPointVO libraryModelPointVO = CopyUtil.copyObject(libraryModelPointDTO, LibraryModelPointVO.class);
|
||||||
|
|
||||||
// 不管是保存还是另存为,都需要传模特的libraryId
|
// 不管是保存还是另存为,都需要传模特的libraryId
|
||||||
@@ -76,8 +71,7 @@ public class LibraryModelPointServiceImpl extends ServiceImpl<LibraryModelPointM
|
|||||||
// 更新模特图片
|
// 更新模特图片
|
||||||
if (flag) {
|
if (flag) {
|
||||||
libModel.setUrl(url);
|
libModel.setUrl(url);
|
||||||
String preSignedUrl = minioUtil.getPreSignedUrl(url, CommonConstant.MINIO_IMAGE_EXPIRE_TIME);
|
libModel.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(url, CommonConstant.MINIO_IMAGE_EXPIRE_TIME), false));
|
||||||
libModel.setMd5(MD5Utils.encryptFile(preSignedUrl, false));
|
|
||||||
List<Integer> imagesWidthAndHeight = minioUtil.getImagesWidthAndHeight(url);
|
List<Integer> imagesWidthAndHeight = minioUtil.getImagesWidthAndHeight(url);
|
||||||
libModel.setWidth(imagesWidthAndHeight.get(0));
|
libModel.setWidth(imagesWidthAndHeight.get(0));
|
||||||
libModel.setHigh(imagesWidthAndHeight.get(1));
|
libModel.setHigh(imagesWidthAndHeight.get(1));
|
||||||
@@ -110,10 +104,25 @@ public class LibraryModelPointServiceImpl extends ServiceImpl<LibraryModelPointM
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
// 不覆盖,即另存为
|
// 不覆盖,即另存为
|
||||||
Library saveAsModel = createNewLibraryCopy(libModel, libraryModelPointDTO);
|
// 新增模特library信息
|
||||||
|
Library saveAsModel = new Library();
|
||||||
|
saveAsModel.setAccountId(libModel.getAccountId());
|
||||||
|
saveAsModel.setLevel1Type(libModel.getLevel1Type());
|
||||||
|
saveAsModel.setLevel2Type(libModel.getLevel2Type());
|
||||||
|
String ageGroup = StringUtil.isNullOrEmpty(libModel.getLevel3Type()) ? "Adult" : libModel.getLevel3Type();
|
||||||
|
saveAsModel.setLevel3Type(ageGroup);
|
||||||
|
saveAsModel.setName(DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD));
|
||||||
|
saveAsModel.setUrl(url);
|
||||||
|
saveAsModel.setMd5(MD5Utils.encryptFile(minioUtil.getPreSignedUrl(url, CommonConstant.MINIO_IMAGE_EXPIRE_TIME), false));
|
||||||
|
List<Integer> imagesWidthAndHeight = minioUtil.getImagesWidthAndHeight(url);
|
||||||
|
saveAsModel.setWidth(imagesWidthAndHeight.get(0));
|
||||||
|
saveAsModel.setHigh(imagesWidthAndHeight.get(1));
|
||||||
|
saveAsModel.setCreateDate(DateUtil.getByTimeZone(libraryModelPointDTO.getTimeZone()));
|
||||||
|
libraryService.save(saveAsModel);
|
||||||
|
// 更新新的模特在library中的id,用于后面新建模特点位信息用
|
||||||
|
libraryModelPointDTO.setLibraryId(saveAsModel.getId());
|
||||||
|
|
||||||
// 新增模特点位信息
|
// 新增模特点位信息
|
||||||
libraryModelPointDTO.setLibraryId(saveAsModel.getId()); // 更新libraryId为新创建的模型ID
|
|
||||||
LibraryModelPoint libraryModelPoint = resolvePoint(libraryModelPointDTO);
|
LibraryModelPoint libraryModelPoint = resolvePoint(libraryModelPointDTO);
|
||||||
libraryModelPoint.setModelType("Library");
|
libraryModelPoint.setModelType("Library");
|
||||||
libraryModelPoint.setCreateDate(DateUtil.getByTimeZone(libraryModelPointDTO.getTimeZone()));
|
libraryModelPoint.setCreateDate(DateUtil.getByTimeZone(libraryModelPointDTO.getTimeZone()));
|
||||||
@@ -121,50 +130,22 @@ public class LibraryModelPointServiceImpl extends ServiceImpl<LibraryModelPointM
|
|||||||
libraryModelPointVO.setTemplateId(libraryModelPoint.getId());
|
libraryModelPointVO.setTemplateId(libraryModelPoint.getId());
|
||||||
libraryModelPointVO.setRelationId(libraryModelPoint.getRelationId());
|
libraryModelPointVO.setRelationId(libraryModelPoint.getRelationId());
|
||||||
}
|
}
|
||||||
|
//编辑
|
||||||
|
/*if (!StringUtils.isEmpty(libraryModelPointDTO.getModelSex())) {
|
||||||
|
Library byId = libraryService.getById(libraryModelPointDTO.getLibraryId());
|
||||||
|
if (!byId.getLevel2Type().equals(libraryModelPointDTO.getModelSex())) {
|
||||||
|
if (byId.getLevel2Type().equals(Sex.FEMALE.getValue())) {
|
||||||
|
libraryService.checkModel(Sex.FEMALE.getValue(), Collections.singletonList(byId.getId()), 1);
|
||||||
|
}else {
|
||||||
|
libraryService.checkModel(Sex.MALE.getValue(), Collections.singletonList(byId.getId()), 1);
|
||||||
|
}
|
||||||
|
byId.setLevel2Type(libraryModelPointDTO.getModelSex());
|
||||||
|
libraryService.updateById(byId);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
return libraryModelPointVO;
|
return libraryModelPointVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证输入参数
|
|
||||||
*/
|
|
||||||
private void validateInputParams(LibraryModelPointDTO libraryModelPointDTO) {
|
|
||||||
if (libraryModelPointDTO == null) {
|
|
||||||
throw new BusinessException("libraryModelPointDTO cannot be null");
|
|
||||||
}
|
|
||||||
if (libraryModelPointDTO.getLibraryId() == null || libraryModelPointDTO.getLibraryId() <= 0) {
|
|
||||||
throw new BusinessException("libraryId is required");
|
|
||||||
}
|
|
||||||
if (StringUtils.isEmpty(libraryModelPointDTO.getModelPath())) {
|
|
||||||
throw new BusinessException("modelPath is required");
|
|
||||||
}
|
|
||||||
if (StringUtils.isEmpty(libraryModelPointDTO.getTimeZone())) {
|
|
||||||
throw new BusinessException("timeZone is required");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建新的库模型副本
|
|
||||||
*/
|
|
||||||
private Library createNewLibraryCopy(Library originalModel, LibraryModelPointDTO libraryModelPointDTO) {
|
|
||||||
// 新增模特library信息
|
|
||||||
Library saveAsModel = new Library();
|
|
||||||
saveAsModel.setAccountId(originalModel.getAccountId());
|
|
||||||
saveAsModel.setLevel1Type(originalModel.getLevel1Type());
|
|
||||||
saveAsModel.setLevel2Type(originalModel.getLevel2Type());
|
|
||||||
String ageGroup = StringUtil.isNullOrEmpty(originalModel.getLevel3Type()) ? "Adult" : originalModel.getLevel3Type();
|
|
||||||
saveAsModel.setLevel3Type(ageGroup);
|
|
||||||
saveAsModel.setName(DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD));
|
|
||||||
saveAsModel.setUrl(libraryModelPointDTO.getModelPath());
|
|
||||||
String preSignedUrl = minioUtil.getPreSignedUrl(libraryModelPointDTO.getModelPath(), CommonConstant.MINIO_IMAGE_EXPIRE_TIME);
|
|
||||||
saveAsModel.setMd5(MD5Utils.encryptFile(preSignedUrl, false));
|
|
||||||
List<Integer> imagesWidthAndHeight = minioUtil.getImagesWidthAndHeight(libraryModelPointDTO.getModelPath());
|
|
||||||
saveAsModel.setWidth(imagesWidthAndHeight.get(0));
|
|
||||||
saveAsModel.setHigh(imagesWidthAndHeight.get(1));
|
|
||||||
saveAsModel.setCreateDate(DateUtil.getByTimeZone(libraryModelPointDTO.getTimeZone()));
|
|
||||||
libraryService.save(saveAsModel);
|
|
||||||
return saveAsModel;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LibraryModelPointVO saveOrEditTemplatePointOld(LibraryModelPointDTO libraryModelPointDTO) {
|
public LibraryModelPointVO saveOrEditTemplatePointOld(LibraryModelPointDTO libraryModelPointDTO) {
|
||||||
// Library library = libraryService.getById(libraryModelPointDTO.getLibraryId());
|
// Library library = libraryService.getById(libraryModelPointDTO.getLibraryId());
|
||||||
|
|||||||
@@ -125,9 +125,9 @@ orderList.link=https://develop.aida.com.hk/home/homePage?order=
|
|||||||
# 0 不发送邮件通知 1 发送邮件通知
|
# 0 不发送邮件通知 1 发送邮件通知
|
||||||
stripe.webhook.fail.reminder=0
|
stripe.webhook.fail.reminder=0
|
||||||
# kim test
|
# kim test
|
||||||
#stripe.paymentMethodConfiguration=pmc_1LywTWH7nPZ8bkrN6FvdCUWG
|
stripe.paymentMethodConfiguration=pmc_1LywTWH7nPZ8bkrN6FvdCUWG
|
||||||
# developer test
|
# developer test
|
||||||
stripe.paymentMethodConfiguration=pmc_1QIKyq02n1TEydyNKVEYvhW7
|
#stripe.paymentMethodConfiguration=pmc_1QIKyq02n1TEydyNKVEYvhW7
|
||||||
#thymelea模板配置
|
#thymelea模板配置
|
||||||
#控制 Thymeleaf 是否启用模板缓存 生产环境用true,以提高性能
|
#控制 Thymeleaf 是否启用模板缓存 生产环境用true,以提高性能
|
||||||
spring.thymeleaf.cache=false
|
spring.thymeleaf.cache=false
|
||||||
|
|||||||
@@ -61,10 +61,10 @@
|
|||||||
</if>
|
</if>
|
||||||
<!-- 添加时间区间查询条件 -->
|
<!-- 添加时间区间查询条件 -->
|
||||||
<if test="startTime != null and startTime != ''">
|
<if test="startTime != null and startTime != ''">
|
||||||
AND create_time >= #{startTime}
|
AND cd.create_time >= #{startTime}
|
||||||
</if>
|
</if>
|
||||||
<if test="endTime != null and endTime != ''">
|
<if test="endTime != null and endTime != ''">
|
||||||
AND create_time <= #{endTime}
|
AND cd.create_time <= #{endTime}
|
||||||
</if>
|
</if>
|
||||||
GROUP BY
|
GROUP BY
|
||||||
account_id
|
account_id
|
||||||
|
|||||||
@@ -52,10 +52,8 @@
|
|||||||
AND b.create_date between #{startTime} and #{endTime}
|
AND b.create_date between #{startTime} and #{endTime}
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
<if test="filterBySecond">
|
and b.create_date not like '%:01'
|
||||||
and b.create_date not like '%:01'
|
and b.create_date not like '%:02'
|
||||||
and b.create_date not like '%:02'
|
|
||||||
</if>
|
|
||||||
<if test="ids != null and ids.size() > 0">
|
<if test="ids != null and ids.size() > 0">
|
||||||
and a.id in
|
and a.id in
|
||||||
<foreach item="id" collection="ids" open="(" separator="," close=")">
|
<foreach item="id" collection="ids" open="(" separator="," close=")">
|
||||||
|
|||||||
@@ -17,4 +17,3 @@
|
|||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user