Browse Source

Merge remote-tracking branch 'origin/dev' into dev

wangzhuo 3 years ago
parent
commit
8fe627a058
16 changed files with 589 additions and 36 deletions
  1. 13 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/Files.java
  2. 6 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/Repair.java
  3. 48 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/excel/DataAnalysisDetailsExcel.java
  4. 39 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/excel/DataAnalysisEXcel.java
  5. 53 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/vo/DataAnalysisVO.java
  6. 6 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java
  7. 47 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/excel/AnalysisDetailsExcel.java
  8. 6 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/vo/OrderVO.java
  9. 6 2
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/RepairController.java
  10. 38 29
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/RepairServiceImpl.java
  11. 147 0
      blade-service/blade-land/src/main/java/org/springblade/land/controller/StatisticsAnalysisController.java
  12. 4 0
      blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderMapper.java
  13. 40 1
      blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderMapper.xml
  14. 7 0
      blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderService.java
  15. 18 0
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java
  16. 111 4
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/partsapp/AppPartsController.java

+ 13 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/Files.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.box.tube.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -110,5 +111,17 @@ public class Files implements Serializable {
 	@ApiModelProperty(value = "类型  1 主表  2 明细")
 	private String type;
 
+	/**
+	 * 名称
+	 */
+	@TableField(exist = false)
+	private String label;
+
+	/**
+	 * 地址
+	 */
+	@TableField(exist = false)
+	private String value;
+
 
 }

+ 6 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/Repair.java

@@ -145,6 +145,12 @@ public class Repair implements Serializable {
 	private Date newDate;
 
 	/**
+	 * 最新时间
+	 */
+	@TableField(exist = false)
+	private List<String> newDateList;
+
+	/**
 	 * 明细
 	 */
 	@TableField(exist = false)

+ 48 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/excel/DataAnalysisDetailsExcel.java

@@ -0,0 +1,48 @@
+package org.springblade.land.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 陆运台账
+ *
+ * @author s
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class DataAnalysisDetailsExcel {
+	//系统号
+	@ExcelProperty("系统号")
+	private String orderNo;
+	//合同号
+	@ExcelProperty("合同号")
+	private String billNo;
+
+	//客户名称
+	@ExcelProperty("客户名称")
+	private String corpName;
+
+	//业务日期
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelProperty("业务日期")
+	private Date bsDate;
+
+	//车号
+	@ExcelProperty("车号")
+	private String plateNo;
+
+	//应付金额
+	@ExcelProperty("应付金额")
+	private BigDecimal freightPay;
+
+
+}

+ 39 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/excel/DataAnalysisEXcel.java

@@ -0,0 +1,39 @@
+package org.springblade.land.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 陆运台账
+ *
+ * @author s
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class DataAnalysisEXcel {
+
+
+	//客户名称
+	@ExcelProperty("客户名称")
+	private String corpName;
+
+	//应付金额
+	@ExcelProperty("应付金额")
+	private BigDecimal freightPay;
+
+	//平台购买数
+	@ExcelProperty("平台购买数")
+	private int platformBuy;
+
+
+}

+ 53 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/vo/DataAnalysisVO.java

@@ -0,0 +1,53 @@
+package org.springblade.land.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 陆运台账
+ *
+ * @author s
+ */
+@Data
+public class DataAnalysisVO {
+
+	private Long orderId;
+
+	//客户id
+	private String corpId;
+	//客户名称
+	private String corpName;
+
+	//业务日期
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date bsDate;
+
+	private List<String> bsDateList;
+
+	//合同号
+	private String billNo;
+
+	//系统号
+	private String orderNo;
+
+	//车号
+	private String plateNo;
+
+	//应收金额
+	private BigDecimal freightCollect;
+
+	//应付金额
+	private BigDecimal freightPay;
+
+	//平台购买数
+	private int platformBuy;
+
+	//租户
+	private String tenantId;
+
+
+}

+ 6 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java

@@ -1129,4 +1129,10 @@ public class Order implements Serializable {
 	@TableField(exist = false)
 	private String SrcSysNo;
 
+	/**
+	 * 单价
+	 */
+	@TableField(exist = false)
+	private BigDecimal price;
+
 }

+ 47 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/excel/AnalysisDetailsExcel.java

@@ -0,0 +1,47 @@
+package org.springblade.purchase.sales.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 陆运台账
+ *
+ * @author s
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class AnalysisDetailsExcel {
+	//系统号
+	@ExcelProperty("系统号")
+	private String sysNo;
+
+	//客户名称
+	@ExcelProperty("客户名称")
+	private String corpsName;
+
+	//业务日期
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelProperty("业务日期")
+	private Date businesDate;
+
+	//数量
+	@ExcelProperty("数量")
+	private BigDecimal storageQuantity;
+	//单价
+	@ExcelProperty("单价")
+	private BigDecimal price;
+	//应付金额
+	@ExcelProperty("应付金额")
+	private BigDecimal debitAmount;
+
+
+}

+ 6 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/vo/OrderVO.java

@@ -168,5 +168,11 @@ public class OrderVO extends Order {
 	@TableField(exist = false)
 	private String time;
 
+	/**
+	 * 业务日期
+	 */
+	@TableField(exist = false)
+	private List<String> businesDateList;
+
 
 }

+ 6 - 2
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/RepairController.java

@@ -78,9 +78,13 @@ public class RepairController extends BladeController {
 			.like(ObjectUtils.isNotNull(repair.getCode()), Repair::getCode, repair.getCode())//箱号
 			.like(ObjectUtils.isNotNull(repair.getCompanyId()), Repair::getCompanyId, repair.getCompanyId())//公司id
 			.eq(ObjectUtils.isNotNull(repair.getStatus()), Repair::getStatus, repair.getStatus())//状态
-			.eq(ObjectUtils.isNotNull(repair.getAddress()), Repair::getAddress, repair.getAddress())//地点
+			.eq(ObjectUtils.isNotNull(repair.getAddressId()), Repair::getAddressId, repair.getAddressId())//地点
 			.eq(ObjectUtils.isNotNull(repair.getBillType()), Repair::getBillType, repair.getBillType());//业务类型
-		IPage<Repair> pages = repairService.page(Condition.getPage(query), Condition.getQueryWrapper(repair));
+		if (repair.getNewDateList() != null && repair.getNewDateList().size() > 1) {//最新时间
+			lambdaQueryWrapper.ge(Repair::getNewDate, repair.getNewDateList().get(0));
+			lambdaQueryWrapper.le(Repair::getNewDate, repair.getNewDateList().get(1));
+		}
+		IPage<Repair> pages = repairService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 

+ 38 - 29
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/RepairServiceImpl.java

@@ -126,6 +126,10 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
 					.eq(Files::getType, "2")
 					.eq(Files::getPid, repairItem.getId());
 				List<Files> filesList = filesMapper.selectList(filesLambdaQueryWrapper);
+				for (Files files : filesList) {
+					files.setLabel(files.getFileName());
+					files.setValue(files.getUrl());
+				}
 				repairItem.setItemFilesList(filesList);
 			}
 			details.setRepairItemList(repairItemList);
@@ -161,6 +165,8 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public Repair add(Repair repair) {
 		//判断id是否为空
 		if (repair.getId() == null) {
@@ -185,35 +191,6 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
 			baseMapper.updateById(repair);
 		}
 
-		//更新箱档案数据
-		if (ObjectUtils.isNotNull(repair.getCode())) {
-			Archives archives = new Archives();
-			archives.setCode(repair.getCode());
-			archives.setAddress(repair.getAddress());
-			archives.setAddressId(repair.getAddressId());
-			archives.setNewDate(repair.getNewDate());
-			archivesMapper.updateCode(archives);
-
-			//记录箱轨迹信息
-			ArchivesTrajectory archivesTrajectory = new ArchivesTrajectory();
-			if ("REPAIR".equals(repair.getBillType())) {
-				archivesTrajectory.setStatus("修箱");
-			} else if ("WASH".equals(repair.getBillType())) {
-				archivesTrajectory.setStatus("洗箱");
-			}
-			archivesTrajectory.setBillType(repair.getBillType());
-			archivesTrajectory.setCode(repair.getCode());
-			archivesTrajectory.setAddress(repair.getAddress());
-			archivesTrajectory.setNewDate(repair.getNewDate());
-			archivesTrajectory.setCreateTime(new Date());
-			archivesTrajectory.setCreateUser(AuthUtil.getUserId());
-			archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
-			archivesTrajectory.setTenantId(AuthUtil.getTenantId());
-			archivesTrajectoryMapper.insert(archivesTrajectory);
-		} else {
-			throw new RuntimeException("箱号不能为空");
-		}
-
 		//明细
 		List<RepairItem> repairItemList = repair.getRepairItemList();
 		if (ObjectUtils.isNotNull(repairItemList) && repairItemList.size() > 0) {
@@ -253,14 +230,46 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
 							files.setTenantId(AuthUtil.getTenantId());
 							files.setPid(repairItem.getId());
 							files.setType("2");
+							files.setFileName(files.getLabel());
+							files.setUrl(files.getValue());
 							filesMapper.insert(files);
 						} else {
 							files.setUpdateUser(AuthUtil.getUserId());
 							files.setUpdateTime(new Date());
 							files.setPid(repairItem.getId());
+							files.setFileName(files.getLabel());
+							files.setUrl(files.getValue());
 							filesMapper.updateById(files);
 						}
 					}
+					//更新箱档案数据
+					if (ObjectUtils.isNotNull(repairItem.getCode())) {
+						Archives archives = new Archives();
+						archives.setCode(repairItem.getCode());
+						archives.setAddress(repair.getAddress());
+						archives.setAddressId(repair.getAddressId());
+						archives.setNewDate(repair.getNewDate());
+						archivesMapper.updateCode(archives);
+
+						//记录箱轨迹信息
+						ArchivesTrajectory archivesTrajectory = new ArchivesTrajectory();
+						if ("REPAIR".equals(repair.getBillType())) {
+							archivesTrajectory.setStatus("修箱");
+						} else if ("WASH".equals(repair.getBillType())) {
+							archivesTrajectory.setStatus("洗箱");
+						}
+						archivesTrajectory.setBillType(repair.getBillType());
+						archivesTrajectory.setCode(repairItem.getCode());
+						archivesTrajectory.setAddress(repair.getAddress());
+						archivesTrajectory.setNewDate(repair.getNewDate());
+						archivesTrajectory.setCreateTime(new Date());
+						archivesTrajectory.setCreateUser(AuthUtil.getUserId());
+						archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
+						archivesTrajectory.setTenantId(AuthUtil.getTenantId());
+						archivesTrajectoryMapper.insert(archivesTrajectory);
+					} else {
+						throw new RuntimeException("箱号不能为空");
+					}
 				}
 				repairItem.setItemFilesList(itemFilesList);
 			}

+ 147 - 0
blade-service/blade-land/src/main/java/org/springblade/land/controller/StatisticsAnalysisController.java

@@ -0,0 +1,147 @@
+package org.springblade.land.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.land.entity.LandOrder;
+import org.springblade.land.excel.DataAnalysisDetailsExcel;
+import org.springblade.land.excel.DataAnalysisEXcel;
+import org.springblade.land.service.IOrderService;
+import org.springblade.land.vo.DataAnalysisVO;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/statisticsAnalysis")
+@Api(value = "统计分析", tags = "统计分析接口")
+public class StatisticsAnalysisController {
+
+	private final IOrderService orderService;
+
+	private final ICorpsDescClient corpsDescClient;
+
+
+	/**
+	 * 数据分析(应收,应付)
+	 */
+	@GetMapping("/dataAnalysis")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "统计分析", notes = "传入orderAcctVO")
+	public R<IPage<DataAnalysisVO>> dataAnalysis(DataAnalysisVO dataAnalysisVO, Query query) {
+		IPage<DataAnalysisVO> pages = orderService.getDataAnalysis(Condition.getPage(query), dataAnalysisVO);
+		for (DataAnalysisVO dataAnalysisVO_ : pages.getRecords()) {
+			dataAnalysisVO_.setPlatformBuy(0);
+		}
+		return R.data(pages);
+	}
+
+	/**
+	 * 数据分析(应收,应付)导出
+	 */
+	@GetMapping("/dataAnalysisExport")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "统计分析", notes = "传入orderAcctVO")
+	public void dataAnalysisExport(DataAnalysisVO dataAnalysisVO, HttpServletResponse response) {
+		List<DataAnalysisVO> list = orderService.dataAnalysisExport(dataAnalysisVO);
+		for (DataAnalysisVO dataAnalysisVO_ : list) {
+			dataAnalysisVO_.setPlatformBuy(0);
+		}
+		ExcelUtil.export(response, "导出箱档案信息", "导出数据表", BeanUtil.copy(list, DataAnalysisEXcel.class), DataAnalysisEXcel.class);
+	}
+
+	/**
+	 * 明细列表
+	 */
+	@GetMapping("/detailsList")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "统计分析", notes = "传入orderAcctVO")
+	public R<IPage<DataAnalysisVO>> detailsList(DataAnalysisVO dataAnalysisVO, Query query) {
+		LambdaQueryWrapper<LandOrder> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(LandOrder::getIsDeleted, 0)
+			.eq(LandOrder::getTenantId, AuthUtil.getTenantId())
+			.eq(LandOrder::getCorpId, dataAnalysisVO.getCorpId());
+		if (dataAnalysisVO.getBsDateList() != null && dataAnalysisVO.getBsDateList().size() > 1) {
+			lambdaQueryWrapper.ge(LandOrder::getBsDate, dataAnalysisVO.getBsDateList().get(0));
+			lambdaQueryWrapper.le(LandOrder::getBsDate, dataAnalysisVO.getBsDateList().get(1));
+		}
+		IPage<LandOrder> pages = orderService.page(Condition.getPage(query), lambdaQueryWrapper);
+		List<DataAnalysisVO> dataAnalysisVOList = new ArrayList<>();
+		for (LandOrder landOrder : pages.getRecords()) {
+			DataAnalysisVO DataAnalysisVO_ = new DataAnalysisVO();
+			CorpsDesc corpsDesc = corpsDescClient.getCorpId(landOrder.getCorpId());
+			if (ObjectUtils.isNotNull(corpsDesc)) {
+				DataAnalysisVO_.setCorpName(corpsDesc.getCname());
+			}
+			DataAnalysisVO_.setBsDate(landOrder.getBsDate());
+			DataAnalysisVO_.setBillNo(landOrder.getBillNo());
+			DataAnalysisVO_.setOrderNo(landOrder.getOrderNo());
+			DataAnalysisVO_.setPlateNo(landOrder.getPlateNo());
+			DataAnalysisVO_.setFreightCollect(landOrder.getFreightCollect());
+			DataAnalysisVO_.setFreightPay(landOrder.getFreightPay());
+			dataAnalysisVOList.add(DataAnalysisVO_);
+		}
+		IPage<DataAnalysisVO> newPage = new Page<>();
+		newPage.setRecords(dataAnalysisVOList);
+		newPage.setPages(pages.getPages());
+		newPage.setSize(pages.getSize());
+		newPage.setCurrent(pages.getCurrent());
+		newPage.setTotal(pages.getTotal());
+		return R.data(newPage);
+	}
+
+	/**
+	 * 明细列表导出
+	 */
+	@GetMapping("/detailsListExport")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "统计分析", notes = "传入orderAcctVO")
+	public void detailsListExport(DataAnalysisVO dataAnalysisVO, HttpServletResponse response) {
+		LambdaQueryWrapper<LandOrder> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(LandOrder::getIsDeleted, 0)
+			.eq(LandOrder::getTenantId, AuthUtil.getTenantId())
+			.eq(LandOrder::getCorpId, dataAnalysisVO.getCorpId());
+		if (dataAnalysisVO.getBsDateList() != null && dataAnalysisVO.getBsDateList().size() > 1) {
+			lambdaQueryWrapper.ge(LandOrder::getBsDate, dataAnalysisVO.getBsDateList().get(0));
+			lambdaQueryWrapper.le(LandOrder::getBsDate, dataAnalysisVO.getBsDateList().get(1));
+		}
+		List<LandOrder> landOrderList = orderService.list(lambdaQueryWrapper);
+		List<DataAnalysisVO> dataAnalysisVOList = new ArrayList<>();
+		for (LandOrder landOrder : landOrderList) {
+			DataAnalysisVO DataAnalysisVO_ = new DataAnalysisVO();
+			CorpsDesc corpsDesc = corpsDescClient.getCorpId(landOrder.getCorpId());
+			if (ObjectUtils.isNotNull(corpsDesc)) {
+				DataAnalysisVO_.setCorpName(corpsDesc.getCname());
+			}
+			DataAnalysisVO_.setBsDate(landOrder.getBsDate());
+			DataAnalysisVO_.setBillNo(landOrder.getBillNo());
+			DataAnalysisVO_.setOrderNo(landOrder.getOrderNo());
+			DataAnalysisVO_.setPlateNo(landOrder.getPlateNo());
+			DataAnalysisVO_.setFreightCollect(landOrder.getFreightCollect());
+			DataAnalysisVO_.setFreightPay(landOrder.getFreightPay());
+			dataAnalysisVOList.add(DataAnalysisVO_);
+		}
+		ExcelUtil.export(response, "导出应收明细信息", "导出数据表", BeanUtil.copy(dataAnalysisVOList, DataAnalysisDetailsExcel.class), DataAnalysisDetailsExcel.class);
+	}
+
+
+}

+ 4 - 0
blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderMapper.java

@@ -19,6 +19,7 @@ package org.springblade.land.mapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.land.entity.LandOrder;
+import org.springblade.land.vo.DataAnalysisVO;
 import org.springblade.land.vo.OrderAcctVO;
 import org.springblade.land.vo.OrderVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -52,4 +53,7 @@ public interface OrderMapper extends BaseMapper<LandOrder> {
 	 */
 	List<OrderAcctVO> selectAcctList(IPage<OrderAcctVO> page, @Param("acct") OrderAcctVO acctVO);
 
+    List<DataAnalysisVO> getDataAnalysis(IPage<DataAnalysisVO> page, @Param("dataAnalysisVO") DataAnalysisVO dataAnalysisVO);
+
+	List<DataAnalysisVO> dataAnalysisExport(@Param("dataAnalysisVO") DataAnalysisVO dataAnalysisVO);
 }

+ 40 - 1
blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderMapper.xml

@@ -161,5 +161,44 @@
         <if test="acct.shippingMode != null and acct.shippingMode != '' and acct.shippingMode == '散货'">order by t1.arrival_time desc</if>
         <if test="acct.shippingMode != null and acct.shippingMode != '' and acct.shippingMode != '散货'">order by t2.arrival_time desc</if>
     </select>
-
+    <select id="getDataAnalysis" resultType="org.springblade.land.vo.DataAnalysisVO">
+        SELECT
+            bcd.id AS corpId,
+            bcd.cname AS corpName,
+            sum( lo.freight_pay ) AS freightPay,
+            sum( lo.freight_collect ) AS freightCollect
+        FROM
+            land_order lo
+                LEFT JOIN basic_corps_desc bcd ON lo.corp_id = bcd.id
+        WHERE
+            lo.is_deleted = 0
+          AND lo.tenant_id = '234557'
+          AND lo.corp_id != ""
+        <if test="dataAnalysisVO.corpName != null  and  dataAnalysisVO.corpName != ''">and bcd.cname like concat('%', #{dataAnalysisVO.corpName}, '%')</if>
+        <if test="dataAnalysisVO.corpId != null and  dataAnalysisVO.corpId != ''">and lo.corp_id like concat('%', #{dataAnalysisVO.corpId}, '%')</if>
+        <if test="dataAnalysisVO.bsDateList != null and  dataAnalysisVO.bsDateList[0] != ''">and t2.arrival_time &gt;= #{dataAnalysisVO.bsDateList[0]}</if>
+        <if test="dataAnalysisVO.bsDateList != null and  dataAnalysisVO.bsDateList[1] != ''">and t2.arrival_time &lt;= #{dataAnalysisVO.bsDateList[1]}</if>
+        GROUP BY
+            lo.corp_id
+    </select>
+    <select id="dataAnalysisExport" resultType="org.springblade.land.vo.DataAnalysisVO">
+        SELECT
+        bcd.id AS corpId,
+        bcd.cname AS corpName,
+        sum( lo.freight_pay ) AS freightPay,
+        sum( lo.freight_collect ) AS freightCollect
+        FROM
+        land_order lo
+        LEFT JOIN basic_corps_desc bcd ON lo.corp_id = bcd.id
+        WHERE
+        lo.is_deleted = 0
+        AND lo.tenant_id = '234557'
+        AND lo.corp_id != ""
+        <if test="dataAnalysisVO.corpName != null  and  dataAnalysisVO.corpName != ''">and bcd.cname like concat('%', #{dataAnalysisVO.corpName}, '%')</if>
+        <if test="dataAnalysisVO.corpId != null and  dataAnalysisVO.corpId != ''">and lo.corp_id like concat('%', #{dataAnalysisVO.corpId}, '%')</if>
+        <if test="dataAnalysisVO.bsDateList != null and  dataAnalysisVO.bsDateList[0] != ''">and t2.arrival_time &gt;= #{dataAnalysisVO.bsDateList[0]}</if>
+        <if test="dataAnalysisVO.bsDateList != null and  dataAnalysisVO.bsDateList[1] != ''">and t2.arrival_time &lt;= #{dataAnalysisVO.bsDateList[1]}</if>
+        GROUP BY
+        lo.corp_id
+    </select>
 </mapper>

+ 7 - 0
blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderService.java

@@ -22,6 +22,7 @@ import org.springblade.client.entity.CommonFile;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.land.entity.LandOrder;
+import org.springblade.land.vo.DataAnalysisVO;
 import org.springblade.land.vo.OrderAcctVO;
 import org.springblade.land.vo.OrderVO;
 
@@ -181,4 +182,10 @@ public interface IOrderService extends IService<LandOrder> {
 	 */
 	List<CommonFile> fileList(Long id);
 
+	/**
+	 * 数据分析(应收,应付)
+	 */
+	IPage<DataAnalysisVO> getDataAnalysis(IPage<DataAnalysisVO> page, DataAnalysisVO dataAnalysisVO);
+
+	List<DataAnalysisVO> dataAnalysisExport(DataAnalysisVO dataAnalysisVO);
 }

+ 18 - 0
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java

@@ -38,6 +38,7 @@ import org.springblade.land.entity.*;
 import org.springblade.land.mapper.*;
 import org.springblade.land.service.IOrderService;
 import org.springblade.land.util.MessageUtil;
+import org.springblade.land.vo.DataAnalysisVO;
 import org.springblade.land.vo.OrderAcctVO;
 import org.springblade.land.vo.OrderVO;
 import org.springblade.system.entity.Dept;
@@ -1256,6 +1257,23 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 		return Collections.emptyList();
 	}
 
+	/**
+	 * 数据分析(应收,应付)
+	 */
+	@Override
+	public IPage<DataAnalysisVO> getDataAnalysis(IPage<DataAnalysisVO> page, DataAnalysisVO dataAnalysisVO) {
+		dataAnalysisVO.setTenantId(AuthUtil.getTenantId());
+		List<DataAnalysisVO> dataAnalysisVOList = baseMapper.getDataAnalysis(page, dataAnalysisVO);
+//		calculateAcct(acctList);
+		return page.setRecords(dataAnalysisVOList);
+	}
+
+	@Override
+	public List<DataAnalysisVO> dataAnalysisExport(DataAnalysisVO dataAnalysisVO) {
+		dataAnalysisVO.setTenantId(AuthUtil.getTenantId());
+		return baseMapper.dataAnalysisExport(dataAnalysisVO);
+	}
+
 	private List<OrderItem> getOrderItemList(Long id) {
 		List<OrderItem> orderItemList = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
 			.eq(OrderItem::getOrderId, id)

+ 111 - 4
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/partsapp/AppPartsController.java

@@ -30,17 +30,20 @@ import org.springblade.client.entity.StorageDesc;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IStorageClient;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.finance.feign.IFinanceClient;
 import org.springblade.finance.vojo.Acc;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.entity.OrderItems;
+import org.springblade.purchase.sales.excel.AnalysisDetailsExcel;
 import org.springblade.purchase.sales.service.IOrderItemsService;
 import org.springblade.purchase.sales.service.IOrderService;
 import org.springblade.purchase.sales.vo.OrderVO;
@@ -48,14 +51,12 @@ import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * 国内销售或采购订单表 控制器
@@ -466,4 +467,110 @@ public class AppPartsController extends BladeController {
 		map.put("averageAmount", averageAmount);
 		return R.data(map);
 	}
+
+	/**
+	 * 中电 统计分析 :应付分析
+	 */
+	@GetMapping("/detailsList")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入order")
+	public R<IPage<Order>> detailsList(OrderVO order, Query query) {
+		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Order::getTenantId, order.getTenantId());//租户id
+		lambdaQueryWrapper.eq(Order::getIsDeleted, 0);//订单是否有效
+		if (ObjectUtils.isNotNull(order.getCorpsName())) {
+			String corpsName = order.getCorpsName().replaceAll(" ","");
+			List<Long> ids = corpsDescClient.listCorpIdByName(corpsName);
+			if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
+				lambdaQueryWrapper.in(Order::getCorpId, ids);//客户id
+			} else {
+				lambdaQueryWrapper.isNull(Order::getCorpId);
+			}
+		} else {
+			lambdaQueryWrapper.like(Func.isNotEmpty(order.getCorpId()), Order::getCorpId, order.getCorpId());//客户id
+		}
+		if (order.getBusinesDateList() != null && order.getBusinesDateList().size() > 1) {
+			lambdaQueryWrapper.ge(Order::getBusinesDate, order.getBusinesDateList().get(0));
+			lambdaQueryWrapper.le(Order::getBusinesDate, order.getBusinesDateList().get(1));
+		}
+		lambdaQueryWrapper.eq(Func.isNotEmpty(order.getBillType()), Order::getBillType, order.getBillType());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(order.getTradeType()), Order::getTradeType, order.getTradeType());
+		IPage<Order> page = orderService.page(Condition.getPage(query), lambdaQueryWrapper);
+
+		String corpIds = "";//客户拼接
+
+		for (Order orders : page.getRecords()) {
+			if (ObjectUtil.isNotEmpty(orders.getCorpId())) {
+				corpIds = corpIds + orders.getCorpId() + ",";
+			}
+		}
+		List<CorpsDesc> corpsDescList = corpsDescClient.selectByCorpIds(corpIds);
+		if (CollectionUtils.isNotEmpty(page.getRecords())) {
+			page.getRecords().stream().forEach(item -> {
+				if (item.getCorpId() != null) {
+					if (ObjectUtil.isNotEmpty(corpsDescList)) {
+						CorpsDesc corpsDesc = corpsDescList.stream().filter(d -> d.getId().equals(item.getCorpId())).findFirst().orElse(null);
+						if (ObjectUtils.isNotNull(corpsDesc)) {
+							item.setCorpsName(corpsDesc.getCname());
+						}
+					}
+				}
+			});
+		}
+		return R.data(page);
+	}
+
+
+	/**
+	 * 明细列表导出
+	 */
+	@GetMapping("/detailsListExport")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "统计分析", notes = "传入orderAcctVO")
+	public void detailsListExport(OrderVO order, HttpServletResponse response) {
+		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Order::getTenantId, order.getTenantId());//租户id
+		lambdaQueryWrapper.eq(Order::getIsDeleted, 0);//订单是否有效
+		if (ObjectUtils.isNotNull(order.getCorpsName())) {
+			String corpsName = order.getCorpsName().replaceAll(" ","");
+			List<Long> ids = corpsDescClient.listCorpIdByName(corpsName);
+			if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
+				lambdaQueryWrapper.in(Order::getCorpId, ids);//客户id
+			} else {
+				lambdaQueryWrapper.isNull(Order::getCorpId);
+			}
+		} else {
+			lambdaQueryWrapper.like(Func.isNotEmpty(order.getCorpId()), Order::getCorpId, order.getCorpId());//客户id
+		}
+		if (order.getBusinesDateList() != null && order.getBusinesDateList().size() > 1) {
+			lambdaQueryWrapper.ge(Order::getBusinesDate, order.getBusinesDateList().get(0));
+			lambdaQueryWrapper.le(Order::getBusinesDate, order.getBusinesDateList().get(1));
+		}
+		lambdaQueryWrapper.eq(Func.isNotEmpty(order.getBillType()), Order::getBillType, order.getBillType());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(order.getTradeType()), Order::getTradeType, order.getTradeType());
+		List<Order> list = orderService.list(lambdaQueryWrapper);
+
+		String corpIds = "";//客户拼接
+
+		for (Order orders : list) {
+			if (ObjectUtil.isNotEmpty(orders.getCorpId())) {
+				corpIds = corpIds + orders.getCorpId() + ",";
+			}
+		}
+		List<CorpsDesc> corpsDescList = corpsDescClient.selectByCorpIds(corpIds);
+		if (CollectionUtils.isNotEmpty(list)) {
+			list.stream().forEach(item -> {
+				if (item.getCorpId() != null) {
+					if (ObjectUtil.isNotEmpty(corpsDescList)) {
+						CorpsDesc corpsDesc = corpsDescList.stream().filter(d -> d.getId().equals(item.getCorpId())).findFirst().orElse(null);
+						if (ObjectUtils.isNotNull(corpsDesc)) {
+							item.setCorpsName(corpsDesc.getCname());
+						}
+					}
+				}
+			});
+		}
+		ExcelUtil.export(response, "导出应收明细信息", "导出数据表", BeanUtil.copy(list, AnalysisDetailsExcel.class), AnalysisDetailsExcel.class);
+	}
+
 }