|
|
@@ -1,12 +1,246 @@
|
|
|
package com.sckw.report.service;
|
|
|
|
|
|
+import com.sckw.core.common.enums.NumberConstant;
|
|
|
+import com.sckw.core.model.page.PageResult;
|
|
|
+import com.sckw.core.utils.CollectionUtils;
|
|
|
+import com.sckw.core.utils.StringUtils;
|
|
|
+import com.sckw.core.web.response.HttpResult;
|
|
|
+import com.sckw.excel.utils.DateUtil;
|
|
|
+import com.sckw.mongo.model.SckwLogisticsOrder;
|
|
|
+import com.sckw.mongo.model.TobleTop;
|
|
|
+import com.sckw.report.dao.SckwLogisticsOrderRepository;
|
|
|
+import com.sckw.report.service.param.ConsignOrderQuery;
|
|
|
+import com.sckw.report.service.vo.ConsignOrderVo;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.domain.PageRequest;
|
|
|
+import org.springframework.data.domain.Sort;
|
|
|
+import org.springframework.data.mongodb.core.MongoTemplate;
|
|
|
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
|
|
|
+import org.springframework.data.mongodb.core.aggregation.AggregationResults;
|
|
|
+import org.springframework.data.mongodb.core.query.Criteria;
|
|
|
+import org.springframework.data.mongodb.core.query.Query;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.text.ParseException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+
|
|
|
/**
|
|
|
* @author zk
|
|
|
* @desc 运输服务
|
|
|
* @date 2023/7/10 0010
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class KwTransportService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ public SckwLogisticsOrderRepository sckwLogisticsOrderRepository;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MongoTemplate mongoTemplate;
|
|
|
+
|
|
|
+ public HttpResult list(ConsignOrderQuery query) throws ParseException {
|
|
|
+ //模糊匹配
|
|
|
+ //根据条件查询所有并排序,且分页
|
|
|
+ //设置模糊查询匹配规则 忽略大小写
|
|
|
+ // 创建条件对象
|
|
|
+ Criteria criteria = new Criteria();
|
|
|
+ // 1. 全等于
|
|
|
+ if (StringUtils.isNotBlank(query.getLoadAddress())) {
|
|
|
+ criteria.and("loadDetailAddress").is(query.getLoadAddress());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getUnloadAddress())) {
|
|
|
+ criteria.and("unloadDetailAddress").is(query.getUnloadAddress());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getStatus())) {
|
|
|
+ criteria.and("status").is(query.getStatus());
|
|
|
+ }
|
|
|
+ criteria.and("delFlag").is(String.valueOf(NumberConstant.ZERO));
|
|
|
+ // 4. 日期范围
|
|
|
+ if (StringUtils.isNotEmpty(query.getStartDateTime()) && StringUtils.isNotEmpty(query.getEndDateTime())) {
|
|
|
+ criteria.andOperator(Criteria.where("createTime").gte(query.getStartDateTime()), Criteria.where("createTime")
|
|
|
+ .lte(query.getEndDateTime()));
|
|
|
+ }
|
|
|
+ //多条件模糊查询
|
|
|
+ Criteria c1 = new Criteria();
|
|
|
+ Criteria c2 = new Criteria();
|
|
|
+ Criteria c3 = new Criteria();
|
|
|
+ Criteria c4 = new Criteria();
|
|
|
+ Criteria c5 = new Criteria();
|
|
|
+ Pattern pattern = Pattern.compile("^.*" + query.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
|
|
|
+ c1 = Criteria.where("firmName").regex(pattern);
|
|
|
+ c2 = Criteria.where("carrierFirmName").regex(pattern);
|
|
|
+ c3 = Criteria.where("checkFirmName").regex(pattern);
|
|
|
+ c4 = Criteria.where("tOrderNo").regex(pattern);
|
|
|
+ c5 = Criteria.where("lOrderNo").regex(pattern);
|
|
|
+ criteria.orOperator(c1, c2, c3, c4, c5);
|
|
|
+ Query query1 = new Query(criteria);
|
|
|
+ // 12. 总记录数
|
|
|
+ long total = mongoTemplate.count(query1, SckwLogisticsOrder.class);
|
|
|
+ // 10. 分页
|
|
|
+ query1.with(PageRequest.of(query.getPage() - 1, query.getPageSize(),
|
|
|
+ // 11. 排序
|
|
|
+ Sort.by(Sort.Order.desc("createTime"))));
|
|
|
+ // 执行查询
|
|
|
+ List<SckwLogisticsOrder> list = mongoTemplate.find(query1, SckwLogisticsOrder.class);
|
|
|
+ List<ConsignOrderVo> returnList = new ArrayList<>();
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+ packageReturnList(list, returnList);
|
|
|
+ }
|
|
|
+ PageResult build = PageResult.build(query.getPage(), query.getPageSize(), total, returnList);
|
|
|
+ return HttpResult.ok(build);
|
|
|
+ }
|
|
|
+
|
|
|
+ public HttpResult statistics(ConsignOrderQuery param) {
|
|
|
+ //模糊匹配
|
|
|
+ //根据条件查询所有并排序,且分页
|
|
|
+ //设置模糊查询匹配规则 忽略大小写
|
|
|
+ // 创建条件对象
|
|
|
+ Criteria criteria = new Criteria();
|
|
|
+ // 1. 全等于
|
|
|
+ if (StringUtils.isNotBlank(param.getLoadAddress())) {
|
|
|
+ criteria.and("loadDetailAddress").is(param.getLoadAddress());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(param.getUnloadAddress())) {
|
|
|
+ criteria.and("unloadDetailAddress").is(param.getUnloadAddress());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(param.getStatus())) {
|
|
|
+ criteria.and("status").is(param.getStatus());
|
|
|
+ }
|
|
|
+ criteria.and("delFlag").is(String.valueOf(NumberConstant.ZERO));
|
|
|
+ // 4. 日期范围
|
|
|
+ if (StringUtils.isNotEmpty(param.getStartDateTime()) && StringUtils.isNotEmpty(param.getEndDateTime())) {
|
|
|
+ criteria.andOperator(Criteria.where("createTime").gte(param.getStartDateTime()), Criteria.where("createTime")
|
|
|
+ .lte(param.getEndDateTime()));
|
|
|
+ }
|
|
|
+ //多条件模糊查询
|
|
|
+ Criteria c1 = new Criteria();
|
|
|
+ Criteria c2 = new Criteria();
|
|
|
+ Criteria c3 = new Criteria();
|
|
|
+ Criteria c4 = new Criteria();
|
|
|
+ Criteria c5 = new Criteria();
|
|
|
+ Pattern pattern = Pattern.compile("^.*" + param.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
|
|
|
+ c1 = Criteria.where("firmName").regex(pattern);
|
|
|
+ c2 = Criteria.where("carrierFirmName").regex(pattern);
|
|
|
+ c3 = Criteria.where("checkFirmName").regex(pattern);
|
|
|
+ c4 = Criteria.where("tOrderNo").regex(pattern);
|
|
|
+ c5 = Criteria.where("lOrderNo").regex(pattern);
|
|
|
+ criteria.orOperator(c1, c2, c3, c4, c5);
|
|
|
+// if (StringUtils.isNotBlank(param.getKeywords() )) {
|
|
|
+// criteria.and("firmName").regex(Pattern.compile("^.*" + param.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE));
|
|
|
+// criteria.and("carrierFirmName").regex(Pattern.compile("^.*" + param.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE));
|
|
|
+// criteria.and("checkFirmName").regex(Pattern.compile("^.*" + param.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE));
|
|
|
+// criteria.and("tOrderNo").regex(Pattern.compile("^.*" + param.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE));
|
|
|
+// criteria.and("tOrderNo").regex(Pattern.compile("^.*" + param.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE));
|
|
|
+// criteria.and("lOrderNo").regex(Pattern.compile("^.*" + param.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE));
|
|
|
+//
|
|
|
+// }
|
|
|
+ Aggregation aggregation = Aggregation.newAggregation(
|
|
|
+ Aggregation.match(criteria),
|
|
|
+ Aggregation.group("status").count().as("total"),
|
|
|
+ Aggregation.project("total").and("value").previousOperation()
|
|
|
+ );
|
|
|
+ AggregationResults<TobleTop> outputTypeCount = mongoTemplate.aggregate(aggregation, SckwLogisticsOrder.class, TobleTop.class);
|
|
|
+ List<TobleTop> results = (List<TobleTop>) outputTypeCount.getRawResults().get("results");
|
|
|
+ // 查询结果
|
|
|
+ return HttpResult.ok(results);
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<ConsignOrderVo> export(ConsignOrderQuery query) {
|
|
|
+ //模糊匹配
|
|
|
+ //根据条件查询所有并排序,且分页
|
|
|
+ //设置模糊查询匹配规则 忽略大小写
|
|
|
+ // 创建条件对象
|
|
|
+ Criteria criteria = new Criteria();
|
|
|
+ // 1. 全等于
|
|
|
+ if (StringUtils.isNotBlank(query.getLoadAddress())) {
|
|
|
+ criteria.and("loadDetailAddress").is(query.getLoadAddress());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getUnloadAddress())) {
|
|
|
+ criteria.and("unloadDetailAddress").is(query.getUnloadAddress());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getStatus())) {
|
|
|
+ criteria.and("status").is(query.getStatus());
|
|
|
+ }
|
|
|
+ criteria.and("delFlag").is(String.valueOf(NumberConstant.ZERO));
|
|
|
+ // 4. 日期范围
|
|
|
+ if (StringUtils.isNotEmpty(query.getStartDateTime()) && StringUtils.isNotEmpty(query.getEndDateTime())) {
|
|
|
+ criteria.andOperator(Criteria.where("createTime").gte(query.getStartDateTime()), Criteria.where("createTime")
|
|
|
+ .lte(query.getEndDateTime()));
|
|
|
+ }
|
|
|
+ //多条件模糊查询
|
|
|
+ Criteria c1 = new Criteria();
|
|
|
+ Criteria c2 = new Criteria();
|
|
|
+ Criteria c3 = new Criteria();
|
|
|
+ Criteria c4 = new Criteria();
|
|
|
+ Criteria c5 = new Criteria();
|
|
|
+ Pattern pattern = Pattern.compile("^.*" + query.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
|
|
|
+ c1 = Criteria.where("firmName").regex(pattern);
|
|
|
+ c2 = Criteria.where("carrierFirmName").regex(pattern);
|
|
|
+ c3 = Criteria.where("checkFirmName").regex(pattern);
|
|
|
+ c4 = Criteria.where("tOrderNo").regex(pattern);
|
|
|
+ c5 = Criteria.where("lOrderNo").regex(pattern);
|
|
|
+ criteria.orOperator(c1, c2, c3, c4, c5);
|
|
|
+ Query query1 = new Query(criteria);
|
|
|
+ // 12. 总记录数
|
|
|
+ long total = mongoTemplate.count(query1, SckwLogisticsOrder.class);
|
|
|
+ // 10. 分页
|
|
|
+ query1.with(PageRequest.of(query.getPage() - 1, query.getPageSize(),
|
|
|
+ // 11. 排序
|
|
|
+ Sort.by(Sort.Order.desc("createTime"))));
|
|
|
+ // 执行查询
|
|
|
+ List<SckwLogisticsOrder> list = mongoTemplate.find(query1, SckwLogisticsOrder.class);
|
|
|
+// PageResult build = PageResult.build(query.getPage(), query.getPageSize(), total, list);
|
|
|
+ List<ConsignOrderVo> returnList = new ArrayList<>();
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+ packageReturnList(list, returnList);
|
|
|
+ }
|
|
|
+ return returnList;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void packageReturnList(List<SckwLogisticsOrder> list, List<ConsignOrderVo> returnList) {
|
|
|
+ for (SckwLogisticsOrder logisticsOrder : list) {
|
|
|
+ ConsignOrderVo vo = new ConsignOrderVo();
|
|
|
+ vo.setAccountsCycle(logisticsOrder.getSettlementCycle() == null ?
|
|
|
+ null : String.valueOf(logisticsOrder.getSettlementCycle()));
|
|
|
+ vo.setAppointor(logisticsOrder.getCreateByName());
|
|
|
+ vo.setBillingMode(logisticsOrder.getBillingMode());
|
|
|
+ vo.setCarrierCompany(logisticsOrder.getCarrierFirmName());
|
|
|
+ vo.setCarrierOrder(logisticsOrder.getWOrderNo());
|
|
|
+ vo.setCarrierPhone(logisticsOrder.getCarrierPhone());
|
|
|
+ vo.setCarryingCapacity(logisticsOrder.getCarryingCapacity() == null ?
|
|
|
+ null : String.valueOf(logisticsOrder.getCarryingCapacity()));
|
|
|
+ vo.setConsignCompany(logisticsOrder.getCheckFirmName());
|
|
|
+ vo.setConsignContacts(logisticsOrder.getCheckContacts());
|
|
|
+ vo.setConsignPhone(logisticsOrder.getCheckPhone());
|
|
|
+ vo.setContract(logisticsOrder.getContractName());
|
|
|
+ vo.setDeficitAmount(logisticsOrder.getDeficitAmount() == null ?
|
|
|
+ null : String.valueOf(logisticsOrder.getDeficitAmount()));
|
|
|
+ vo.setGoodsName(logisticsOrder.getGoodsName());
|
|
|
+ vo.setLoadAddress(logisticsOrder.getLoadDetailAddress());
|
|
|
+ vo.setUnloadAddress(logisticsOrder.getUnloadDetailAddress());
|
|
|
+ vo.setLOrderId(String.valueOf(logisticsOrder.getLOrderId()));
|
|
|
+ vo.setLOrderNo(logisticsOrder.getLOrderNo());
|
|
|
+ vo.setLoss(logisticsOrder.getLoss() == null ?
|
|
|
+ null : String.valueOf(logisticsOrder.getLoss()));
|
|
|
+ vo.setPrice(logisticsOrder.getPrice() == null ?
|
|
|
+ null : String.valueOf(logisticsOrder.getPrice()));
|
|
|
+ vo.setReceiveGoodsContacts(logisticsOrder.getUnloadContacts());
|
|
|
+ vo.setReceiveGoodsPhone(logisticsOrder.getUnloadPhone());
|
|
|
+ vo.setRemark(logisticsOrder.getRemark());
|
|
|
+ vo.setShipmentsContacts(logisticsOrder.getLoadContacts());
|
|
|
+ vo.setShipmentsPhone(logisticsOrder.getLoadPhone());
|
|
|
+ vo.setShipmentsDateTime(logisticsOrder.getLoadTime() == null ?
|
|
|
+ null : DateUtil.getDateTime(logisticsOrder.getLoadTime()));
|
|
|
+ vo.setShipmentsPhone(logisticsOrder.getLoadPhone());
|
|
|
+ vo.setSigning(logisticsOrder.getContractSigningWay());
|
|
|
+ vo.setStatus(logisticsOrder.getStatus());
|
|
|
+ vo.setUnloadAddress(logisticsOrder.getUnloadDetailAddress());
|
|
|
+ vo.setWOrderNo(logisticsOrder.getWOrderNo());
|
|
|
+ returnList.add(vo);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|