黎星凯
2024-04-15 62b6a7fac3f2acde70b578431147c4a01f19c182
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
package com.consum.base.service.impl;
 
import com.consum.base.core.WhBusinessEnum;
import com.consum.base.core.utils.MapUtils;
import com.consum.base.core.utils.MapperUtil;
import com.consum.base.pojo.dto.GoodModelInfoDTO;
import com.consum.base.pojo.response.GoodsTemplateCountVO;
import com.consum.base.service.LWhProcureModelService;
import com.consum.model.po.LWhProcureModel;
import com.walker.jdbc.service.BaseServiceImpl;
import org.apache.commons.compress.utils.Lists;
import org.springframework.stereotype.Service;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
 
/**
 * @ClassName LWhProcureModelService
 * @Date 2023/10/24
 * @Description
 * @Version 1.0
 **/
@Service
public class LWhProcureModelServiceImpl extends BaseServiceImpl implements LWhProcureModelService {
 
    private static String GET_MODEL_BY_FORM = "SELECT * FROM L_WH_PROCURE_MODEL WHERE 1=1 ";
 
    /**
     * 通过单据类型 单据ID查询该订单关联的设备型号以及数量
     *
     * @return
     */
    @Override
    public List<LWhProcureModel> getModelByForm(WhBusinessEnum businessType, Long businessId) {
        StringBuilder sql = new StringBuilder(GET_MODEL_BY_FORM);
        HashMap<String, Object> paramts = new HashMap<>();
        if (businessType != null) {
            sql.append(" and BUSINESS_TYPE=:businessType ");
            paramts.put("businessType", businessType.getValue());
        }
        if (businessId != null) {
            sql.append(" and BUSINESS_ID=:businessId ");
            paramts.put("businessId", businessId);
        }
        return this.select(sql.toString(), paramts, new LWhProcureModel());
    }
 
    /**
     * 根据部门、物品查询调拨单
     *
     * @param goodsTemplateId 物品ID
     * @param departmentId 部门ID
     * @return
     */
    private static String GET_FF_ORDER_BY_GOODS_ID_AND_DEPT =
        "SELECT trans.ID TRANS_BUSINESS_ID,trans.BUSINESS_FORM_CODE,baseTemp.ID BASE_GOODS_TEMPLATE_ID,baseTemp.GOODS_NAME BASE_GOODS_TEMPLATE_NAME,sum(proModel.COUNTS) total_count,sum(proModel.USE_COUNT) use_count,trans.IN_TIME FROM L_WH_FORM_TRANSFER trans LEFT JOIN L_WH_PROCURE_MODEL proModel ON proModel.BUSINESS_ID=trans.id LEFT JOIN BASE_GOODS_MODELS baseModel ON proModel.BASE_GOODS_MODELS_ID=baseModel.id LEFT JOIN BASE_GOODS_TEMPLATE baseTemp ON baseTemp.id=baseModel.GOODS_TEMPLATES_ID WHERE proModel.BUSINESS_TYPE=4 AND proModel.USE_COUNT> 0 ";
    private static String GET_FF_ORDER_BY_GOODS_ID_AND_DEPT_END =
        " GROUP BY trans.ID,trans.BUSINESS_FORM_CODE,baseTemp.ID,baseTemp.GOODS_NAME,trans.IN_TIME order by trans.BUSINESS_FORM_CODE desc";
 
    @Override
    public List<Map<String, Object>> getFfOrderByGoodsIdAndDept(Long goodsTemplateId, Long departmentId) {
        StringBuilder sql = new StringBuilder(GET_FF_ORDER_BY_GOODS_ID_AND_DEPT);
        HashMap<String, Object> paramts = new HashMap<>();
        if (goodsTemplateId != null) {
            sql.append(" AND baseTemp.ID=:goodsTemplateId ");
            paramts.put("goodsTemplateId", goodsTemplateId);
        }
        if (departmentId != null) {
            sql.append(" AND trans.IN_WAREHOUSE_TYPE=1 and trans.IN_WAREHOUSE_ID=:departmentId ");
            paramts.put("departmentId", departmentId);
        }
        return select(sql.append(GET_FF_ORDER_BY_GOODS_ID_AND_DEPT_END).toString(), paramts, new MapperUtil());
    }
 
    /**
     * 根据部门、物品查询调拨单
     *
     * @param goodsTemplateId 物品ID
     * @param departmentId 分发单ID
     * @return
     */
    private static String GET_GOODS_USE_INFO_BY_FF_ORDER_AND_GOOD_ID =
        "SELECT baseModel.GOODS_TEMPLATES_ID,proModel.BASE_GOODS_MODELS_ID,baseModel.MODEL_NAME,baseModel.UNIT,CONCAT(baseCate.CLASSIFICATION,'类') CLASSIFICATION,modelUser.id MODEL_USER_id,modelUser.NOW_USER_PHONE,modelUser.NOW_USER_NAME,CASE WHEN modelUser.id IS NULL THEN proModel.USE_COUNT ELSE modelUser.USE_COUNT END AS user_Use_Count,CASE WHEN modelUser.id IS NULL THEN proModel.COUNTS ELSE modelUser.GOODS_NUM END AS GOODS_NUM FROM L_WH_PROCURE_MODEL proModel LEFT JOIN BASE_GOODS_MODELS baseModel ON proModel.BASE_GOODS_MODELS_ID=baseModel.id LEFT JOIN BASE_GOODS_TEMPLATE baseTemp ON baseTemp.id=baseModel.GOODS_TEMPLATES_ID LEFT JOIN BASE_CATEGORY baseCate ON baseCate.id=baseTemp.CATEGORY_ID LEFT JOIN L_WH_PROCURE_MODEL_USER modelUser ON modelUser.WH_PROCURE_MODEL_ID=proModel.id " ;
    private static String GET_GOODS_USE_INFO_BY_FF_ORDER_AND_GOOD_ID_END = "WHERE proModel.BUSINESS_TYPE=4 AND proModel.USE_COUNT> 0 ";
 
    @Override
    public List<Map<String, Object>> getGoodsUseInfoByFfOrderAndGoodId(Long goodsTemplateId, Long transBusinessId) {
        StringBuilder sql = new StringBuilder(GET_GOODS_USE_INFO_BY_FF_ORDER_AND_GOOD_ID);
        StringBuilder sqlEnd = new StringBuilder(GET_GOODS_USE_INFO_BY_FF_ORDER_AND_GOOD_ID_END);
        HashMap<String, Object> paramts = new HashMap<>();
        if (goodsTemplateId != null) {
            sqlEnd.append(" AND baseModel.GOODS_TEMPLATES_ID=:goodsTemplateId ");
            paramts.put("goodsTemplateId", goodsTemplateId);
        }
        if (transBusinessId != null) {
            sql.append("and modelUser.PROCURE_MODEL_USER_RECORD_ID = (select max(ID) from L_WH_PROCURE_MODEL_USER_RECORD where TRANS_BUSINESS_ID=:recordTransBusinessId)");
            paramts.put("recordTransBusinessId", transBusinessId);
            sqlEnd.append(" AND proModel.BUSINESS_ID=:transBusinessId ");
            paramts.put("transBusinessId", transBusinessId);
        } else {
            sql.append("and modelUser.PROCURE_MODEL_USER_RECORD_ID = (select max(ID) from L_WH_PROCURE_MODEL_USER_RECORD)");
        }
        return select(sql.append(sqlEnd).toString(), paramts, new MapperUtil());
    }
 
    @Override
    public List<GoodsTemplateCountVO> getGoodsTemplateCountByBusinessId(Long businessId) {
        List<GoodsTemplateCountVO> goodsTemplateCount = Lists.newArrayList();
 
        // 查询型号数量
        String sql = "SELECT bgt.id,goods_name,sum(counts) count FROM "
            + "l_wh_procure_model pm LEFT JOIN base_goods_models bgm ON pm.BASE_GOODS_MODELS_ID = bgm.id "
            + "LEFT JOIN base_goods_template bgt ON bgm.goods_templates_id = bgt.id "
            + "WHERE pm.business_id =:businessId GROUP BY bgm.goods_templates_id";
 
        HashMap<String, Object> param = new HashMap<>();
        param.put("businessId", businessId);
        List<Map<String, Object>> select = this.select(sql, param, new MapperUtil());
        select.forEach(item -> {
            GoodsTemplateCountVO goodsModelVO = MapUtils.convertMapToObj(item, GoodsTemplateCountVO.class);
            if (Objects.nonNull(goodsModelVO)) {
                goodsTemplateCount.add(goodsModelVO);
            }
        });
 
        return goodsTemplateCount;
    }
 
    @Override
    public List<GoodsTemplateCountVO> getProcureCountByBusinessId(Long businessId) {
        List<GoodsTemplateCountVO> goodsTemplateCount = Lists.newArrayList();
        // 查询采购型号统计数量
        String sql = "select fpg.id,BASE_GOODS_TEMPLATE_ID,GOODS_TEMPLATE_NAME ,sum(counts) count "
            + "from L_WH_FORM_PROCURE_GOODS fpg left join L_WH_PROCURE_MODEL pm on fpg.id = pm.FROM_PROCURE_GOODS_ID "
            + "where fpg.WH_FORM_PROCURE_ID =:businessId group by pm.FROM_PROCURE_GOODS_ID";
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("businessId", businessId);
        List<Map<String, Object>> procureModelList = this.select(sql, paramMap, new MapperUtil());
        for (Map<String, Object> map : procureModelList) {
            GoodsTemplateCountVO goodsTemplateCountVO = MapUtils.convertMapToObj(map, GoodsTemplateCountVO.class);
            if (Objects.nonNull(goodsTemplateCountVO)) {
                goodsTemplateCount.add(goodsTemplateCountVO);
            }
        }
        return goodsTemplateCount;
    }
 
    @Override
    public List<GoodModelInfoDTO> getGoodsModelListByBusinessId(Long businessId, Long procureGoodId) {
        // 查询型号列表信息
        List<GoodModelInfoDTO> goodsModelList = Lists.newArrayList();
        String sql =
            "SELECT bgt.id baseGoodsTemplateId,pm.id,CATEGORY_ID,CATEGORY_NAME,GOODS_NAME baseGoodsName,pm.BASE_GOODS_MODELS_NAME,bgm.UNIT,COUNTS,total_amount, "
                + "pm.BASE_GOODS_MODELS_ID,PRICE,WOREHOUSE_COUNT,bgt.CLASSIFICATION type FROM l_wh_procure_model pm LEFT JOIN base_goods_models bgm ON bgm.id = pm.BASE_GOODS_MODELS_ID "
                + "LEFT JOIN base_goods_template bgt ON bgt.id = bgm.GOODS_TEMPLATES_ID WHERE ";
        Map<String, Object> paramMap = new HashMap<>();
        if (businessId != null) {
            sql += "pm.BUSINESS_ID = :businessId ";
            paramMap.put("businessId", businessId);
        } else {
            sql += "pm.FROM_PROCURE_GOODS_ID =:procureGoodId ";
            paramMap.put("procureGoodId", procureGoodId);
        }
        List<Map<String, Object>> modelList = select(sql, paramMap, new MapperUtil());
        modelList.forEach(item -> {
            GoodModelInfoDTO goodsModelVO = MapUtils.convertMapToObj(item, GoodModelInfoDTO.class);
            if (Objects.nonNull(goodsModelVO)) {
                goodsModelList.add(goodsModelVO);
            }
        });
        return goodsModelList;
    }
 
    @Override
    public List<LWhProcureModel> getModelByForm1(WhBusinessEnum businessType, Long businessId) {
        StringBuilder sql = new StringBuilder("SELECT * FROM L_WH_PROCURE_MODEL WHERE 1=1 ");
        HashMap<String, Object> paramts = new HashMap<>();
        if (businessType != null) {
            sql.append(" and BUSINESS_TYPE=:businessType ");
            paramts.put("businessType", businessType.getValue());
        }
        if (businessId != null) {
            sql.append(" and BUSINESS_ID=:businessId ");
            paramts.put("businessId", businessId);
        }
        List<LWhProcureModel> select = select(sql.toString(), paramts, new LWhProcureModel());
        return select;
    }
}