|
@@ -0,0 +1,165 @@
|
|
|
+package com.fjhx.service.water.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.base.StorageBaseEntity;
|
|
|
+import com.fjhx.constants.StatusConstant;
|
|
|
+import com.fjhx.entity.material.Material;
|
|
|
+import com.fjhx.entity.water.WaterBack;
|
|
|
+import com.fjhx.entity.water.WaterBackDetails;
|
|
|
+import com.fjhx.mapper.water.WaterBackMapper;
|
|
|
+import com.fjhx.params.water.WaterBackAddVo;
|
|
|
+import com.fjhx.params.water.WaterBackVo;
|
|
|
+import com.fjhx.service.material.MaterialService;
|
|
|
+import com.fjhx.service.water.WaterBackDetailsService;
|
|
|
+import com.fjhx.service.water.WaterBackService;
|
|
|
+import com.fjhx.utils.UserClientUtil;
|
|
|
+import org.springblade.core.secure.utils.AuthUtil;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 退料 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author ${author}
|
|
|
+ * @since 2022-10-27
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class WaterBackServiceImpl extends ServiceImpl<WaterBackMapper, WaterBack> implements WaterBackService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private WaterBackDetailsService waterBackDetailsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MaterialService materialService;
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void add(List<WaterBackAddVo> waterBackAddVoList) {
|
|
|
+ WaterBack waterBack = new WaterBack();
|
|
|
+ waterBack.setNumber(
|
|
|
+ waterBackAddVoList.stream().map(item -> item.getQuantityList().size()).reduce(0, Integer::sum));
|
|
|
+ waterBack.setQuantity(waterBackAddVoList.stream()
|
|
|
+ .map(item -> item.getQuantityList().stream().reduce(BigDecimal.ZERO, BigDecimal::add))
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ waterBack.setStatus(StatusConstant.NO);
|
|
|
+ save(waterBack);
|
|
|
+
|
|
|
+
|
|
|
+ List<WaterBackDetails> waterBackDetailsList = new ArrayList<>();
|
|
|
+ for (WaterBackAddVo waterBackAddVo : waterBackAddVoList) {
|
|
|
+ Long materialId = waterBackAddVo.getMaterialId();
|
|
|
+ List<BigDecimal> quantityList = waterBackAddVo.getQuantityList();
|
|
|
+
|
|
|
+ for (BigDecimal quantity : quantityList) {
|
|
|
+ WaterBackDetails waterBackDetails = new WaterBackDetails();
|
|
|
+ waterBackDetails.setWaterBackId(waterBack.getId());
|
|
|
+ waterBackDetails.setMaterialId(materialId);
|
|
|
+ waterBackDetails.setQuantity(quantity);
|
|
|
+ waterBackDetails.setOldQuantity(quantity);
|
|
|
+ waterBackDetails.setStatus(StatusConstant.NO);
|
|
|
+ waterBackDetailsList.add(waterBackDetails);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ waterBackDetailsService.saveBatch(waterBackDetailsList);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> toBeReviewedList() {
|
|
|
+ List<Map<String, Object>> list = listMaps(Wrappers.<WaterBack>lambdaQuery()
|
|
|
+ .eq(WaterBack::getStatus, StatusConstant.NO));
|
|
|
+
|
|
|
+ Map<Long, String> userNameMap = UserClientUtil.getUserNameMapFunctionLong(list,
|
|
|
+ item -> Convert.toLong(item.get("createUser")));
|
|
|
+
|
|
|
+ for (Map<String, Object> map : list) {
|
|
|
+ map.put("createUserName", userNameMap.get(Convert.toLong(map.get("createUser"))));
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> details(Long waterBackId) {
|
|
|
+ List<WaterBackDetails> list = waterBackDetailsService.list(WaterBackDetails::getWaterBackId, waterBackId);
|
|
|
+ if (list.size() == 0) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long, Map<String, Object>> collect = list.stream().collect(Collectors.toMap(
|
|
|
+ WaterBackDetails::getMaterialId,
|
|
|
+ item -> {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("id", waterBackId);
|
|
|
+ map.put("materialId", item.getMaterialId());
|
|
|
+ map.put("list", Collections.singletonList(item));
|
|
|
+ return map;
|
|
|
+ },
|
|
|
+ (v1, v2) -> {
|
|
|
+ List<WaterBackDetails> item1List = new ArrayList<>((List<WaterBackDetails>) v1.get("list"));
|
|
|
+ List<WaterBackDetails> item2List = new ArrayList<>((List<WaterBackDetails>) v2.get("list"));
|
|
|
+ item1List.addAll(item2List);
|
|
|
+
|
|
|
+ v1.put("list", item1List);
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 查询物料名称
|
|
|
+ Map<Long, String> materialNameMap = materialService.listByIds(collect.keySet()).stream()
|
|
|
+ .collect(Collectors.toMap(StorageBaseEntity::getId, Material::getName));
|
|
|
+
|
|
|
+ List<Map<String, Object>> result = new ArrayList<>(collect.values());
|
|
|
+
|
|
|
+ // 赋值物料名称
|
|
|
+ for (Map<String, Object> map : result) {
|
|
|
+ map.put("materialName", materialNameMap.get(Convert.toLong(map.get("materialId"))));
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void delete(Long waterBackId) {
|
|
|
+ removeById(waterBackId);
|
|
|
+ waterBackDetailsService.remove(WaterBackDetails::getWaterBackId, waterBackId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void submit(WaterBackVo waterBackVo) {
|
|
|
+ Long waterBackId = waterBackVo.getId();
|
|
|
+ waterBackVo.setStatus(StatusConstant.YES);
|
|
|
+ waterBackVo.setCheckerId(AuthUtil.getUserId());
|
|
|
+ waterBackVo.setCheckerTime(new Date());
|
|
|
+ updateById(waterBackVo);
|
|
|
+
|
|
|
+ List<WaterBackDetails> waterBackDetailsList = waterBackVo.getWaterBackDetailsList();
|
|
|
+
|
|
|
+ for (WaterBackDetails waterBackDetails : waterBackDetailsList) {
|
|
|
+ waterBackDetails.setStatus(StatusConstant.YES);
|
|
|
+ if (ObjectUtil.isEmpty(waterBackDetails.getId())) {
|
|
|
+ waterBackDetails.setWaterBackId(waterBackId);
|
|
|
+ waterBackDetails.setOldQuantity(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ waterBackDetailsService.saveOrUpdateBatch(waterBackDetailsList);
|
|
|
+
|
|
|
+ List<Long> waterBackIdList = waterBackDetailsList.stream().map(StorageBaseEntity::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ waterBackDetailsService.remove(Wrappers.<WaterBackDetails>lambdaQuery()
|
|
|
+ .eq(WaterBackDetails::getWaterBackId, waterBackId)
|
|
|
+ .notIn(StorageBaseEntity::getId, waterBackIdList));
|
|
|
+ }
|
|
|
+
|
|
|
+}
|