|
@@ -0,0 +1,140 @@
|
|
|
+package com.fjhx.apply.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.apply.mapper.ApplyPurchaseMapper;
|
|
|
+import com.fjhx.apply.service.ApplyPurchaseService;
|
|
|
+import com.fjhx.entity.apply.ApplyPurchase;
|
|
|
+import com.fjhx.utils.Assert;
|
|
|
+import com.fjhx.utils.BigDecimalUtil;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 申购单 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author ${author}
|
|
|
+ * @since 2022-08-04
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class ApplyPurchaseServiceImpl extends ServiceImpl<ApplyPurchaseMapper, ApplyPurchase> implements ApplyPurchaseService {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Map<String, Object>> technologyTypeStatistics(Map<String, String> condition) {
|
|
|
+ QueryWrapper<Object> wrapper = getApplyPurchaseTimeWrapper(condition);
|
|
|
+
|
|
|
+ String keyword = condition.get("keyword");
|
|
|
+ if (ObjectUtil.isNotEmpty(keyword)) {
|
|
|
+ wrapper.and(q -> q.like("m.Code", keyword).or().like("m.Name", keyword));
|
|
|
+ }
|
|
|
+ wrapper.groupBy("apd.ID");
|
|
|
+
|
|
|
+ List<Map<String, Object>> list = baseMapper.technologyTypeStatistics(wrapper);
|
|
|
+
|
|
|
+ Map<String, Map<String, Object>> technologyType = list.stream().collect(Collectors.toMap(
|
|
|
+ item -> item.get("technologyType").toString(),
|
|
|
+ item -> {
|
|
|
+ // 数量
|
|
|
+ item.put("purchaseQty", BigDecimalUtil.keepDecimals(item.get("purchaseQty"), 1));
|
|
|
+
|
|
|
+ if (!item.get("technologyType").toString().equals("3")) {
|
|
|
+ // 赋值面积
|
|
|
+ item.put("area", BigDecimalUtil.init(item.get("purchaseQty")).multiply(item.get("width")).divide(100, 1).getValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ item.remove("width");
|
|
|
+ return item;
|
|
|
+ },
|
|
|
+ (v1, v2) -> {
|
|
|
+ if (!v1.get("technologyType").toString().equals("3")) {
|
|
|
+ v1.put("area", BigDecimalUtil.add(v1.get("area"), v2.get("area")));
|
|
|
+ }
|
|
|
+ v1.put("purchaseQty", BigDecimalUtil.add(v1.get("purchaseQty"), v2.get("purchaseQty")));
|
|
|
+ v1.put("num", BigDecimalUtil.add(v1.get("num"), v2.get("num")));
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ Map<String, Object> initMap = new HashMap<>();
|
|
|
+
|
|
|
+ initMap.put("area", BigDecimal.ZERO);
|
|
|
+ initMap.put("purchaseQty", BigDecimal.ZERO);
|
|
|
+ initMap.put("num", BigDecimal.ZERO);
|
|
|
+
|
|
|
+ technologyType.putIfAbsent("0", initMap);
|
|
|
+ technologyType.putIfAbsent("1", initMap);
|
|
|
+ technologyType.putIfAbsent("2", initMap);
|
|
|
+ technologyType.putIfAbsent("3", initMap);
|
|
|
+ technologyType.putIfAbsent("4", initMap);
|
|
|
+
|
|
|
+ // 统计面料(0直喷,1热转,2打纸,4其他)之和
|
|
|
+ HashMap<String, Object> fabricMap = new HashMap<>();
|
|
|
+
|
|
|
+ Map<String, Object> technologyType0 = technologyType.get("0");
|
|
|
+ Map<String, Object> technologyType1 = technologyType.get("1");
|
|
|
+ Map<String, Object> technologyType2 = technologyType.get("2");
|
|
|
+ Map<String, Object> technologyType4 = technologyType.get("4");
|
|
|
+
|
|
|
+ fabricMap.put("area", BigDecimalUtil.init(technologyType0.get("area")).add(technologyType1.get("area"))
|
|
|
+ .add(technologyType2.get("area")).add(technologyType4.get("area")).getValue());
|
|
|
+
|
|
|
+ fabricMap.put("purchaseQty", BigDecimalUtil.init(technologyType0.get("purchaseQty")).add(technologyType1.get("purchaseQty"))
|
|
|
+ .add(technologyType2.get("purchaseQty")).add(technologyType4.get("purchaseQty")).getValue());
|
|
|
+
|
|
|
+ fabricMap.put("num", BigDecimalUtil.init(technologyType0.get("num")).add(technologyType1.get("num"))
|
|
|
+ .add(technologyType2.get("num")).add(technologyType4.get("num")).getValue());
|
|
|
+
|
|
|
+ fabricMap.put("technologyType", 5);
|
|
|
+
|
|
|
+ technologyType.put("5", fabricMap);
|
|
|
+
|
|
|
+ return technologyType;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 领料追踪统计获取wrapper
|
|
|
+ */
|
|
|
+ private QueryWrapper<Object> getApplyPurchaseTimeWrapper(Map<String, String> condition) {
|
|
|
+ String type = condition.get("type");
|
|
|
+ Assert.notEmpty(type, "时间类型不能为空");
|
|
|
+ Date beginTime;
|
|
|
+ Date endTime;
|
|
|
+ Date date = new Date();
|
|
|
+ switch (type) {
|
|
|
+ case "1":
|
|
|
+ beginTime = DateUtil.beginOfDay(date);
|
|
|
+ endTime = DateUtil.endOfDay(date);
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ beginTime = DateUtil.beginOfWeek(date);
|
|
|
+ endTime = DateUtil.endOfWeek(date);
|
|
|
+ break;
|
|
|
+ case "3":
|
|
|
+ beginTime = DateUtil.beginOfMonth(date);
|
|
|
+ endTime = DateUtil.endOfMonth(date);
|
|
|
+ break;
|
|
|
+ case "4":
|
|
|
+ beginTime = DateUtil.beginOfYear(date);
|
|
|
+ endTime = DateUtil.endOfYear(date);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ beginTime = DateUtil.parse(condition.get("beginTime"));
|
|
|
+ endTime = DateUtil.parse(condition.get("endTime"));
|
|
|
+ }
|
|
|
+
|
|
|
+ return Wrappers.query().between("ap.CreatedTime", beginTime, endTime);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|