diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index 83d6764e6..94cd9cc7b 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -283,6 +283,9 @@ public enum ErrorCodeEnum { CURRENT_STAGE_NOT_OPERATION(1511030,"当前有更优选择,请确认!",null), PRODUCTS_STATUS(1511031,"包含下架的产品,请重新选择后提交!",null), PRODUCTS_CODE_EXIST(1511032,"产品编码已存在!",null), + PRODUCTS_RECORD_NOT_EXIST(1511033,"预炸记录不存在!",null), + PRODUCTS_DISCARDED(1511034,"产品已报销,无法操作",null), + PRODUCTS_SALES_COMPLETED(1511034,"含有销售完成的产品,无法批量报销",null), ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/PreFryStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/PreFryStageEnum.java index ff51e3268..7fe1a745c 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/PreFryStageEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/PreFryStageEnum.java @@ -10,7 +10,8 @@ public enum PreFryStageEnum { STORED_IN_DISPLAY_CABINET(2, "存入展示柜"), STORED_IN_FRIDGE(3, "放入冰箱"), TAKEN_OUT_NEXT_DAY(4, "次日拿出"), - DISCARDED(5, "报废"); + DISCARDED(5, "报废"), + SALES_COMPLETED(6, "销售完成"); private final int code; private final String description; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PreFryRecordsDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PreFryRecordsDAO.java index 1b1a6fda7..3fc961423 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PreFryRecordsDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PreFryRecordsDAO.java @@ -53,6 +53,11 @@ public class PreFryRecordsDAO { return preFryRecordsMapper.selectByPrimaryKey(id); } + + public int updateByPrimaryKeySelective(PreFryRecordsDO preFryRecordsDO) { + return preFryRecordsMapper.updateByPrimaryKeySelective(preFryRecordsDO); + } + public List queryByIds(List ids) { if (CollectionUtils.isEmpty(ids)) { return new ArrayList<>(); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/PreFryRecordsService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/PreFryRecordsService.java index e27131478..cd9b5eaea 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/PreFryRecordsService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/PreFryRecordsService.java @@ -26,6 +26,8 @@ public interface PreFryRecordsService { PreFryRecordsDetailDTO getById(Long id); + Boolean salesCompleted(Long id); + List queryByStoreCode(String storeCode, Long time); PageInfo queryByQueryDTO(PreFryRecordQueryDTO dto); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PreFryRecordsServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PreFryRecordsServiceImpl.java index ee2c892fe..ef1d9b8dc 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PreFryRecordsServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PreFryRecordsServiceImpl.java @@ -17,6 +17,7 @@ import com.github.pagehelper.PageInfo; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; @@ -48,6 +49,7 @@ public class PreFryRecordsServiceImpl implements PreFryRecordsService { @Override + @Transactional(rollbackFor = Exception.class) public Boolean batchInsert(AddPreFryRecordsDTO addPreFryRecordsDTO, PartnerUserInfoVO user) { if (CollectionUtils.isEmpty(addPreFryRecordsDTO.getRecords())|| CollectionUtils.isEmpty(addPreFryRecordsDTO.getRecords())){ throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); @@ -115,41 +117,47 @@ public class PreFryRecordsServiceImpl implements PreFryRecordsService { list.add(preFryStageChangesDO); }); preFryRecordsDAO.batchUpdateStageByIds(recordList,addPreFryRecordsDTO.getCurrentStage()); - handleViolationFlag(recordList,addPreFryRecordsDTO.getApplyType(),addPreFryRecordsDTO.getCurrentStage(),list); + List preFryRecordsDOS = preFryRecordsDAO.queryByIds(recordList); + handleViolationFlag(preFryRecordsDOS,addPreFryRecordsDTO.getApplyType(),addPreFryRecordsDTO.getCurrentStage(),list); + if (DISCARDED.getCode()==addPreFryRecordsDTO.getCurrentStage()){ + //只要有一条记录是销售完成的 不能报销 + if (preFryRecordsDOS.stream().anyMatch(x->x.getCurrentStage()==SALES_COMPLETED.getCode())){ + throw new ServiceException(ErrorCodeEnum.PRODUCTS_SALES_COMPLETED); + } + } } preFryStageChangesDAO.batchInsert(list); return Boolean.TRUE; } - private void handleViolationFlag(List recordList ,Integer applyType,Integer currentStage,List list) { + private void handleViolationFlag(List records ,Integer applyType,Integer currentStage,List list) { //如果最高级优先级是冷藏展示柜 计算是否违规 冷却时间小于15分钟或者大于25分钟 违规 冰箱取出时间距离预炸完成时间超过24小时 if (PreFryApplyTypeEnum.HAS_REFRIGERATED_DISPLAY.getCode()==applyType&& (STORED_IN_DISPLAY_CABINET.getCode()==currentStage||STORED_IN_FRIDGE.getCode()==currentStage)){ - List records = preFryRecordsDAO.queryByIds(recordList); Map recordMap = records.stream().collect(Collectors.toMap(PreFryRecordsDO::getId, data->data)); //list 转为 map 记录id与创建时间 Map listMap = list.stream().collect(Collectors.toMap(PreFryStageChangesDO::getRecordId, PreFryStageChangesDO::getCreatedTime)); List 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)); + records.forEach(x->{ + PreFryRecordsDO preFryRecordsDO = recordMap.get(x.getId()); + Long time = getTime(preFryRecordsDO.getFryCompleteTime(), listMap.get(x.getId())); if (time!=null&&(time<15||time>25)){ ViolationDTO violationDTO = new ViolationDTO(); - violationDTO.setId(x); + violationDTO.setId(x.getId()); 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)); + records.forEach(x->{ + PreFryRecordsDO preFryRecordsDO = recordMap.get(x.getId()); + Long time = getTime(preFryRecordsDO.getFryCompleteTime(), listMap.get(x.getId())); if (time!=null&&time>24*60){ ViolationDTO violationDTO = new ViolationDTO(); - violationDTO.setId(x); + violationDTO.setId(x.getId()); violationDTO.setViolationFlag(ViolationEnum.STORAGE_TIME_EXCEEDED.getCode()); if (StringUtils.isEmpty(preFryRecordsDO.getViolationReason())){ violationDTO.setViolationReason(String.format(",%d,", ViolationEnum.STORAGE_TIME_EXCEEDED.getCode())); @@ -249,6 +257,21 @@ public class PreFryRecordsServiceImpl implements PreFryRecordsService { return preFryRecordsDetailDTO; } + @Override + public Boolean salesCompleted(Long id) { + PreFryRecordsDO preFryRecordsDO = preFryRecordsDAO.queryById(id); + if (preFryRecordsDO == null) { + throw new ServiceException(ErrorCodeEnum.PRODUCTS_RECORD_NOT_EXIST); + } + if (preFryRecordsDO.getCurrentStage() == PreFryStageEnum.DISCARDED.getCode()){ + throw new ServiceException(ErrorCodeEnum.PRODUCTS_DISCARDED); + } + preFryRecordsDO.setCurrentStage(SALES_COMPLETED.getCode()); + preFryRecordsDO.setUpdatedTime(new Date()); + preFryRecordsDAO.updateByPrimaryKeySelective(preFryRecordsDO); + return Boolean.TRUE; + } + @Override public List queryByStoreCode(String storeCode,Long time) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/PreFryRecordsController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/PreFryRecordsController.java index e5bdf49df..e84d6f4bf 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/PreFryRecordsController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/PreFryRecordsController.java @@ -44,7 +44,12 @@ public class PreFryRecordsController { log.info("预炸记录详情:{}", JSONObject.toJSONString(id)); return ResponseResult.success(preFryRecordsService.getById(id)); } - + @ApiOperation("销售完成") + @GetMapping("/salesCompleted") + public ResponseResult salesCompleted(@RequestParam(required = true, value = "id") Long id) { + log.info("预炸记录详情:{}", JSONObject.toJSONString(id)); + return ResponseResult.success(preFryRecordsService.salesCompleted(id)); + } @ApiOperation("预炸批量新增") @PostMapping("/batchAdd")