Merge branch 'cc_20250620_pre_fly' into 'master'
Cc 20250620 pre fly See merge request hangzhou/java/custom_zxjp!118
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package com.cool.store.service;
|
||||
|
||||
import com.cool.store.dto.pre.fry.PreFriedProductsBatchDTO;
|
||||
import com.cool.store.dto.pre.fry.PreFriedProductsDTO;
|
||||
import com.cool.store.dto.pre.fry.PreFriedProductsDetailDTO;
|
||||
import com.cool.store.dto.pre.fry.PreFriedProductsQueryDTO;
|
||||
import com.cool.store.entity.PreFriedProductsDO;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2025/6/20 19:47
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface PreFriedProductsService {
|
||||
|
||||
/**
|
||||
* 新增产品
|
||||
* @param dto 产品信息
|
||||
* @return 产品ID
|
||||
*/
|
||||
Long createProduct(PreFriedProductsDTO dto, String userId);
|
||||
|
||||
/**
|
||||
* 修改产品
|
||||
* @param dto
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
Long updateProduct(PreFriedProductsDTO dto, String userId);
|
||||
|
||||
/**
|
||||
* 批量删除(逻辑删除)
|
||||
* @param batchDTO 包含ID列表和操作人
|
||||
* @return 成功数量
|
||||
*/
|
||||
int batchDelete(PreFriedProductsBatchDTO batchDTO, String userId);
|
||||
|
||||
/**
|
||||
* 批量上下架
|
||||
* @param batchDTO 包含ID列表、目标状态和操作人
|
||||
* @return 成功数量
|
||||
*/
|
||||
int batchUpdateStatus(PreFriedProductsBatchDTO batchDTO, String userId);
|
||||
|
||||
/**
|
||||
* 条件查询产品列表
|
||||
* @param queryDTO 查询条件
|
||||
* @return 产品列表
|
||||
*/
|
||||
PageInfo<PreFriedProductsDetailDTO> queryProducts(PreFriedProductsQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 根据ID查询详情
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
PreFriedProductsDetailDTO queryById(Long id);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.cool.store.service;
|
||||
|
||||
import com.cool.store.context.LoginUserInfo;
|
||||
import com.cool.store.dto.pre.fry.*;
|
||||
import com.cool.store.entity.PreFryQualificationApplyDO;
|
||||
import com.cool.store.userholder.CurrentUser;
|
||||
import com.cool.store.vo.PartnerUserInfoVO;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2025/6/21 14:49
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface PreFryQualificationApplyService {
|
||||
|
||||
/**
|
||||
* 提交预炸资质申请
|
||||
* @param request
|
||||
* @param user
|
||||
* @return
|
||||
*/
|
||||
Long submitApply(ApplyDTO request, PartnerUserInfoVO user);
|
||||
|
||||
/**
|
||||
* 重新提交预炸资质申请
|
||||
* @param request
|
||||
* @param user
|
||||
* @return
|
||||
*/
|
||||
Long reSubmitApply(ApplyDTO request, PartnerUserInfoVO user);
|
||||
|
||||
/**
|
||||
* 根据门店编码和申请类型查询
|
||||
* @param storeCode
|
||||
* @param applyType
|
||||
* @return
|
||||
*/
|
||||
ApplyDTO getByStoreCodeAndApplyType(String storeCode, Integer applyType);
|
||||
|
||||
/**
|
||||
* 根据申请记录id查询审批记录
|
||||
* @param recordId
|
||||
* @return
|
||||
*/
|
||||
List<ApprovalRecordDTO> getApprovalRecordById(Long recordId);
|
||||
|
||||
/**
|
||||
* 管理页面列表
|
||||
* @param query
|
||||
* @return
|
||||
*/
|
||||
PageInfo<ApplyManagementDTO> queryApplyManagementList(ApplyManagementQueryDTO query);
|
||||
|
||||
/**
|
||||
* 获取申请详情
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
ApplyDetailDTO getApplyDetail(Long id);
|
||||
|
||||
/**
|
||||
* audit
|
||||
* @param applyAuditDTO
|
||||
* @param currentUser
|
||||
* @return
|
||||
*/
|
||||
Boolean audit(ApplyAuditDTO applyAuditDTO, LoginUserInfo currentUser);
|
||||
|
||||
/**
|
||||
* 获取门店申请最小的applyType
|
||||
* @param storeCode
|
||||
* @return
|
||||
*/
|
||||
Integer getMinApplyType(String storeCode);
|
||||
|
||||
/**
|
||||
* 根据门店查询当前申请类型状态
|
||||
* @param storeCode
|
||||
* @return
|
||||
*/
|
||||
List<PreFryQualificationApplyDTO> getListByStoreCode(String storeCode);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.cool.store.service;
|
||||
|
||||
import com.cool.store.dto.pre.fry.*;
|
||||
import com.cool.store.vo.PartnerUserInfoVO;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2025/6/23 14:39
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface PreFryRecordsService {
|
||||
|
||||
|
||||
/**
|
||||
* 批量插入
|
||||
* @param addPreFryRecordsDTO
|
||||
* @return
|
||||
*/
|
||||
Boolean batchInsert(AddPreFryRecordsDTO addPreFryRecordsDTO, PartnerUserInfoVO user);
|
||||
|
||||
|
||||
PageInfo<PreFryRecordsDetailDTO> ListByStoreCodeAndDate(FryRecordsQueryDTO dto);
|
||||
|
||||
PreFryRecordsDetailDTO getById(Long id);
|
||||
|
||||
List<DailyFryCountDTO> queryByStoreCode(String storeCode, Long time);
|
||||
|
||||
PageInfo<PreFryRecordsDTO> queryByQueryDTO(PreFryRecordQueryDTO dto);
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
import com.cool.store.dao.PreFriedProductsDAO;
|
||||
import com.cool.store.dto.pre.fry.PreFriedProductsBatchDTO;
|
||||
import com.cool.store.dto.pre.fry.PreFriedProductsDTO;
|
||||
import com.cool.store.dto.pre.fry.PreFriedProductsDetailDTO;
|
||||
import com.cool.store.dto.pre.fry.PreFriedProductsQueryDTO;
|
||||
import com.cool.store.entity.PreFriedProductsDO;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.mapper.PreFriedProductsMapper;
|
||||
import com.cool.store.service.PreFriedProductsService;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2025/6/20 19:47
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class PreFriedProductsServiceImpl implements PreFriedProductsService {
|
||||
@Resource
|
||||
private PreFriedProductsDAO preFriedProductsDAO;
|
||||
|
||||
@Override
|
||||
public Long createProduct(PreFriedProductsDTO dto, String userId) {
|
||||
if (dto==null){
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
PreFriedProductsDO preFriedProductsDO = preFriedProductsDAO.queryByProductCode(dto.getProductCode());
|
||||
if (preFriedProductsDO!=null){
|
||||
throw new ServiceException(ErrorCodeEnum.PRODUCTS_CODE_EXIST);
|
||||
}
|
||||
PreFriedProductsDO product = convertToDO(dto);
|
||||
product.setCreatedTime(new Date());
|
||||
product.setCreatedUserId(userId);
|
||||
preFriedProductsDAO.createProduct(product);
|
||||
return product.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long updateProduct(PreFriedProductsDTO dto, String userId) {
|
||||
if (dto==null||dto.getId() == null){
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
PreFriedProductsDO preFriedProductsDO = preFriedProductsDAO.queryByProductCode(dto.getProductCode());
|
||||
if (preFriedProductsDO!=null && !preFriedProductsDO.getId().equals(dto.getId())){
|
||||
throw new ServiceException(ErrorCodeEnum.PRODUCTS_CODE_EXIST);
|
||||
}
|
||||
PreFriedProductsDO product = convertToDO(dto);
|
||||
product.setUpdatedTime(new Date());
|
||||
product.setUpdatedUserId(userId);
|
||||
preFriedProductsDAO.updateProduct( product);
|
||||
return product.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int batchDelete(PreFriedProductsBatchDTO batchDTO, String userId) {
|
||||
validateBatchOperation(batchDTO);
|
||||
return preFriedProductsDAO.batchDeleteProducts(batchDTO.getIds(), userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int batchUpdateStatus(PreFriedProductsBatchDTO batchDTO, String userId) {
|
||||
validateBatchOperation(batchDTO);
|
||||
if (batchDTO.getStatus() == null || (batchDTO.getStatus() != 0 && batchDTO.getStatus() != 1)) {
|
||||
throw new IllegalArgumentException("状态值必须为0或1");
|
||||
}
|
||||
return preFriedProductsDAO.batchUpdateProductStatus(
|
||||
batchDTO.getIds(),
|
||||
batchDTO.getStatus(),
|
||||
userId
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<PreFriedProductsDetailDTO> queryProducts(PreFriedProductsQueryDTO queryDTO) {
|
||||
PageHelper.startPage(queryDTO.getPageNum(),queryDTO.getPageSize());
|
||||
List<PreFriedProductsDO> dos = preFriedProductsDAO.selectByCondition(
|
||||
queryDTO.getProductCode(),
|
||||
queryDTO.getProductName(),
|
||||
queryDTO.getStatus()
|
||||
);
|
||||
PageInfo preFriedProductsDOPageInfo = new PageInfo<>(dos);
|
||||
List<PreFriedProductsDetailDTO> preFriedProductsDTOS = convertToDTOs(dos);
|
||||
preFriedProductsDOPageInfo.setList(preFriedProductsDTOS);
|
||||
return preFriedProductsDOPageInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PreFriedProductsDetailDTO queryById(Long id) {
|
||||
//查询详情
|
||||
PreFriedProductsDO product = preFriedProductsDAO.queryById(id);
|
||||
if (product == null){
|
||||
throw new ServiceException(ErrorCodeEnum.PRE_FRY_PRODUCT_NOT_EXIST);
|
||||
}
|
||||
return convertToDTO(product);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 转换方法
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
private PreFriedProductsDO convertToDO(PreFriedProductsDTO dto) {
|
||||
PreFriedProductsDO product = new PreFriedProductsDO();
|
||||
BeanUtils.copyProperties(dto, product);
|
||||
return product;
|
||||
}
|
||||
|
||||
private List<PreFriedProductsDetailDTO> convertToDTOs(List<PreFriedProductsDO> dos) {
|
||||
return dos.stream().map(this::convertToDTO).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private PreFriedProductsDetailDTO convertToDTO(PreFriedProductsDO product) {
|
||||
if (product != null) {
|
||||
PreFriedProductsDetailDTO dto = new PreFriedProductsDetailDTO();
|
||||
BeanUtils.copyProperties(product, dto);
|
||||
return dto;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void validateBatchOperation(PreFriedProductsBatchDTO batchDTO) {
|
||||
if (batchDTO.getIds() == null || batchDTO.getIds().isEmpty()) {
|
||||
throw new IllegalArgumentException("ID列表不能为空");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,221 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
import com.cool.store.constants.CommonConstants;
|
||||
import com.cool.store.context.LoginUserInfo;
|
||||
import com.cool.store.dao.PreFryApprovalRecordsDAO;
|
||||
import com.cool.store.dao.PreFryQualificationApplyDAO;
|
||||
import com.cool.store.dto.pre.fry.*;
|
||||
import com.cool.store.entity.PreFryApprovalRecordsDO;
|
||||
import com.cool.store.entity.PreFryQualificationApplyDO;
|
||||
import com.cool.store.enums.AuditOperationTypeEnum;
|
||||
import com.cool.store.enums.AuditStatusEnum;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.service.PreFryQualificationApplyService;
|
||||
import com.cool.store.userholder.CurrentUser;
|
||||
import com.cool.store.utils.CoolDateUtils;
|
||||
import com.cool.store.vo.PartnerUserInfoVO;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2025/6/21 14:49
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class PreFryQualificationApplyServiceImpl implements PreFryQualificationApplyService {
|
||||
|
||||
@Resource
|
||||
private PreFryQualificationApplyDAO preFryQualificationApplyDAO;
|
||||
@Resource
|
||||
private PreFryApprovalRecordsDAO preFryApprovalRecordsDAO;
|
||||
|
||||
|
||||
@Override
|
||||
public Long submitApply(ApplyDTO request, PartnerUserInfoVO user) {
|
||||
// 1. 参数校验
|
||||
validateRequest(request);
|
||||
|
||||
|
||||
// 2. 检查是否已有同类型申请
|
||||
PreFryQualificationApplyDO preFryQualificationApplyDO = preFryQualificationApplyDAO.selectByStoreCodeAndType(request.getStoreCode(), request.getApplyType());
|
||||
if(preFryQualificationApplyDO!=null){
|
||||
throw new ServiceException(ErrorCodeEnum.PRE_FRY_RECORD_EXIST);
|
||||
}
|
||||
|
||||
// 3. 创建申请记录
|
||||
PreFryQualificationApplyDO apply = createApplyRecord(request,user);
|
||||
|
||||
// 4. 创建审批操作记录
|
||||
createApprovalRecord(apply.getId(), AuditOperationTypeEnum.APPLY.getCode(),1, user.getUsername(),"");
|
||||
|
||||
return apply.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long reSubmitApply(ApplyDTO request, PartnerUserInfoVO user) {
|
||||
// 1. 参数校验
|
||||
validateRequest(request);
|
||||
// 2. 检查是否已有同类型申请
|
||||
PreFryQualificationApplyDO preFryQualificationApplyDO = preFryQualificationApplyDAO.selectByStoreCodeAndType(request.getStoreCode(), request.getApplyType());
|
||||
if(preFryQualificationApplyDO!=null&& !preFryQualificationApplyDO.getId().equals(request.getId())){
|
||||
throw new ServiceException(ErrorCodeEnum.PRE_FRY_RECORD_EXIST);
|
||||
}
|
||||
// 3. 创建申请记录
|
||||
PreFryQualificationApplyDO old = preFryQualificationApplyDAO.queryById(request.getId());
|
||||
old.setApplyType(request.getApplyType());
|
||||
old.setColdStorageBoxPhoto(request.getColdStorageBoxPhoto());
|
||||
old.setProtectiveCoverPhoto(request.getProtectiveCoverPhoto());
|
||||
old.setRefrigeratorPlatePhoto(request.getRefrigeratorPlatePhoto());
|
||||
old.setRefrigeratorPhoto(request.getRefrigeratorPhoto());
|
||||
old.setAuditStatus(AuditStatusEnum.TODO.getCode());
|
||||
old.setUpdatedTime(new Date());
|
||||
|
||||
preFryQualificationApplyDAO.updateForce(old);
|
||||
// 4. 创建审批操作记录
|
||||
createApprovalRecord(old.getId(), AuditOperationTypeEnum.APPLY.getCode(),1, user.getUsername(),"");
|
||||
|
||||
return old.getId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ApplyDTO getByStoreCodeAndApplyType(String storeCode, Integer applyType) {
|
||||
if (applyType == null|| StringUtils.isEmpty(storeCode)){
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
PreFryQualificationApplyDO preFryQualificationApplyDO = preFryQualificationApplyDAO.selectByStoreCodeAndType(storeCode, applyType);
|
||||
if (preFryQualificationApplyDO != null) {
|
||||
ApplyDTO applyDTO = new ApplyDTO();
|
||||
BeanUtils.copyProperties(preFryQualificationApplyDO, applyDTO);
|
||||
return applyDTO;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ApprovalRecordDTO> getApprovalRecordById(Long recordId) {
|
||||
if (recordId == null) {
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
List<PreFryApprovalRecordsDO> records = preFryApprovalRecordsDAO.getRecordsByApplyId(recordId);
|
||||
List<ApprovalRecordDTO> result = new ArrayList<>();
|
||||
if (records != null){
|
||||
records.forEach(record -> {
|
||||
ApprovalRecordDTO recordDTO = new ApprovalRecordDTO();
|
||||
BeanUtils.copyProperties(record, recordDTO);
|
||||
result.add(recordDTO);
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<ApplyManagementDTO> queryApplyManagementList(ApplyManagementQueryDTO query) {
|
||||
PageHelper.startPage(query.getPageNum(), query.getPageSize());
|
||||
List<ApplyManagementDTO> applyManagementDTOS = preFryQualificationApplyDAO.selectApplyManagementList(query);
|
||||
return new PageInfo<>(applyManagementDTOS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApplyDetailDTO getApplyDetail(Long id) {
|
||||
ApplyDetailDTO applyDetail = preFryQualificationApplyDAO.getApplyDetail(id);
|
||||
if (applyDetail==null){
|
||||
throw new ServiceException(ErrorCodeEnum.PRE_FRY_APPLY_NOT_EXIST);
|
||||
}
|
||||
return applyDetail;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean audit(ApplyAuditDTO applyAuditDTO, LoginUserInfo currentUser) {
|
||||
PreFryQualificationApplyDO preFryQualificationApplyDO = preFryQualificationApplyDAO.queryById(applyAuditDTO.getId());
|
||||
if (preFryQualificationApplyDO==null){
|
||||
throw new ServiceException(ErrorCodeEnum.PRE_FRY_APPLY_NOT_EXIST);
|
||||
}
|
||||
preFryQualificationApplyDO.setAuditStatus(applyAuditDTO.getAuditStatus());
|
||||
preFryQualificationApplyDAO.updateForce(preFryQualificationApplyDO);
|
||||
createApprovalRecord(applyAuditDTO.getId(), 2,applyAuditDTO.getAuditStatus(),currentUser.getName(),applyAuditDTO.getAuditRemark());
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getMinApplyType(String storeCode) {
|
||||
PreFryQualificationApplyDO minApplyTypeByStoreCode = preFryQualificationApplyDAO.getMinApplyTypeByStoreCode(storeCode);
|
||||
if (minApplyTypeByStoreCode == null){
|
||||
return -1;
|
||||
}
|
||||
return minApplyTypeByStoreCode.getApplyType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PreFryQualificationApplyDTO> getListByStoreCode(String storeCode) {
|
||||
if (StringUtils.isBlank(storeCode)) {
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
List<PreFryQualificationApplyDO> preFryQualificationApplyDOS = preFryQualificationApplyDAO.listByStoreCode(storeCode);
|
||||
List<PreFryQualificationApplyDTO> preFryQualificationApplyDTOS = new ArrayList<>();
|
||||
preFryQualificationApplyDOS.forEach(x->{
|
||||
PreFryQualificationApplyDTO preFryQualificationApplyDTO = new PreFryQualificationApplyDTO();
|
||||
preFryQualificationApplyDTO.setId(x.getId());
|
||||
preFryQualificationApplyDTO.setApplyType(x.getApplyType());
|
||||
preFryQualificationApplyDTO.setAuditStatus(x.getAuditStatus());
|
||||
preFryQualificationApplyDTO.setStoreCode(x.getStoreCode());
|
||||
preFryQualificationApplyDTOS.add(preFryQualificationApplyDTO);
|
||||
});
|
||||
return preFryQualificationApplyDTOS;
|
||||
}
|
||||
|
||||
|
||||
private void validateRequest(ApplyDTO request) {
|
||||
if (request == null || StringUtils.isBlank(request.getStoreCode())
|
||||
|| request.getApplyType() == null) {
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
}
|
||||
|
||||
private PreFryQualificationApplyDO createApplyRecord(ApplyDTO request,PartnerUserInfoVO user) {
|
||||
PreFryQualificationApplyDO apply = new PreFryQualificationApplyDO();
|
||||
BeanUtils.copyProperties(request, apply);
|
||||
apply.setAuditStatus(AuditStatusEnum.TODO.getCode());
|
||||
apply.setCreatedTime(new Date());
|
||||
apply.setCreatedUserId(user.getPartnerId());
|
||||
apply.setApplyCode(getPreFlyQualificationApplyCode());
|
||||
preFryQualificationApplyDAO.createQualificationApply(apply);
|
||||
return apply;
|
||||
}
|
||||
|
||||
private void createApprovalRecord(Long applyId, Integer recordType,Integer operationStatus,String userName,String remark) {
|
||||
PreFryApprovalRecordsDO record = new PreFryApprovalRecordsDO();
|
||||
record.setApplyId(applyId);
|
||||
record.setRecordType(recordType);
|
||||
record.setOperationStatus(operationStatus);
|
||||
record.setOperatorName(userName);
|
||||
record.setRemark(remark);
|
||||
record.setCreatedTime(new Date());
|
||||
preFryApprovalRecordsDAO.createApprovalRecord(record);
|
||||
}
|
||||
|
||||
public String getPreFlyQualificationApplyCode() {
|
||||
//当前日期
|
||||
String today = CoolDateUtils.getToday();
|
||||
return "13" + today + String.format("%04d", ThreadLocalRandom.current().nextInt(100000));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,325 @@
|
||||
package com.cool.store.service.impl;
|
||||
|
||||
import com.cool.store.dao.*;
|
||||
import com.cool.store.dto.pre.fry.*;
|
||||
import com.cool.store.entity.*;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.enums.PreFryApplyTypeEnum;
|
||||
import com.cool.store.enums.PreFryStageEnum;
|
||||
import com.cool.store.enums.ViolationEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.service.PreFryRecordsService;
|
||||
import com.cool.store.utils.CoolDateUtils;
|
||||
import com.cool.store.utils.poi.DateUtils;
|
||||
import com.cool.store.vo.PartnerUserInfoVO;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cool.store.enums.PreFryStageEnum.*;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2025/6/23 14:39
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class PreFryRecordsServiceImpl implements PreFryRecordsService {
|
||||
|
||||
|
||||
@Resource
|
||||
PreFryRecordsDAO preFryRecordsDAO;
|
||||
|
||||
@Resource
|
||||
PreFryStageChangesDAO preFryStageChangesDAO;
|
||||
@Resource
|
||||
PreFryQualificationApplyDAO preFryQualificationApplyDAO;
|
||||
@Resource
|
||||
PreFriedProductsDAO preFriedProductsDAO;
|
||||
|
||||
|
||||
@Override
|
||||
public Boolean batchInsert(AddPreFryRecordsDTO addPreFryRecordsDTO, PartnerUserInfoVO user) {
|
||||
if (CollectionUtils.isEmpty(addPreFryRecordsDTO.getRecords())|| CollectionUtils.isEmpty(addPreFryRecordsDTO.getRecords())){
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
//查询门店当前最高优先级申请类型
|
||||
PreFryQualificationApplyDO minApplyTypeByStoreCode = preFryQualificationApplyDAO.getMinApplyTypeByStoreCode(addPreFryRecordsDTO.getStoreCode());
|
||||
if (minApplyTypeByStoreCode==null){
|
||||
throw new ServiceException(ErrorCodeEnum.PRE_FRY_APPLY_NOT_EXIST);
|
||||
}
|
||||
if (addPreFryRecordsDTO!=null&&CollectionUtils.isNotEmpty(addPreFryRecordsDTO.getRecords())){
|
||||
List<Long> productList = addPreFryRecordsDTO.getRecords().stream().map(AddPreFryRecordsDetailDTO::getProductId).collect(Collectors.toList());
|
||||
List<PreFriedProductsDO> preFriedProductsDOS = preFriedProductsDAO.selectByProductIds(productList);
|
||||
//校验是否包含下架的产品 recordId是空的时候是新增 是有新增的时候限制
|
||||
if (preFriedProductsDOS.stream().anyMatch(e->e.getStatus()==0)&&addPreFryRecordsDTO.getRecords().get(0).getRecordId()==null){
|
||||
throw new ServiceException(ErrorCodeEnum.PRODUCTS_STATUS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//如果出现优先级升高的情况 优先级低的只有报废可选择 1的优先级最高 3最低
|
||||
if (minApplyTypeByStoreCode.getApplyType()<addPreFryRecordsDTO.getApplyType()
|
||||
&&addPreFryRecordsDTO.getCurrentStage()!= DISCARDED.getCode()){
|
||||
//当前有更优选择,请确认
|
||||
throw new ServiceException(ErrorCodeEnum.CURRENT_STAGE_NOT_OPERATION);
|
||||
}
|
||||
//只有当最高类型是1/3且是预炸完成 或者 2 且放入展示柜 新增一条预炸记录 其他情况只新增阶段记录表
|
||||
List<PreFryStageChangesDO> list = new ArrayList<>();
|
||||
if (addPreFryRecordsFlag(minApplyTypeByStoreCode.getApplyType(), addPreFryRecordsDTO.getCurrentStage())){
|
||||
addPreFryRecordsDTO.getRecords().forEach(x->{
|
||||
if (x.getProductId()==null){
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
PreFryRecordsDO preFryRecordsDO = new PreFryRecordsDO();
|
||||
preFryRecordsDO.setStoreCode(addPreFryRecordsDTO.getStoreCode());
|
||||
preFryRecordsDO.setProductId(x.getProductId());
|
||||
preFryRecordsDO.setFryDate(new Date());
|
||||
preFryRecordsDO.setRecordCode(getRecordCode());
|
||||
preFryRecordsDO.setFryCompleteTime(new Date());
|
||||
preFryRecordsDO.setLatestSaleTime(getLatestSaleTime(minApplyTypeByStoreCode.getApplyType()));
|
||||
preFryRecordsDO.setCurrentStage(addPreFryRecordsDTO.getCurrentStage());
|
||||
preFryRecordsDO.setCurrentApplyType(minApplyTypeByStoreCode.getApplyType());
|
||||
preFryRecordsDAO.insert(preFryRecordsDO);
|
||||
PreFryStageChangesDO preFryStageChangesDO = new PreFryStageChangesDO();
|
||||
preFryStageChangesDO.setStage(preFryRecordsDO.getCurrentStage());
|
||||
preFryStageChangesDO.setRecordId(preFryRecordsDO.getId());
|
||||
preFryStageChangesDO.setImage1(x.getImage1());
|
||||
preFryStageChangesDO.setImage2(x.getImage2());
|
||||
preFryStageChangesDO.setOperatorName(user.getUsername());
|
||||
list.add(preFryStageChangesDO);
|
||||
});
|
||||
}else {
|
||||
List<Long> recordList= new ArrayList<>();
|
||||
addPreFryRecordsDTO.getRecords().forEach(x->{
|
||||
if (x.getRecordId()==null){
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
PreFryStageChangesDO preFryStageChangesDO = new PreFryStageChangesDO();
|
||||
preFryStageChangesDO.setStage(addPreFryRecordsDTO.getCurrentStage());
|
||||
preFryStageChangesDO.setRecordId(x.getRecordId());
|
||||
preFryStageChangesDO.setImage1(x.getImage1());
|
||||
preFryStageChangesDO.setImage2(x.getImage2());
|
||||
preFryStageChangesDO.setOperatorName(user.getUsername());
|
||||
preFryStageChangesDO.setCreatedTime(new Date());
|
||||
recordList.add(x.getRecordId());
|
||||
list.add(preFryStageChangesDO);
|
||||
});
|
||||
preFryRecordsDAO.batchUpdateStageByIds(recordList,addPreFryRecordsDTO.getCurrentStage());
|
||||
handleViolationFlag(recordList,addPreFryRecordsDTO.getApplyType(),addPreFryRecordsDTO.getCurrentStage(),list);
|
||||
}
|
||||
preFryStageChangesDAO.batchInsert(list);
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
|
||||
private void handleViolationFlag(List<Long> recordList ,Integer applyType,Integer currentStage,List<PreFryStageChangesDO> list) {
|
||||
//如果最高级优先级是冷藏展示柜 计算是否违规 冷却时间小于15分钟或者大于25分钟 违规 冰箱取出时间距离预炸完成时间超过24小时
|
||||
if (PreFryApplyTypeEnum.HAS_REFRIGERATED_DISPLAY.getCode()==applyType&&
|
||||
(STORED_IN_DISPLAY_CABINET.getCode()==currentStage||STORED_IN_FRIDGE.getCode()==currentStage)){
|
||||
List<PreFryRecordsDO> records = preFryRecordsDAO.queryByIds(recordList);
|
||||
Map<Long,PreFryRecordsDO> recordMap = records.stream().collect(Collectors.toMap(PreFryRecordsDO::getId, data->data));
|
||||
//list 转为 map 记录id与创建时间
|
||||
Map<Long,Date> listMap = list.stream().collect(Collectors.toMap(PreFryStageChangesDO::getRecordId, PreFryStageChangesDO::getCreatedTime));
|
||||
List<ViolationDTO> violationList = new ArrayList<>();
|
||||
if (STORED_IN_DISPLAY_CABINET.getCode()==currentStage){
|
||||
recordList.forEach(x->{
|
||||
PreFryRecordsDO preFryRecordsDO = recordMap.get(x);
|
||||
Long time = getTime(preFryRecordsDO.getFryCompleteTime(), listMap.get(x));
|
||||
if (time!=null&&(time<15||time>25)){
|
||||
ViolationDTO violationDTO = new ViolationDTO();
|
||||
violationDTO.setId(x);
|
||||
violationDTO.setViolationFlag(ViolationEnum.COOLING_TIME_EXCEEDED.getCode());
|
||||
violationDTO.setViolationReason(String.format(",%d,", ViolationEnum.COOLING_TIME_EXCEEDED.getCode()));
|
||||
violationList.add(violationDTO);
|
||||
}
|
||||
});
|
||||
}else if (STORED_IN_FRIDGE.getCode()==currentStage){
|
||||
recordList.forEach(x->{
|
||||
PreFryRecordsDO preFryRecordsDO = recordMap.get(x);
|
||||
Long time = getTime(preFryRecordsDO.getFryCompleteTime(), listMap.get(x));
|
||||
if (time!=null&&time>24*60){
|
||||
ViolationDTO violationDTO = new ViolationDTO();
|
||||
violationDTO.setId(x);
|
||||
violationDTO.setViolationFlag(ViolationEnum.STORAGE_TIME_EXCEEDED.getCode());
|
||||
if (StringUtils.isEmpty(preFryRecordsDO.getViolationReason())){
|
||||
violationDTO.setViolationReason(String.format(",%d,", ViolationEnum.STORAGE_TIME_EXCEEDED.getCode()));
|
||||
}else {
|
||||
violationDTO.setViolationReason(preFryRecordsDO.getViolationReason()+String.format("%d,", ViolationEnum.STORAGE_TIME_EXCEEDED.getCode()));
|
||||
}
|
||||
violationList.add(violationDTO);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
if (!violationList.isEmpty()) {
|
||||
preFryRecordsDAO.batchUpdateViolation(violationList);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private Long getTime(Date startTime,Date endTime){
|
||||
if (startTime==null||endTime==null){
|
||||
return null;
|
||||
}
|
||||
return CoolDateUtils.getMinutesBetween(startTime,endTime);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public PageInfo<PreFryRecordsDetailDTO> ListByStoreCodeAndDate(FryRecordsQueryDTO dto) {
|
||||
PageHelper.startPage(dto.getPageNum(),dto.getPageSize());
|
||||
if (dto.getCurrentDate()==null|| StringUtils.isBlank(dto.getStoreCode())){
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
List<PreFryRecordsDO> preFryRecordsDOS = preFryRecordsDAO.selectByStoreAndDateStage(dto.getStoreCode(),dto.getApplyType(), DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,dto.getCurrentDate()));
|
||||
PageInfo result = new PageInfo<>(preFryRecordsDOS);
|
||||
if (CollectionUtils.isEmpty(preFryRecordsDOS)){
|
||||
return result;
|
||||
}
|
||||
List<Long> recordIdList = preFryRecordsDOS.stream().map(PreFryRecordsDO::getId).collect(Collectors.toList());
|
||||
List<PreFryStageImagesDTO> stageImagesDTOS = preFryStageChangesDAO.selectByRecordIdList(recordIdList);
|
||||
List<Long> productIdList = preFryRecordsDOS.stream().map(PreFryRecordsDO::getProductId).collect(Collectors.toList());
|
||||
List<PreFriedProductsDO> preFriedProductsDOS = preFriedProductsDAO.selectByProductIds(productIdList);
|
||||
Map<Long, PreFriedProductsDO> preFriedProductsDOSMap = preFriedProductsDOS.stream().collect(Collectors.toMap(PreFriedProductsDO::getId, x -> x));
|
||||
//将数据根据recordId分组 并根据id排序
|
||||
Map<Long, List<PreFryStageImagesDTO>> stageImagesDTOMap =
|
||||
stageImagesDTOS.stream().collect(Collectors.groupingBy(PreFryStageImagesDTO::getRecordId));
|
||||
List<PreFryRecordsDetailDTO> list = new ArrayList<>();
|
||||
preFryRecordsDOS.forEach(x->{
|
||||
PreFryRecordsDetailDTO preFryRecordsDetailDTO = new PreFryRecordsDetailDTO();
|
||||
preFryRecordsDetailDTO.setId(x.getId());
|
||||
preFryRecordsDetailDTO.setStoreCode(x.getStoreCode());
|
||||
preFryRecordsDetailDTO.setProductId(x.getProductId());
|
||||
preFryRecordsDetailDTO.setProductCode(preFriedProductsDOSMap.getOrDefault(x.getProductId(),new PreFriedProductsDO()).getProductCode());
|
||||
preFryRecordsDetailDTO.setProductName(preFriedProductsDOSMap.getOrDefault(x.getProductId(),new PreFriedProductsDO()).getProductName());
|
||||
preFryRecordsDetailDTO.setProductImageUrl(preFriedProductsDOSMap.getOrDefault(x.getProductId(),new PreFriedProductsDO()).getProductImage());
|
||||
preFryRecordsDetailDTO.setFryCompleteTime(x.getFryCompleteTime());
|
||||
preFryRecordsDetailDTO.setLatestSaleTime(x.getLatestSaleTime());
|
||||
preFryRecordsDetailDTO.setCurrentStage(x.getCurrentStage());
|
||||
preFryRecordsDetailDTO.setCurrentApplyType(x.getCurrentApplyType());
|
||||
preFryRecordsDetailDTO.setStageHistory(stageImagesDTOMap.getOrDefault(x.getId(),new ArrayList<>()));
|
||||
list.add(preFryRecordsDetailDTO);
|
||||
});
|
||||
result.setList( list);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Resource
|
||||
StoreDao storeDao;
|
||||
|
||||
@Override
|
||||
public PreFryRecordsDetailDTO getById(Long id) {
|
||||
PreFryRecordsDO preFryRecordsDO = preFryRecordsDAO.queryById(id);
|
||||
if (preFryRecordsDO == null) {
|
||||
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
|
||||
}
|
||||
List<PreFryStageImagesDTO> preFryStageImagesDTOS = preFryStageChangesDAO.selectByRecordId(id);
|
||||
PreFriedProductsDO preFriedProductsDO = preFriedProductsDAO.queryById(preFryRecordsDO.getProductId());
|
||||
StoreDO store = storeDao.getByStoreNum(preFryRecordsDO.getStoreCode());
|
||||
PreFryRecordsDetailDTO preFryRecordsDetailDTO = new PreFryRecordsDetailDTO();
|
||||
if (store != null) {
|
||||
preFryRecordsDetailDTO.setStoreName(store.getStoreName());
|
||||
}
|
||||
preFryRecordsDetailDTO.setId(preFryRecordsDO.getId());
|
||||
preFryRecordsDetailDTO.setStoreCode(preFryRecordsDO.getStoreCode());
|
||||
preFryRecordsDetailDTO.setProductId(preFryRecordsDO.getProductId());
|
||||
preFryRecordsDetailDTO.setRecordCode(preFryRecordsDO.getRecordCode());
|
||||
if (preFriedProductsDO!=null){
|
||||
preFryRecordsDetailDTO.setProductName(preFriedProductsDO.getProductName());
|
||||
preFryRecordsDetailDTO.setProductImageUrl(preFriedProductsDO.getProductImage());
|
||||
preFryRecordsDetailDTO.setProductCode(preFriedProductsDO.getProductCode());
|
||||
}
|
||||
preFryRecordsDetailDTO.setFryCompleteTime(preFryRecordsDO.getFryCompleteTime());
|
||||
preFryRecordsDetailDTO.setLatestSaleTime(preFryRecordsDO.getLatestSaleTime());
|
||||
preFryRecordsDetailDTO.setCurrentStage(preFryRecordsDO.getCurrentStage());
|
||||
preFryRecordsDetailDTO.setCurrentApplyType(preFryRecordsDO.getCurrentApplyType());
|
||||
preFryRecordsDetailDTO.setViolationFlag(preFryRecordsDO.getViolationFlag());
|
||||
preFryRecordsDetailDTO.setViolationReason(getViolationReasonChinese(preFryRecordsDO.getViolationReason()));
|
||||
preFryRecordsDetailDTO.setStageHistory(preFryStageImagesDTOS);
|
||||
return preFryRecordsDetailDTO;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<DailyFryCountDTO> queryByStoreCode(String storeCode,Long time) {
|
||||
return preFryRecordsDAO.selectDailyFryCountInCurrentMonth(storeCode, time);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<PreFryRecordsDTO> queryByQueryDTO(PreFryRecordQueryDTO dto) {
|
||||
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
|
||||
List<PreFryRecordsDTO> preFryRecordQueryDTOS = preFryRecordsDAO.selectByQueryDTO(dto);
|
||||
preFryRecordQueryDTOS.forEach(x->{
|
||||
x.setViolationReason(getViolationReasonChinese(x.getViolationReason()));
|
||||
});
|
||||
PageInfo<PreFryRecordsDTO> preFryRecordQueryDTOPageInfo = new PageInfo<>(preFryRecordQueryDTOS);
|
||||
return preFryRecordQueryDTOPageInfo;
|
||||
}
|
||||
|
||||
|
||||
private Boolean addPreFryRecordsFlag(Integer applyType,Integer stage){
|
||||
if (applyType== PreFryApplyTypeEnum.HAS_REFRIGERATED_DISPLAY.getCode() && stage== PRE_FRY_COMPLETED.getCode()){
|
||||
return Boolean.TRUE;
|
||||
}else if (applyType == PreFryApplyTypeEnum.NO_DISPLAY.getCode() && stage== PRE_FRY_COMPLETED.getCode()){
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
if (applyType==PreFryApplyTypeEnum.HAS_NORMAL_DISPLAY.getCode() && stage== STORED_IN_DISPLAY_CABINET.getCode()){
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
private Date getLatestSaleTime(Integer applyType) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
if (applyType == PreFryApplyTypeEnum.HAS_REFRIGERATED_DISPLAY.getCode()) {
|
||||
// 冷藏展示柜加24小时
|
||||
calendar.add(Calendar.HOUR_OF_DAY, 24);
|
||||
} else {
|
||||
// 常温展示柜或无展示柜加4小时
|
||||
calendar.add(Calendar.HOUR_OF_DAY, 4);
|
||||
}
|
||||
return calendar.getTime();
|
||||
}
|
||||
|
||||
public String getRecordCode() {
|
||||
//当前日期
|
||||
String today = CoolDateUtils.getToday();
|
||||
return "14" + today + String.format("%04d", ThreadLocalRandom.current().nextInt(100000));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据违规原因字符串获取中文描述
|
||||
* @param violationReason 违规原因字符串,格式如 ",1,2,"、",1," 或 ",2,"
|
||||
* @return 格式化后的中文违规原因,如 "冷却时间超标,存储时间超标"
|
||||
*/
|
||||
public String getViolationReasonChinese(String violationReason) {
|
||||
if (StringUtils.isBlank(violationReason)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// 分割字符串并过滤有效数字
|
||||
List<Integer> reasonCodes = Arrays.stream(violationReason.split(","))
|
||||
.filter(StringUtils::isNotBlank)
|
||||
.map(String::trim)
|
||||
.map(Integer::valueOf)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 转换为中文描述
|
||||
return reasonCodes.stream()
|
||||
.map(code -> ViolationEnum.getByCode(code))
|
||||
.filter(Objects::nonNull)
|
||||
.map(ViolationEnum::getDescription)
|
||||
.collect(Collectors.joining(","));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -203,9 +203,9 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
* @param millis 毫秒数
|
||||
* @return 时间
|
||||
*/
|
||||
public static String getDateByMillis(long millis) {
|
||||
public static String getDateByMillis(long millis,String format) {
|
||||
//12小时制
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
|
||||
Date date = new Date();
|
||||
date.setTime(millis);
|
||||
return simpleDateFormat.format(date);
|
||||
|
||||
Reference in New Issue
Block a user