|
|
@@ -9,16 +9,20 @@ import com.uas.eis.sdk.resp.*;
|
|
|
import com.uas.eis.service.RequestSTKService;
|
|
|
import com.uas.eis.service.STKService;
|
|
|
import com.uas.eis.utils.BaseUtil;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author
|
|
|
@@ -149,6 +153,84 @@ public class STKServiceImpl implements STKService {
|
|
|
return Result.success(map);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Result getSaleList(ProductPageDTO productPageDTO) {
|
|
|
+ int pageNum = 1;
|
|
|
+ int pageSize = 20;
|
|
|
+ if (productPageDTO !=null){
|
|
|
+ pageNum = Integer.valueOf(productPageDTO.getPageNum());
|
|
|
+ pageSize = Integer.valueOf(productPageDTO.getPageSize());
|
|
|
+ }else{
|
|
|
+ return Result.error("参数错误!");
|
|
|
+ }
|
|
|
+ int start = ((pageNum - 1) * pageSize + 1);
|
|
|
+ int end = pageNum * pageSize;
|
|
|
+
|
|
|
+ List<SaleDTO> saleDTOS = baseDao.query("select * from (select rownum rn,AA.* from (select sa_code,sa_date,sa_transport,sa_kind,sa_status,sa_custcode,sa_custname,sa_currency,sa_rate,sa_salemethod,sa_apcustcode,sa_apcustname,sa_need4,sa_need10,sa_paymentscode,sa_payments,sa_shcustcode,sa_shcustname,sa_toplace,sa_contact,sa_contacttel,sa_pocode,sa_cop,sa_departmentcode,sa_departmentname,sa_need11,sa_need5,sa_quyu_user,sa_sellercode,sa_seller,sa_need2,sa_need3,sa_need1,sa_chfs,sa_prepayamount,sa_sourcecode,sa_sourcetype,sa_turnstatus,sa_sendstatus,sa_printstatus,sa_count,sa_recorder,sa_recorddate,sa_updateman,sa_updatedate,sa_auditman,sa_auditdate,sa_remark,sa_getprice,sa_custid,sa_statuscode,sa_id,sa_sourceid,sa_recorderid,sa_paymentsid,sa_sync,sa_bcid,sa_minus,sa_b2cpucode,sa_total,sa_ts_user,sa_1_user from Sale where sa_statuscode in ('AUDITED','FINISH') order by sa_id desc) AA ) where rn>="+start+" and rn<="+end , SaleDTO.class);
|
|
|
+
|
|
|
+ if (saleDTOS.size() == 0 ){
|
|
|
+ return Result.error("销售订单无数据!");
|
|
|
+ }
|
|
|
+ // 4. 批量查询订单明细
|
|
|
+ List<SaleDetailDTO> saleDetailDTOS = baseDao.query("select sd_id,sd_said,sd_detno,sd_prodcode,pr_detail,pr_spec,pr_unit,sd_qty,sd_purcprice,sd_price,sd_discount,sd_total,sd_taxrate,sd_remark,sd_costprice,sd_taxtotal,sd_costingprice,sd_isspecial,sd_bonded,sd_delivery,sd_pmcdate,sd_pmcremark,sd_atpdelivery,sd_custprodcode,sd_custproddetail,sd_prodcustcode,pr_vendprodcode,sd_noforecast,sd_forecastcode,sd_forecastdetno,sd_yqty,sd_sendqty,sd_qty-nvl(sd_sendqty,0) sd_leaveassign,sd_leadtime,sd_bgprice,sd_description,sd_remark2,sd_bomid,sd_originaldetno,sd_originalqty,sd_status,sd_barcode,sd_tomakeqty,sd_packagedate,sd_vendorrate,sd_bodycost,sd_minus,sd_bomprice,pr_location from SaleDetail left join Product on sd_prodcode=pr_code where sd_said in (select sa_id from (select rownum rn,AA.* from (select * from Sale where sa_statuscode in ('AUDITED','FINISH') order by sa_id desc) AA) where rn>="+start+" and rn<="+end+") order by sd_said desc" , SaleDetailDTO.class);
|
|
|
+ // 5. 按订单ID分组订单明细
|
|
|
+ Map<BigDecimal, List<SaleDetailDTO>> saleDetailMap = saleDetailDTOS.stream().collect(Collectors.groupingBy(SaleDetailDTO::getSd_said));
|
|
|
+ // 6. 组装数据
|
|
|
+ List<SaleResp> saleResps = assembleOrderData(saleDTOS, saleDetailMap);
|
|
|
+
|
|
|
+ int count = baseDao.getCount("select count(1) from Sale where sa_statuscode in ('AUDITED','FINISH')");
|
|
|
+
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("pageNum", pageNum);
|
|
|
+ map.put("pageSize", pageSize);
|
|
|
+ map.put("size", count);
|
|
|
+ map.put("list", saleResps);
|
|
|
+ return Result.success(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 组装订单主从表数据
|
|
|
+ */
|
|
|
+ private List<SaleResp> assembleOrderData(List<SaleDTO> orders, Map<BigDecimal, List<SaleDetailDTO>> itemsMap) {
|
|
|
+ return orders.stream()
|
|
|
+ .map(order -> {
|
|
|
+ SaleResp saleListResp = convertToVO(order);
|
|
|
+
|
|
|
+ // 设置订单明细
|
|
|
+ List<SaleDetailDTO> items = itemsMap.get(order.getSa_id());
|
|
|
+ if (!CollectionUtils.isEmpty(items)) {
|
|
|
+ List<SaleDetailResp> itemVOS = items.stream()
|
|
|
+ .map(this::convertToItemVO)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ saleListResp.setSaleDetailResps(itemVOS);
|
|
|
+ } else {
|
|
|
+ saleListResp.setSaleDetailResps(new ArrayList<>());
|
|
|
+ }
|
|
|
+
|
|
|
+ return saleListResp;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 转换订单主表为VO
|
|
|
+ */
|
|
|
+ private SaleResp convertToVO(SaleDTO order) {
|
|
|
+ SaleResp saleResp = new SaleResp();
|
|
|
+ BeanUtils.copyProperties(order, saleResp);
|
|
|
+
|
|
|
+ return saleResp;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 转换订单明细为VO
|
|
|
+ */
|
|
|
+ private SaleDetailResp convertToItemVO(SaleDetailDTO item) {
|
|
|
+ SaleDetailResp vo = new SaleDetailResp();
|
|
|
+ BeanUtils.copyProperties(item, vo);
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Result getProduct(HttpServletRequest request, ProductReq req) {
|
|
|
String code = req.getCode();
|