优化
This commit is contained in:
@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
|||||||
import cn.iocoder.yudao.module.system.api.dish.DishesApi;
|
import cn.iocoder.yudao.module.system.api.dish.DishesApi;
|
||||||
import cn.iocoder.yudao.module.system.api.dish.dto.DishExcelDto;
|
import cn.iocoder.yudao.module.system.api.dish.dto.DishExcelDto;
|
||||||
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.EasyExcel;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@ -28,7 +29,6 @@ import java.io.InputStream;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
|
|
||||||
@Tag(name = "管理后台 - 表格导入")
|
@Tag(name = "管理后台 - 表格导入")
|
||||||
@ -106,6 +106,7 @@ public class ExcelImportController {
|
|||||||
return notExist;
|
return notExist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "菜品导入")
|
||||||
@PostMapping("/dishImport")
|
@PostMapping("/dishImport")
|
||||||
public void importExcelDish(MultipartFile file,Long storeId) {
|
public void importExcelDish(MultipartFile file,Long storeId) {
|
||||||
if (!file.isEmpty()) {
|
if (!file.isEmpty()) {
|
||||||
@ -145,6 +146,7 @@ public class ExcelImportController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Operation(summary = "商品导入")
|
||||||
@PostMapping("/GoodsImport")
|
@PostMapping("/GoodsImport")
|
||||||
public void importExcelGoods(MultipartFile file,Long storeId) {
|
public void importExcelGoods(MultipartFile file,Long storeId) {
|
||||||
if (!file.isEmpty()) {
|
if (!file.isEmpty()) {
|
||||||
|
@ -214,6 +214,14 @@ public class MemberUserController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PutMapping("/imgCreate")
|
||||||
|
@Operation(summary = "图片数据创建会员")
|
||||||
|
public CommonResult<Boolean> imgCreate(String filePath,Long storeId){
|
||||||
|
memberUserService.imgCreate(filePath,storeId);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
package cn.iocoder.yudao.module.member.dal.mysql.storebusiness;
|
package cn.iocoder.yudao.module.member.dal.mysql.storebusiness;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.*;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 超市营业统计 Mapper
|
* 超市营业统计 Mapper
|
||||||
@ -38,4 +40,9 @@ public interface StoreBusinessMapper extends BaseMapperX<StoreBusinessDO> {
|
|||||||
.orderByDesc(StoreBusinessDO::getId));
|
.orderByDesc(StoreBusinessDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Select("select * from member_store_business where carteen_id = #{carteenId} and create_time between #{startOfDay} and #{endOfDay} limit 1 for update")
|
||||||
|
StoreBusinessDO getTodayBusiness(@Param("carteenId") Long carteenId, @Param("startOfDay") LocalDateTime startOfDay, @Param("endOfDay") LocalDateTime endOfDay);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -11,7 +11,6 @@ import cn.iocoder.yudao.module.member.controller.admin.screen.vo.TurnoverVO;
|
|||||||
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessPageReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessSaveReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.StoreBusinessSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO;
|
import cn.iocoder.yudao.module.member.controller.app.business.vo.BusinessDataVO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO;
|
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
|
||||||
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||||
@ -37,7 +36,6 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_BUSINESS_NOT_EXISTS;
|
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_BUSINESS_NOT_EXISTS;
|
||||||
import static cn.iocoder.yudao.module.member.service.amount.LockManager.getSupermarketLock;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 超市营业统计 Service 实现类
|
* 超市营业统计 Service 实现类
|
||||||
@ -96,7 +94,6 @@ public class StoreBusinessServiceImpl implements StoreBusinessService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateStatistics(StatisticsVo vo) {
|
public void updateStatistics(StatisticsVo vo) {
|
||||||
synchronized(getSupermarketLock(vo.getCarteenId())){
|
|
||||||
LocalDate now = LocalDate.now();
|
LocalDate now = LocalDate.now();
|
||||||
if(vo.getTime()!=null){
|
if(vo.getTime()!=null){
|
||||||
now = vo.getTime().toLocalDate();
|
now = vo.getTime().toLocalDate();
|
||||||
@ -106,20 +103,9 @@ public class StoreBusinessServiceImpl implements StoreBusinessService {
|
|||||||
// 获取今天的结束时间 (23:59:59.999)
|
// 获取今天的结束时间 (23:59:59.999)
|
||||||
LocalDateTime endOfDay = LocalDateTime.of(now, LocalTime.MAX);
|
LocalDateTime endOfDay = LocalDateTime.of(now, LocalTime.MAX);
|
||||||
|
|
||||||
List<StoreBusinessDO> storeBusinessDOS = storeBusinessMapper.selectList(Wrappers.<StoreBusinessDO>lambdaQuery()
|
StoreBusinessDO storeBusinessDO = storeBusinessMapper.getTodayBusiness(vo.getCarteenId(), startOfDay, endOfDay);
|
||||||
.between(StoreBusinessDO::getCreateTime, startOfDay, endOfDay)
|
if (storeBusinessDO!=null) {
|
||||||
.eq(StoreBusinessDO::getCarteenId, vo.getCarteenId()));
|
|
||||||
if (CollectionUtil.isNotEmpty(storeBusinessDOS)) {
|
|
||||||
StoreBusinessDO storeBusinessDO = storeBusinessDOS.get(0);
|
|
||||||
|
|
||||||
//重量
|
|
||||||
// if(ObjectUtil.isNotEmpty(vo.getOrderId())){
|
|
||||||
// List<OrderDetailDO> orderDetailDOS = orderDetailMapper.selectList(Wrappers.<OrderDetailDO>lambdaQuery().eq(OrderDetailDO::getOrderId, vo.getOrderId()));
|
|
||||||
// if (CollectionUtil.isNotEmpty(orderDetailDOS)) {
|
|
||||||
// BigDecimal reduce = orderDetailDOS.stream().map(OrderDetailDO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
||||||
// businessDO.setWeigh(businessDO.getWeigh().add(reduce));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//订单数
|
//订单数
|
||||||
storeBusinessDO.setOrderSum(storeBusinessDO.getOrderSum() + vo.getOrderSum());
|
storeBusinessDO.setOrderSum(storeBusinessDO.getOrderSum() + vo.getOrderSum());
|
||||||
|
|
||||||
@ -158,7 +144,7 @@ public class StoreBusinessServiceImpl implements StoreBusinessService {
|
|||||||
|
|
||||||
storeBusinessMapper.updateById(storeBusinessDO);
|
storeBusinessMapper.updateById(storeBusinessDO);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -266,4 +266,6 @@ public interface MemberUserService {
|
|||||||
List<MemberUserDO> getListByMobile(String mobiles);
|
List<MemberUserDO> getListByMobile(String mobiles);
|
||||||
|
|
||||||
void jsonCreate(String filePath,Long storeId);
|
void jsonCreate(String filePath,Long storeId);
|
||||||
|
|
||||||
|
void imgCreate(String filePath,Long storeId);
|
||||||
}
|
}
|
||||||
|
@ -4,31 +4,19 @@ import cn.hutool.core.bean.BeanUtil;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.collection.ListUtil;
|
import cn.hutool.core.collection.ListUtil;
|
||||||
|
import cn.hutool.core.io.FileUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.*;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
|
||||||
import cn.hutool.core.util.ObjUtil;
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
|
||||||
import cn.hutool.core.util.RandomUtil;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import cn.hutool.crypto.digest.DigestUtil;
|
import cn.hutool.crypto.digest.DigestUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.user.vo.*;
|
import cn.iocoder.yudao.module.member.controller.admin.user.vo.*;
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO;
|
import cn.iocoder.yudao.module.member.controller.app.user.vo.*;
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileByWeixinReqVO;
|
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO;
|
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO;
|
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO;
|
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppNutritionDayVo;
|
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppNutritionWeekVO;
|
|
||||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppWeekVO;
|
|
||||||
import cn.iocoder.yudao.module.member.convert.auth.AuthConvert;
|
import cn.iocoder.yudao.module.member.convert.auth.AuthConvert;
|
||||||
import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert;
|
import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
||||||
@ -65,25 +53,18 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.sun.org.apache.bcel.internal.generic.NEW;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.transaction.support.TransactionSynchronization;
|
import org.springframework.transaction.support.TransactionSynchronization;
|
||||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||||
import org.springframework.util.ObjectUtils;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.*;
|
||||||
import java.io.File;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
@ -94,14 +75,10 @@ import java.nio.file.Paths;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.WeekFields;
|
import java.time.temporal.WeekFields;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
@ -1088,4 +1065,154 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void imgCreate(String filePath, Long storeId) {
|
||||||
|
String sourceFolderPath = filePath;
|
||||||
|
String targetFolderPath = "facedata/";
|
||||||
|
ArrayList<MemberUserDO> updateList = new ArrayList<>();
|
||||||
|
List<File> imageFiles = getImagesInFolder(sourceFolderPath);
|
||||||
|
for (File imageFile : imageFiles) {
|
||||||
|
String[] nameAndPhone = extractNameAndPhone(imageFile.getName());
|
||||||
|
String name = nameAndPhone[0].replaceAll(" ", "").replaceAll("_", "");
|
||||||
|
String phoneNumber = nameAndPhone[1];
|
||||||
|
String path=null;
|
||||||
|
if (shouldUpload(phoneNumber)) {
|
||||||
|
try {
|
||||||
|
path=uploadImage(imageFile, targetFolderPath);
|
||||||
|
System.out.println("成功上传图片: " + imageFile.getName() + ",姓名: " + name + ",电话: " + phoneNumber);
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("上传图片 " + imageFile.getName() + " 时出错: " + e.getMessage());
|
||||||
|
}
|
||||||
|
// 用户已经存在
|
||||||
|
MemberUserDO userSelect = memberUserMapper.selectByMobile(phoneNumber);
|
||||||
|
if (userSelect != null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 用户不存在,则进行创建
|
||||||
|
// 生成密码
|
||||||
|
String password = IdUtil.fastSimpleUUID();
|
||||||
|
// 插入用户
|
||||||
|
MemberUserDO user = new MemberUserDO();
|
||||||
|
user.setMobile(phoneNumber);
|
||||||
|
user.setLimitAmount(new BigDecimal("30"));
|
||||||
|
user.setNickname(name);
|
||||||
|
user.setName(name);
|
||||||
|
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
|
||||||
|
user.setPassword(encodePassword(password)); // 加密密码
|
||||||
|
user.setRegisterIp("null");
|
||||||
|
memberUserMapper.insert(user);
|
||||||
|
|
||||||
|
Long id = user.getId();
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(path)) {
|
||||||
|
UserJsonDto userJsonDto = new UserJsonDto();
|
||||||
|
userJsonDto.setUserNickname(name);
|
||||||
|
userJsonDto.setUserId(id);
|
||||||
|
userJsonDto.setUrl(path);
|
||||||
|
userJsonDto.setPhoneNumber(phoneNumber);
|
||||||
|
userJsonDto.setCarteenId(storeId);
|
||||||
|
Long faceId = faceApi.addFace(userJsonDto);
|
||||||
|
user.setFaceId(faceId);
|
||||||
|
updateList.add(user);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println("跳过图片: " + imageFile.getName() + ",姓名: " + name + ",电话: " + phoneNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CollectionUtil.isNotEmpty(updateList)) {
|
||||||
|
memberUserMapper.updateBatch(updateList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 支持的图片文件扩展名
|
||||||
|
private static final String[] IMAGE_EXTENSIONS = {".jpg", ".jpeg", ".png"};
|
||||||
|
// 电话号码正则表达式,这里简单假设为 11 位数字
|
||||||
|
private static final Pattern PHONE_NUMBER_PATTERN = Pattern.compile("\\d{11}");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定文件夹下的所有图片文件
|
||||||
|
* @param folderPath 文件夹的相对路径
|
||||||
|
* @return 图片文件列表
|
||||||
|
*/
|
||||||
|
public static List<File> getImagesInFolder(String folderPath) {
|
||||||
|
List<File> imageFiles = new ArrayList<>();
|
||||||
|
File folder = new File(folderPath);
|
||||||
|
if (folder.exists() && folder.isDirectory()) {
|
||||||
|
File[] files = folder.listFiles();
|
||||||
|
if (files != null) {
|
||||||
|
for (File file : files) {
|
||||||
|
if (isImageFile(file)) {
|
||||||
|
imageFiles.add(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return imageFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断文件是否为图片文件
|
||||||
|
* @param file 文件对象
|
||||||
|
* @return 如果是图片文件返回 true,否则返回 false
|
||||||
|
*/
|
||||||
|
private static boolean isImageFile(File file) {
|
||||||
|
String fileName = file.getName().toLowerCase();
|
||||||
|
for (String extension : IMAGE_EXTENSIONS) {
|
||||||
|
if (fileName.endsWith(extension)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从图片文件名中提取名字和电话号码
|
||||||
|
* @param fileName 图片文件名
|
||||||
|
* @return 包含名字和电话号码的数组,索引 0 为名字,索引 1 为电话号码
|
||||||
|
*/
|
||||||
|
public static String[] extractNameAndPhone(String fileName) {
|
||||||
|
String[] result = new String[2];
|
||||||
|
int index = fileName.lastIndexOf("_");
|
||||||
|
if (index != -1) {
|
||||||
|
result[0] = fileName.substring(0, index);
|
||||||
|
String phonePart = fileName.substring(index + 1, fileName.lastIndexOf("."));
|
||||||
|
Matcher matcher = PHONE_NUMBER_PATTERN.matcher(phonePart);
|
||||||
|
if (matcher.matches()) {
|
||||||
|
result[1] = phonePart;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断是否上传图片
|
||||||
|
* @param phoneNumber 电话号码
|
||||||
|
* @return 如果需要上传返回 true,否则返回 false
|
||||||
|
*/
|
||||||
|
public static boolean shouldUpload(String phoneNumber) {
|
||||||
|
// 这里可以根据具体需求实现判断逻辑,例如判断电话号码是否以某个数字开头等
|
||||||
|
return phoneNumber != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传图片到指定路径
|
||||||
|
* @param sourceFile 源图片文件
|
||||||
|
* @param targetPath 目标路径
|
||||||
|
* @throws IOException 当文件操作出现异常时抛出
|
||||||
|
*/
|
||||||
|
public static String uploadImage(File sourceFile, String targetPath) throws IOException {
|
||||||
|
|
||||||
|
String path = targetPath+IdUtil.getSnowflakeNextIdStr()+"."+ FileUtil.getSuffix(sourceFile);
|
||||||
|
File targetFile = new File(path);
|
||||||
|
try (InputStream in = new FileInputStream(sourceFile);
|
||||||
|
OutputStream out = new FileOutputStream(targetFile)) {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int length;
|
||||||
|
while ((length = in.read(buffer)) > 0) {
|
||||||
|
out.write(buffer, 0, length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user