feat:预炸

This commit is contained in:
苏竹红
2025-06-24 11:34:43 +08:00
parent 1dab792aad
commit 7eb5bf8059
9 changed files with 181 additions and 18 deletions

View File

@@ -1,17 +1,12 @@
package com.cool.store.service.impl;
import com.cool.store.dao.PreFriedProductsDAO;
import com.cool.store.dao.PreFryQualificationApplyDAO;
import com.cool.store.dao.PreFryRecordsDAO;
import com.cool.store.dao.PreFryStageChangesDAO;
import com.cool.store.dao.*;
import com.cool.store.dto.pre.fry.*;
import com.cool.store.entity.PreFriedProductsDO;
import com.cool.store.entity.PreFryQualificationApplyDO;
import com.cool.store.entity.PreFryRecordsDO;
import com.cool.store.entity.PreFryStageChangesDO;
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;
@@ -97,15 +92,72 @@ public class PreFryRecordsServiceImpl implements PreFryRecordsService {
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());
@@ -146,6 +198,9 @@ public class PreFryRecordsServiceImpl implements PreFryRecordsService {
return result;
}
@Resource
StoreDao storeDao;
@Override
public PreFryRecordsDetailDTO getById(Long id) {
PreFryRecordsDO preFryRecordsDO = preFryRecordsDAO.queryById(id);
@@ -154,21 +209,30 @@ public class PreFryRecordsServiceImpl implements PreFryRecordsService {
}
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());
preFryRecordsDetailDTO.setProductName(preFriedProductsDO.getProductName());
preFryRecordsDetailDTO.setProductImageUrl(preFriedProductsDO.getProductImage());
if (preFriedProductsDO!=null){
preFryRecordsDetailDTO.setProductName(preFriedProductsDO.getProductName());
preFryRecordsDetailDTO.setProductImageUrl(preFriedProductsDO.getProductImage());
}
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);
@@ -178,6 +242,9 @@ public class PreFryRecordsServiceImpl implements PreFryRecordsService {
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;
}
@@ -213,5 +280,30 @@ public class PreFryRecordsServiceImpl implements PreFryRecordsService {
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(""));
}
}