|
|
@@ -1,15 +1,32 @@
|
|
|
package com.sckw.report.service;
|
|
|
|
|
|
+import com.sckw.core.common.enums.enums.DictEnum;
|
|
|
+import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
+import com.sckw.core.model.page.PageResult;
|
|
|
+import com.sckw.core.model.vo.TableBottom;
|
|
|
+import com.sckw.core.model.vo.TableStatisticRes;
|
|
|
+import com.sckw.core.model.vo.TableTop;
|
|
|
+import com.sckw.core.utils.BeanUtils;
|
|
|
+import com.sckw.core.utils.CollectionUtils;
|
|
|
+import com.sckw.core.utils.StringUtils;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
+import com.sckw.excel.utils.DateUtil;
|
|
|
import com.sckw.mongo.model.SckwTradeOrder;
|
|
|
import com.sckw.report.dao.SckwTradeOrderRepository;
|
|
|
+import com.sckw.report.service.param.*;
|
|
|
+import com.sckw.report.service.vo.OrderListRes;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.data.domain.Sort;
|
|
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
|
|
import org.springframework.data.mongodb.core.query.Criteria;
|
|
|
import org.springframework.data.mongodb.core.query.Query;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.*;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
/**
|
|
|
* @author zk
|
|
|
* @desc 订单服务
|
|
|
@@ -41,4 +58,178 @@ public class KwOrderService {
|
|
|
SckwTradeOrder tradeOrder = mongoTemplate.findOne(query, SckwTradeOrder.class);
|
|
|
return mongoTemplate.findOne(query, SckwTradeOrder.class);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 贸易订单列表分页查询
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-07-17 18:04
|
|
|
+ * @Param params:
|
|
|
+ * @return: com.sckw.core.model.page.PageResult
|
|
|
+ */
|
|
|
+ public PageResult tradeOrderSelect(TradeOrderListSelectParam params) {
|
|
|
+ Query query = getQuery(params);
|
|
|
+ long count = mongoTemplate.count(query, SckwTradeOrder.class);
|
|
|
+ Sort sort = Sort.by(Sort.Direction.DESC, "createTime");
|
|
|
+ SpringDataPageAble pageAble = new SpringDataPageAble(params.getPage(), params.getPageSize(), sort);
|
|
|
+ query.with(pageAble);
|
|
|
+ List<SckwTradeOrder> list = mongoTemplate.find(query, SckwTradeOrder.class);
|
|
|
+ List<OrderListRes> result = new ArrayList<>();
|
|
|
+ list.forEach(e -> {
|
|
|
+ OrderListRes order = BeanUtils.copyProperties(e, OrderListRes.class);
|
|
|
+ order.setStatus(DictEnum.getLabel(DictTypeEnum.TORDER_STATUS.getType(), String.valueOf(e.getStatus())))
|
|
|
+ .setTrading(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), e.getTrading()))
|
|
|
+ .setDeliveryType(DictEnum.getLabel(DictTypeEnum.DELIVERY_TYPE.getType(), e.getDeliveryType()))
|
|
|
+ .setPickupType(DictEnum.getLabel(DictTypeEnum.PICKUP_TYPE.getType(), e.getPickupType()))
|
|
|
+ .setConsignmentStatus(Objects.equals(e.getAmount(), e.getEntrustAmount()) ? "待托运" : "已托运")
|
|
|
+ .setSource(DictEnum.getLabel(DictTypeEnum.TORDER_SOURCE.getType(), e.getSource()));
|
|
|
+ });
|
|
|
+ return PageResult.build(params.getPage(), params.getPageSize(), count, result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 组装query
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-07-17 18:08
|
|
|
+ * @Param params:
|
|
|
+ * @return: org.springframework.data.mongodb.core.query.Query
|
|
|
+ */
|
|
|
+ private Query getQuery(TradeOrderListStatisticParam params) {
|
|
|
+ Long entId = LoginUserHolder.getEntId();
|
|
|
+ Query query = new Query();
|
|
|
+ Criteria criteria = new Criteria();
|
|
|
+ criteria.and("delFlag").is(0);
|
|
|
+ //销售订单
|
|
|
+ if (Objects.equals(params.getOrderType(), 1)) {
|
|
|
+ criteria.and("supplyTopEntId").is(entId);
|
|
|
+ } else {
|
|
|
+ //采购订单
|
|
|
+ criteria.and("procureTopEntId").is(entId);
|
|
|
+ }
|
|
|
+ //交易方式
|
|
|
+ if (CollectionUtils.isNotEmpty(params.getTradings())) {
|
|
|
+ criteria.and("trading").in(params.getTradings());
|
|
|
+ }
|
|
|
+ //提货方式
|
|
|
+ if (CollectionUtils.isNotEmpty(params.getPickupTypes())) {
|
|
|
+ criteria.and("pickupType").in(params.getPickupTypes());
|
|
|
+ }
|
|
|
+ //交付类型
|
|
|
+ if (CollectionUtils.isNotEmpty(params.getDeliveryTypes())) {
|
|
|
+ criteria.and("deliveryType").in(params.getDeliveryTypes());
|
|
|
+ }
|
|
|
+ //下单方式
|
|
|
+ if (CollectionUtils.isNotEmpty(params.getSources())) {
|
|
|
+ criteria.and("source").in(params.getSources());
|
|
|
+ }
|
|
|
+ //日期范围
|
|
|
+ if (Objects.nonNull(params.getStartCreateTime()) && Objects.nonNull(params.getEndCreateTime())) {
|
|
|
+ criteria.andOperator(Criteria.where("createTime").gte(params.getStartCreateTime()), Criteria.where("createTime")
|
|
|
+ .lte(params.getEndCreateTime()));
|
|
|
+ } else if (Objects.nonNull(params.getStartCreateTime())) {
|
|
|
+ criteria.and("createTime").gte(params.getStartCreateTime());
|
|
|
+ } else if (Objects.nonNull(params.getEndCreateTime())) {
|
|
|
+ criteria.and("createTime").lte(params.getEndCreateTime());
|
|
|
+ }
|
|
|
+ List<Criteria> orCriteriaList = new ArrayList<>();
|
|
|
+ //关键字模糊匹配
|
|
|
+ if (StringUtils.isNotBlank(params.getKeywords())) {
|
|
|
+ Pattern pattern = Pattern.compile("^.*" + params.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
|
|
|
+ orCriteriaList.add(Criteria.where("tOrderNo").regex(pattern));
|
|
|
+ orCriteriaList.add(Criteria.where("procureFirmName").regex(pattern));
|
|
|
+ orCriteriaList.add(Criteria.where("supplyFirmName").regex(pattern));
|
|
|
+ orCriteriaList.add(Criteria.where("goodsName").regex(pattern));
|
|
|
+ }
|
|
|
+ //装卸货地址
|
|
|
+ if (CollectionUtils.isNotEmpty(params.getShippingAddressCodes())) {
|
|
|
+ params.getShippingAddressCodes().forEach(c -> {
|
|
|
+ Pattern pattern = Pattern.compile("^" + c.substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE);
|
|
|
+ orCriteriaList.add(Criteria.where("loadCityCode").regex(pattern));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(params.getUnloadingAddressCodes())) {
|
|
|
+ params.getUnloadingAddressCodes().forEach(c -> {
|
|
|
+ Pattern pattern = Pattern.compile("^" + c.substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE);
|
|
|
+ orCriteriaList.add(Criteria.where("unloadCityCode").regex(pattern));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(orCriteriaList)) {
|
|
|
+ criteria.orOperator(orCriteriaList);
|
|
|
+ }
|
|
|
+ return query.addCriteria(criteria);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 贸易订单列表统计查询
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-07-17 18:05
|
|
|
+ * @Param params:
|
|
|
+ * @return: com.sckw.core.model.vo.TableStatisticRes
|
|
|
+ */
|
|
|
+ public TableStatisticRes tradeOrderStatistic(TradeOrderListStatisticParam params) {
|
|
|
+ TableStatisticRes res = new TableStatisticRes();
|
|
|
+ Query query = getQuery(params);
|
|
|
+ List<SckwTradeOrder> orders = mongoTemplate.find(query, SckwTradeOrder.class);
|
|
|
+ Map<Integer, List<SckwTradeOrder>> map = orders.stream().collect(Collectors.groupingBy(SckwTradeOrder::getStatus));
|
|
|
+ List<TableTop> tableTops = new ArrayList<>();
|
|
|
+ List<DictEnum> tOrderStatusEnums = DictEnum.getEnumsByType(DictTypeEnum.TORDER_STATUS.getType());
|
|
|
+ tOrderStatusEnums.forEach(e -> {
|
|
|
+ Integer value = Integer.valueOf(e.getValue());
|
|
|
+ List<SckwTradeOrder> list = map.get(value);
|
|
|
+ int total = CollectionUtils.isEmpty(list) ? 0 : list.size();
|
|
|
+ TableTop tableTop = new TableTop();
|
|
|
+ tableTop.setName(e.getLabel()).setValue(value).setTotal(total);
|
|
|
+ tableTops.add(tableTop);
|
|
|
+ });
|
|
|
+ TableBottom tableBottom = new TableBottom();
|
|
|
+ tableBottom.setTotal(CollectionUtils.isEmpty(orders) ? 0 : orders.size());
|
|
|
+ res.setTableTops(tableTops).setTableBottom(tableBottom);
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 贸易订单列表导出
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-07-17 18:05
|
|
|
+ * @Param params:
|
|
|
+ * @return: java.util.List<com.sckw.report.service.param.TradeOrderListExport>
|
|
|
+ */
|
|
|
+
|
|
|
+ public List<TradeOrderListExport> export(TradeOrderListExportParam params) {
|
|
|
+ Query query = new Query();
|
|
|
+ if (CollectionUtils.isNotEmpty(params.getIds())) {
|
|
|
+ Long entId = LoginUserHolder.getEntId();
|
|
|
+ Criteria criteria = new Criteria();
|
|
|
+ criteria.and("tOrderId").in(params.getIds()).and("delFlag").is(0);
|
|
|
+ query.addCriteria(criteria);
|
|
|
+ //销售订单
|
|
|
+ if (Objects.equals(params.getOrderType(), 1)) {
|
|
|
+ criteria.and("supplyTopEntId").is(entId);
|
|
|
+ } else {
|
|
|
+ //采购订单
|
|
|
+ criteria.and("procureTopEntId").is(entId);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ query = getQuery(params);
|
|
|
+ }
|
|
|
+ List<SckwTradeOrder> orders = mongoTemplate.find(query, SckwTradeOrder.class);
|
|
|
+ if (CollectionUtils.isEmpty(orders)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ List<TradeOrderListExport> list = new ArrayList<>();
|
|
|
+ orders.forEach(e -> {
|
|
|
+ TradeOrderListExport export = BeanUtils.copyProperties(e, TradeOrderListExport.class);
|
|
|
+ export.setStatus(DictEnum.getLabel(DictTypeEnum.TORDER_STATUS.getType(), String.valueOf(e.getStatus())))
|
|
|
+ .setTrading(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), e.getTrading()))
|
|
|
+ .setDeliveryType(DictEnum.getLabel(DictTypeEnum.DELIVERY_TYPE.getType(), e.getDeliveryType()))
|
|
|
+ .setPickupType(DictEnum.getLabel(DictTypeEnum.PICKUP_TYPE.getType(), e.getPickupType()))
|
|
|
+ .setConsignmentStatus(Objects.equals(e.getAmount(), e.getEntrustAmount()) ? "待托运" : "已托运")
|
|
|
+ .setSource(DictEnum.getLabel(DictTypeEnum.TORDER_SOURCE.getType(), e.getSource()))
|
|
|
+ .setUnitPrice(String.valueOf(e.getUnitPrice())).setPrice(String.valueOf(e.getPrice()))
|
|
|
+ .setAmount(String.valueOf(e.getAmount())).setActualAmount(String.valueOf(e.getActualAmount()))
|
|
|
+ .setStartTime(Objects.isNull(e.getStartTime()) ? null : DateUtil.dateToStr(e.getStartTime()))
|
|
|
+ .setAddedTime(Objects.isNull(e.getEndTime()) ? null : DateUtil.dateToStr(e.getEndTime()));
|
|
|
+ list.add(export);
|
|
|
+ });
|
|
|
+ return list;
|
|
|
+ }
|
|
|
}
|