Browse Source

物料申购属性统计

home 2 years ago
parent
commit
e7d4135f29

+ 4 - 3
hx-common/common-tool/src/main/java/com/fjhx/utils/BigDecimalUtil.java

@@ -1,7 +1,5 @@
 package com.fjhx.utils;
 
-import org.springblade.core.log.exception.ServiceException;
-
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 
@@ -136,6 +134,9 @@ public class BigDecimalUtil {
      * Object转BigDecimal
      */
     private static BigDecimal objToBigDecimal(Object value) {
+        if (value == null) {
+            throw new NullPointerException("参与计算的字段为空");
+        }
         BigDecimal bd;
         if (value instanceof BigDecimal) {
             bd = (BigDecimal) value;
@@ -150,7 +151,7 @@ public class BigDecimalUtil {
         } else if (value instanceof Long) {
             bd = BigDecimal.valueOf((Long) value);
         } else {
-            throw new ServiceException("未知的计算类型");
+            throw new ArithmeticException("未知的计算类型");
         }
         return bd;
     }

+ 104 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/entity/apply/ApplyPurchase.java

@@ -0,0 +1,104 @@
+package com.fjhx.entity.apply;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fjhx.base.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 申购单
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-08-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ApplyPurchase extends BaseEntity {
+
+
+    /**
+     * 软删除
+     */
+    @TableField("IsDelete")
+    private Boolean isdelete;
+
+    /**
+     * 创建时间
+     */
+    @TableField("CreatedTime")
+    private Date createdtime;
+
+    /**
+     * 修改时间
+     */
+    @TableField("UpdatedTime")
+    private Date updatedtime;
+
+    /**
+     * 申购单号
+     */
+    @TableField("ApplyBillNo")
+    private String applybillno;
+
+    /**
+     * 申购部门
+     */
+    @TableField("DepartName")
+    private String departname;
+
+    /**
+     * 申请时间
+     */
+    @TableField("ApplyTime")
+    private Date applytime;
+
+    /**
+     * 申购说明
+     */
+    @TableField("ApplyAccount")
+    private String applyaccount;
+
+    /**
+     * 申购类型 (枚举定义:0=物料,1=行政)
+     */
+    @TableField("ApplyPurType")
+    private Integer applypurtype;
+
+    /**
+     * 申购内容
+     */
+    @TableField("PurchaseContent")
+    private String purchasecontent;
+
+    /**
+     * 审批状态 (枚举定义:0=待审批,1=审批中,2=已审批,3=已驳回,4=已撤回)
+     */
+    @TableField("ApproveBillState")
+    private Integer approvebillstate;
+
+    /**
+     * 创建人ID
+     */
+    @TableField("CreateUserID")
+    private String createuserid;
+
+    /**
+     * 审核时间
+     */
+    @TableField("ApprovalTime")
+    private Date approvaltime;
+
+    /**
+     * 安全库存自动生成
+     */
+    @TableField("SafetyStockCreate")
+    private Boolean safetystockcreate;
+
+
+}

+ 36 - 0
hx-service/storage/src/main/java/com/fjhx/apply/controller/ApplyPurchaseController.java

@@ -0,0 +1,36 @@
+package com.fjhx.apply.controller;
+
+import com.fjhx.apply.service.ApplyPurchaseService;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 申购单 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-08-04
+ */
+@RestController
+@RequestMapping("/applyPurchase")
+public class ApplyPurchaseController {
+
+    @Autowired
+    private ApplyPurchaseService applyPurchaseService;
+
+    @PostMapping("technologyTypeStatistics")
+    public R technologyTypeStatistics(@RequestBody Map<String, String> condition) {
+        Map<String, Map<String, Object>> map = applyPurchaseService.technologyTypeStatistics(condition);
+        return R.success(map);
+    }
+
+
+}
+

+ 23 - 0
hx-service/storage/src/main/java/com/fjhx/apply/mapper/ApplyPurchaseMapper.java

@@ -0,0 +1,23 @@
+package com.fjhx.apply.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fjhx.entity.apply.ApplyPurchase;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 申购单 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-08-04
+ */
+public interface ApplyPurchaseMapper extends BaseMapper<ApplyPurchase> {
+
+    List<Map<String, Object>> technologyTypeStatistics(@Param("ew") QueryWrapper<Object> wrapper);
+
+}

+ 18 - 0
hx-service/storage/src/main/java/com/fjhx/apply/mapper/ApplyPurchaseMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.apply.mapper.ApplyPurchaseMapper">
+
+    <select id="technologyTypeStatistics" resultType="java.util.LinkedHashMap">
+        select apd.PurchaseQty             purchaseQty,
+               ifnull(m.TechnologyType, 4) technologyType,
+               m.Width                     width,
+               count(0)                    num
+        from apply_purchase ap
+                 left join apply_purchasedetail apd on ap.ApplyBillNo = apd.ApplyBillNo
+                 left join material m on apd.MaterialCode = m.Code
+                 left join purchase_contract pc on pc.ApplyBillNo = ap.ApplyBillNo
+                 left join stock_tag st on st.PurchaseBillNo = pc.PurchaseBillNo
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 20 - 0
hx-service/storage/src/main/java/com/fjhx/apply/service/ApplyPurchaseService.java

@@ -0,0 +1,20 @@
+package com.fjhx.apply.service;
+
+import com.fjhx.base.BaseService;
+import com.fjhx.entity.apply.ApplyPurchase;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 申购单 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-08-04
+ */
+public interface ApplyPurchaseService extends BaseService<ApplyPurchase> {
+
+    Map<String, Map<String, Object>> technologyTypeStatistics(Map<String, String> condition);
+
+}

+ 140 - 0
hx-service/storage/src/main/java/com/fjhx/apply/service/impl/ApplyPurchaseServiceImpl.java

@@ -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);
+    }
+
+}

+ 19 - 10
hx-service/storage/src/main/java/com/fjhx/message/mapper/UMessageMapper.xml

@@ -4,12 +4,12 @@
 
     <select id="getClassMessage" resultType="java.util.Map">
         SELECT
-            t2.SourceType AS sourceType,
-            Count( 1 ) AS count
+        t2.SourceType AS sourceType,
+        Count( 1 ) AS count
         FROM
-            u_messageread t1
-            LEFT JOIN u_message t2 ON t1.LinkMessageId = t2.ID
-            LEFT JOIN u_user t3 ON t1.ReceiverId = t3.ID
+        u_messageread t1
+        LEFT JOIN u_message t2 ON t1.LinkMessageId = t2.ID
+        LEFT JOIN u_user t3 ON t1.ReceiverId = t3.ID
         <where>
             t3.JobNo = #{userNo}
             AND t1.ReadState = #{readState}
@@ -18,13 +18,22 @@
             </if>
         </where>
         GROUP BY
-            t2.SourceType
+        t2.SourceType
     </select>
     <select id="getList" resultType="com.fjhx.entity.message.UMessage">
         SELECT
-            t2.*
+        t1.ID,
+        t2.IsDelete,
+        t2.CreatedTime,
+        t2.UpdatedTime,
+        t2.SourceType,
+        t2.Content,
+        t2.SenderId,
+        t2.ObejctType,
+        t2.LinkId,
+        t2.DealWithType
         FROM
-            u_messageread t1
+        u_messageread t1
         LEFT JOIN u_message t2 ON t1.LinkMessageId = t2.ID
         LEFT JOIN u_user t3 ON t1.ReceiverId = t3.ID
         <include refid="list_condition"/>
@@ -33,9 +42,9 @@
     </select>
     <select id="getListCount" resultType="java.lang.Integer">
         SELECT
-            count(1)
+        count(1)
         FROM
-            u_messageread t1
+        u_messageread t1
         LEFT JOIN u_message t2 ON t1.LinkMessageId = t2.ID
         LEFT JOIN u_user t3 ON t1.ReceiverId = t3.ID
         <include refid="list_condition"/>

+ 10 - 8
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockDetailServiceImpl.java

@@ -121,7 +121,10 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
             // 查询推荐物料
             Map<String, Object> recommendMaterial = baseMapper.selectRecommendMaterial(materialCode, availableQuantity);
 
-            item.putAll(recommendMaterial);
+            if (recommendMaterial != null) {
+                item.putAll(recommendMaterial);
+            }
+
         }
 
         return list;
@@ -162,7 +165,7 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
     public List<HashMap<String, Object>> pickingTrackingUserStatistics(Map<String, String> condition) {
 
         // 获取查询条件
-        QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper("ss.plan_date", condition);
+        QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper(condition);
 
         List<Map<String, Object>> list = baseMapper.getPlanList(wrapper);
 
@@ -183,7 +186,7 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
         PickingTrackingNumStatisticsResult result = new PickingTrackingNumStatisticsResult();
 
         // 查询指定领料列表
-        QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper("ss.plan_date", condition);
+        QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper(condition);
         String jobNo = condition.get("jobNo");
         List<Map<String, Object>> list = baseMapper.getPlanListByUser(wrapper, jobNo);
 
@@ -232,7 +235,7 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
         String materialId = condition.get("materialId");
         String jobNo = condition.get("jobNo");
 
-        QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper("ss.plan_date", condition);
+        QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper(condition);
         List<Map<String, Object>> list = baseMapper.getPlanListByUser(wrapper, jobNo);
 
         // 获取出入库单号
@@ -299,7 +302,7 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
     public List<Map<String, Object>> pickingTrackingList(Map<String, String> condition) {
 
         // 查询指定领料列表
-        QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper("ss.plan_date", condition);
+        QueryWrapper<Object> wrapper = pickingTrackingStatisticsGetWrapper(condition);
         String jobNo = condition.get("jobNo");
         List<Map<String, Object>> list = baseMapper.getPlanListByUser(wrapper, jobNo);
 
@@ -506,7 +509,7 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
     /**
      * 领料追踪统计获取wrapper
      */
-    private QueryWrapper<Object> pickingTrackingStatisticsGetWrapper(String param, Map<String, String> condition) {
+    private QueryWrapper<Object> pickingTrackingStatisticsGetWrapper(Map<String, String> condition) {
         String type = condition.get("type");
         Assert.notEmpty(type, "时间类型不能为空");
         Date beginTime;
@@ -534,7 +537,7 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
                 endTime = DateUtil.parse(condition.get("endTime"));
         }
 
-        return Wrappers.query().between(param, beginTime, endTime);
+        return Wrappers.query().between("ss.plan_date", beginTime, endTime);
     }
 
     /**
@@ -571,5 +574,4 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
         return userList;
     }
 
-
 }