Browse Source

APP、业务提成报表

sunhz 3 years ago
parent
commit
456e4ef6b9
19 changed files with 941 additions and 421 deletions
  1. 5 5
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 3 3
      blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
  3. 30 0
      blade-ops/blade-report/src/main/java/org/springblade/report/ureport/DeliveryBean.java
  4. 237 229
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java
  5. 47 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/enums/DeliveryReportEnum.java
  6. 21 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/feign/IDeliveryReportClient.java
  7. 52 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/vo/DeliveryReportVO.java
  8. 11 8
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java
  9. 83 68
      blade-service-api/store-goods-api/src/main/java/com/store/goods/entity/App.java
  10. 53 34
      blade-service-api/store-goods-api/src/main/java/com/store/goods/entity/AppVersion.java
  11. 5 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderFees.java
  12. 10 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderItems.java
  13. 246 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryReportController.java
  14. 7 12
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  15. 12 16
      blade-service/store-goods/src/main/java/com/store/goods/controller/AppController.java
  16. 25 27
      blade-service/store-goods/src/main/java/com/store/goods/controller/AppVersionController.java
  17. 18 6
      blade-service/store-goods/src/main/java/com/store/goods/service/IAppService.java
  18. 66 13
      blade-service/store-goods/src/main/java/com/store/goods/service/impl/AppServiceImpl.java
  19. 10 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/controller/PurchaseOrderController.java

+ 5 - 5
blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java

@@ -64,17 +64,17 @@ public interface LauncherConstant {
 	/**
 	 * nacos dev 地址
 	 */
-	String NACOS_DEV_ADDR = "127.0.0.1:8848";
+	String NACOS_DEV_ADDR = "192.168.1.133:8848";
 
 	/**
 	 * nacos prod 地址
 	 */
-	String NACOS_PROD_ADDR = "121.37.83.47:8848";
+	String NACOS_PROD_ADDR = "192.168.1.133:8848";
 
 	/**
 	 * nacos test 地址
 	 */
-	String NACOS_TEST_ADDR = "121.37.83.47:8848";
+	String NACOS_TEST_ADDR = "192.168.1.133:8848";
 
 	/**
 	 * sentinel dev 地址
@@ -94,7 +94,7 @@ public interface LauncherConstant {
 	/**
 	 * seata dev 地址
 	 */
-	String SEATA_DEV_ADDR = "127.0.0.1:8091";
+	String SEATA_DEV_ADDR = "192.168.1.133:8091";
 
 	/**
 	 * seata prod 地址
@@ -139,7 +139,7 @@ public interface LauncherConstant {
 	/**
 	 * seata file模式
 	 */
-	String FILE_MODE = "file";
+	String FILE_MODE = "db";
 
 	/**
 	 * seata nacos模式

+ 3 - 3
blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java

@@ -46,11 +46,11 @@ public class LauncherServiceImpl implements LauncherService {
 		// PropsUtil.setProperty(props, "blade.log.elk.destination", LauncherConstant.elkAddr(profile));
 
 		// seata注册地址
-		// PropsUtil.setProperty(props, "seata.service.grouplist.default", LauncherConstant.seataAddr(profile));
+		PropsUtil.setProperty(props, "seata.service.grouplist.default", LauncherConstant.seataAddr(profile));
 		// seata注册group格式
-		 PropsUtil.setProperty(props, "seata.tx-service-group", LauncherConstant.seataServiceGroup(appName));
+		PropsUtil.setProperty(props, "seata.tx-service-group", LauncherConstant.seataServiceGroup(appName));
 		// seata配置服务group
-		 PropsUtil.setProperty(props, "seata.service.vgroup-mapping.".concat(LauncherConstant.seataServiceGroup(appName)), LauncherConstant.DEFAULT_MODE);
+		PropsUtil.setProperty(props, "seata.service.vgroup-mapping.".concat(LauncherConstant.seataServiceGroup(appName)), LauncherConstant.DEFAULT_MODE);
 		// seata注册模式配置
 		// PropsUtil.setProperty(props, "seata.registry.type", LauncherConstant.NACOS_MODE);
 		// PropsUtil.setProperty(props, "seata.registry.nacos.server-addr", LauncherConstant.nacosAddr(profile));

+ 30 - 0
blade-ops/blade-report/src/main/java/org/springblade/report/ureport/DeliveryBean.java

@@ -0,0 +1,30 @@
+package org.springblade.report.ureport;
+
+import lombok.AllArgsConstructor;
+import org.springblade.deliver.goods.feign.IDeliveryReportClient;
+import org.springblade.deliver.goods.vo.DeliveryReportVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+@Component
+@AllArgsConstructor
+public class DeliveryBean {
+
+	private final IDeliveryReportClient reportClient;
+
+	public List<DeliveryReportVO> loadCommissionData(String dsName, String datasetName, Map<String, Object> parameters) {
+		int year = (int) parameters.get("year");
+		String quarter = (String) parameters.get("quarter");
+		String userType = (String) parameters.get("userType");
+		Long userId = parameters.get("userId") == null ? null : (Long) parameters.get("userId");
+
+		DeliveryReportVO reportVO = new DeliveryReportVO();
+		reportVO.setYear(year);
+		reportVO.setQuarter(quarter);
+		reportVO.setUserId(userId);
+		reportVO.setUserType(userType);
+		return reportClient.commission(reportVO).getData();
+	}
+}

+ 237 - 229
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java

@@ -16,21 +16,18 @@
  */
 package org.springblade.deliver.goods.entity;
 
-import java.math.BigDecimal;
-
-import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
 /**
  * 发货通知单实体类
  *
@@ -45,273 +42,284 @@ public class Delivery implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	/**
-	* 主键
-	*/
-		@ApiModelProperty(value = "主键")
-		private Long id;
-	/**
-	* 系统编号
-	*/
-		@ApiModelProperty(value = "系统编号")
-		private String sysNo;
-	/**
-	* 订单号
-	*/
-		@ApiModelProperty(value = "订单号")
-		private String orderNo;
-	/**
-	* 原始订单号
-	*/
-		@ApiModelProperty(value = "原始订单号")
-		private String orgOrderNo;
-	/**
-	* 来源订单号
-	*/
-		@ApiModelProperty(value = "来源订单号")
-		private String srcOrderNo;
-	/**
-	* 来源id
-	*/
-		@ApiModelProperty(value = "来源id")
-		private Long srcId;
-	/**
-	* 发货通知单
-	*/
-		@ApiModelProperty(value = "发货通知单")
-		private String billType;
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
+	/**
+	 * 系统编号
+	 */
+	@ApiModelProperty(value = "系统编号")
+	private String sysNo;
+	/**
+	 * 订单号
+	 */
+	@ApiModelProperty(value = "订单号")
+	private String orderNo;
+	/**
+	 * 原始订单号
+	 */
+	@ApiModelProperty(value = "原始订单号")
+	private String orgOrderNo;
+	/**
+	 * 来源订单号
+	 */
+	@ApiModelProperty(value = "来源订单号")
+	private String srcOrderNo;
+	/**
+	 * 来源id
+	 */
+	@ApiModelProperty(value = "来源id")
+	private Long srcId;
+	/**
+	 * 发货通知单
+	 */
+	@ApiModelProperty(value = "发货通知单")
+	private String billType;
 	/**
 	 * 贸易类型(枚举:国内、进口、出口)
 	 */
-		@ApiModelProperty(value = "贸易类型(枚举:国内、进口、出口)")
-		private String tradeType;
-	/**
-	* 发货日期
-	*/
-		@ApiModelProperty(value = "发货日期")
-		private Date businessDate;
-	/**
-	* 客户id(全称)
-	*/
-		@ApiModelProperty(value = "客户id(全称)")
-		private Long corpId;
-	/**
-	* 仓库id(全称)
-	*/
-		@ApiModelProperty(value = "仓库id(全称)")
-		private Long storageId;
-	/**
-	* 仓库电话
-	*/
-		@ApiModelProperty(value = "仓库电话")
-		private String storageTel;
-	/**
-	* 收货人
-	*/
-		@ApiModelProperty(value = "收货人")
-		private String arrivalContact;
-	/**
-	* 收货地址
-	*/
-		@ApiModelProperty(value = "收货地址")
-		private String arrivalAddress;
-	/**
-	* 收货人签字
-	*/
-		@ApiModelProperty(value = "收货人签字")
-		private String arrivalSign;
-	/**
-	* 收货备注
-	*/
-		@ApiModelProperty(value = "收货备注")
-		private String otherRemarks;
-	/**
-	* 运费要求
-	*/
-		@ApiModelProperty(value = "运费要求")
-		private String freightRemarks;
-	/**
-	* 数量合计
-	*/
-		@ApiModelProperty(value = "数量合计")
-		private BigDecimal totalQuantity;
-	/**
-	* 重量合计
-	*/
-		@ApiModelProperty(value = "重量合计")
-		private BigDecimal totalWeight;
-	/**
-	* 体积合计
-	*/
-		@ApiModelProperty(value = "体积合计")
-		private BigDecimal totalVolumn;
-	/**
-	* 备注
-	*/
-		@ApiModelProperty(value = "备注")
-		private String deliveryRemarks;
-	/**
-	* 特别提醒
-	*/
-		@ApiModelProperty(value = "特别提醒")
-		private String specialRemarks;
-	/**
-	* 版本
-	*/
-		@ApiModelProperty(value = "版本")
-		private String version;
+	@ApiModelProperty(value = "贸易类型(枚举:国内、进口、出口)")
+	private String tradeType;
+	/**
+	 * 发货日期
+	 */
+	@ApiModelProperty(value = "发货日期")
+	private Date businessDate;
+	/**
+	 * 客户id(全称)
+	 */
+	@ApiModelProperty(value = "客户id(全称)")
+	private Long corpId;
+	/**
+	 * 仓库id(全称)
+	 */
+	@ApiModelProperty(value = "仓库id(全称)")
+	private Long storageId;
+	/**
+	 * 仓库电话
+	 */
+	@ApiModelProperty(value = "仓库电话")
+	private String storageTel;
+	/**
+	 * 收货人
+	 */
+	@ApiModelProperty(value = "收货人")
+	private String arrivalContact;
+	/**
+	 * 收货地址
+	 */
+	@ApiModelProperty(value = "收货地址")
+	private String arrivalAddress;
+	/**
+	 * 收货人签字
+	 */
+	@ApiModelProperty(value = "收货人签字")
+	private String arrivalSign;
+	/**
+	 * 收货备注
+	 */
+	@ApiModelProperty(value = "收货备注")
+	private String otherRemarks;
+	/**
+	 * 运费要求
+	 */
+	@ApiModelProperty(value = "运费要求")
+	private String freightRemarks;
+	/**
+	 * 数量合计
+	 */
+	@ApiModelProperty(value = "数量合计")
+	private BigDecimal totalQuantity;
+	/**
+	 * 重量合计
+	 */
+	@ApiModelProperty(value = "重量合计")
+	private BigDecimal totalWeight;
+	/**
+	 * 体积合计
+	 */
+	@ApiModelProperty(value = "体积合计")
+	private BigDecimal totalVolumn;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String deliveryRemarks;
+	/**
+	 * 特别提醒
+	 */
+	@ApiModelProperty(value = "特别提醒")
+	private String specialRemarks;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
 	/**
 	 * 租户id
 	 */
-		@ApiModelProperty(value = "租户id")
-		private String tenantId;
-	/**
-	* 仓库类型
-	*/
-		@ApiModelProperty(value = "仓库类型")
-		private String warehouseType;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private Long createDept;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private Date createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private Date updateTime;
-	/**
-	* 出库金额
-	*/
-		@ApiModelProperty(value = "出库金额")
-		private BigDecimal deliveryAmount;
-	/**
-	* 费用合计
-	*/
-		@ApiModelProperty(value = "费用合计")
-		private BigDecimal totalCost;
-	/**
-	* 合同号
-	*/
-		@ApiModelProperty(value = "合同号")
-		private String contractNumber;
-	/**
-	* 业务员
-	*/
-		@ApiModelProperty(value = "业务员")
-		private String saleman;
-	/**
-	* 销售公司
-	*/
-		@ApiModelProperty(value = "销售公司")
-		private Long salesCompany;
-	/**
-	* 发票重量
-	*/
-		@ApiModelProperty(value = "发票重量")
-		private BigDecimal invoiceWeight;
-	/**
-	* 状态(0 正常 1停用)
-	*/
-		@ApiModelProperty(value = "状态(0 正常 1停用)")
-		private Integer status;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+	/**
+	 * 仓库类型
+	 */
+	@ApiModelProperty(value = "仓库类型")
+	private String warehouseType;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 出库金额
+	 */
+	@ApiModelProperty(value = "出库金额")
+	private BigDecimal deliveryAmount;
+	/**
+	 * 费用合计
+	 */
+	@ApiModelProperty(value = "费用合计")
+	private BigDecimal totalCost;
+	/**
+	 * 合同号
+	 */
+	@ApiModelProperty(value = "合同号")
+	private String contractNumber;
+	/**
+	 * 业务员
+	 */
+	@ApiModelProperty(value = "业务员")
+	private String saleman;
+	/**
+	 * 销售公司
+	 */
+	@ApiModelProperty(value = "销售公司")
+	private Long salesCompany;
+	/**
+	 * 发票重量
+	 */
+	@ApiModelProperty(value = "发票重量")
+	private BigDecimal invoiceWeight;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
 	/**
 	 * 发货 收货商品明细
 	 */
-		@ApiModelProperty(value = "发货 收货明细")
-		@TableField(exist = false)
-		private List<DeliveryItems> deliveryItemsList;
+	@ApiModelProperty(value = "发货 收货明细")
+	@TableField(exist = false)
+	private List<DeliveryItems> deliveryItemsList;
 	/**
 	 * 发货 收货 费用明细
 	 */
-		@ApiModelProperty(value = "发货 收货费用明细")
-		@TableField(exist = false)
-		private List<DeliveryFees> deliveryFeesList;
+	@ApiModelProperty(value = "发货 收货费用明细")
+	@TableField(exist = false)
+	private List<DeliveryFees> deliveryFeesList;
 	/**
 	 * 发货 收货 文件
 	 */
-		@ApiModelProperty(value = "发货 收货文件明细")
-		@TableField(exist = false)
-		private List<DeliveryFiles> deliveryFilesList;
+	@ApiModelProperty(value = "发货 收货文件明细")
+	@TableField(exist = false)
+	private List<DeliveryFiles> deliveryFilesList;
 	/**
 	 * 创建人中文名
 	 */
-		@ApiModelProperty(value = "创建人中文名")
-		@TableField(exist = false)
-		private String createUserName;
+	@ApiModelProperty(value = "创建人中文名")
+	@TableField(exist = false)
+	private String createUserName;
 	/**
 	 * 修改人中文名
 	 */
-		@ApiModelProperty(value = "修改人中文名")
-		@TableField(exist = false)
-		private String updateUserName;
+	@ApiModelProperty(value = "修改人中文名")
+	@TableField(exist = false)
+	private String updateUserName;
 	/**
 	 * 客户中文名
 	 */
-		@ApiModelProperty(value = "客户中文名")
-		@TableField(exist = false)
-		private String corpsName;
+	@ApiModelProperty(value = "客户中文名")
+	@TableField(exist = false)
+	private String corpsName;
 	/**
 	 * 销售公司中文名
 	 */
-		@ApiModelProperty(value = "销售公司中文名")
-		@TableField(exist = false)
-		private String salesCompanyName;
+	@ApiModelProperty(value = "销售公司中文名")
+	@TableField(exist = false)
+	private String salesCompanyName;
 	/**
 	 * 采购金额
 	 */
-		@ApiModelProperty(value = "采购金额")
-		private BigDecimal purchaseAmount;
+	@ApiModelProperty(value = "采购金额")
+	private BigDecimal purchaseAmount;
 	/**
 	 * 采购方式
 	 */
-		@ApiModelProperty(value = "采购方式")
-		private String purchaseMode;
+	@ApiModelProperty(value = "采购方式")
+	private String purchaseMode;
 	/**
 	 * 收货人电话
 	 */
-		@ApiModelProperty(value = "收货人电话")
-		private String arrivalTel;
+	@ApiModelProperty(value = "收货人电话")
+	private String arrivalTel;
 	/**
 	 * 单据状态字典表
 	 */
-		@ApiModelProperty(value = "单据状态字典表")
-		private String deliveryStatus;
+	@ApiModelProperty(value = "单据状态字典表")
+	private String deliveryStatus;
 	/**
 	 * 详情回显客户中文名
 	 */
-		@ApiModelProperty(value = "详情回显客户中文名")
-		@TableField(exist = false)
-		private List<Map<String,Object>> corpName;
+	@ApiModelProperty(value = "详情回显客户中文名")
+	@TableField(exist = false)
+	private List<Map<String, Object>> corpName;
 	/**
 	 * 销售公司中文名
 	 */
-		@ApiModelProperty(value = "销售公司中文名")
-		@TableField(exist = false)
-		private List<Map<String, Object>> salesCompanyNameList;
+	@ApiModelProperty(value = "销售公司中文名")
+	@TableField(exist = false)
+	private List<Map<String, Object>> salesCompanyNameList;
+
+	/**
+	 * 提成标准
+	 */
+	@ApiModelProperty(value = "提成标准")
+	private String commissionRate;
+	/**
+	 * 操作提成标准
+	 */
+	@ApiModelProperty(value = "操作提成标准")
+	private String operatingCommissionRate;
 
 	@ApiModelProperty(value = "详情回显所属公司中文名")
 	@TableField(exist = false)
-	private List<Map<String,Object>> companyName;
+	private List<Map<String, Object>> companyName;
 
 	@TableField(exist = false)
 	@ApiModelProperty(value = "发货日期开始")
@@ -339,7 +347,7 @@ public class Delivery implements Serializable {
 	private String storageName;
 	@TableField(exist = false)
 	@ApiModelProperty(value = "仓库中文名")
-	private List<Map<String,Object>> storageMap;
+	private List<Map<String, Object>> storageMap;
 	/**
 	 * 提单号
 	 */
@@ -347,7 +355,7 @@ public class Delivery implements Serializable {
 	private String billNo;
 
 	/**
-	 * 提单号
+	 * 码单重量
 	 */
 	@ApiModelProperty(value = "码单重量")
 	private BigDecimal billWeight;

+ 47 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/enums/DeliveryReportEnum.java

@@ -0,0 +1,47 @@
+package org.springblade.deliver.goods.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+@Getter
+@AllArgsConstructor
+public enum DeliveryReportEnum {
+	/**
+	 * 第一季度
+	 */
+	SPRING("1"),
+	/**
+	 * 第二季度
+	 */
+	SUMMER("2"),
+	/**
+	 * 第三季度
+	 */
+	AUTUMN("3"),
+	/**
+	 * 第四季度
+	 */
+	WINTER("4"),
+
+	/**
+	 * 业务员
+	 */
+	BUSINESS("11"),
+	/**
+	 * 操作员
+	 */
+	OPERATION("12");
+
+	private final String type;
+
+	public static DeliveryReportEnum fromType(String delivery) {
+		for (DeliveryReportEnum type : DeliveryReportEnum.values()) {
+			if (Objects.equals(type.getType(), delivery)) {
+				return type;
+			}
+		}
+		throw new IllegalArgumentException("delivery report not exist");
+	}
+}

+ 21 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/feign/IDeliveryReportClient.java

@@ -0,0 +1,21 @@
+package org.springblade.deliver.goods.feign;
+
+import org.springblade.common.constant.LauncherConstant;
+import org.springblade.core.tool.api.R;
+import org.springblade.deliver.goods.vo.DeliveryReportVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@FeignClient(
+	value = LauncherConstant.APPLICATION_DELIVER_GOODS_NAME
+)
+public interface IDeliveryReportClient {
+
+	String COMMISSION = "/deliveryReport/commission";
+
+	@GetMapping(COMMISSION)
+	R<List<DeliveryReportVO>> commission(@RequestParam DeliveryReportVO report);
+}

+ 52 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/vo/DeliveryReportVO.java

@@ -0,0 +1,52 @@
+package org.springblade.deliver.goods.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.deliver.goods.entity.Delivery;
+
+import java.math.BigDecimal;
+
+/**
+ * 发货费用报表视图实体类
+ *
+ * @author BladeX
+ * @since 2021-10-21
+ */
+@Data
+@ApiModel(value = "DeliveryReportVO对象", description = "发货费用报表")
+public class DeliveryReportVO {
+
+	private Integer serialId;
+
+	private Integer year;
+
+	private String quarter;
+
+	private Long userId;
+
+	private String userName;
+
+	private String userType;
+
+	private Long goodsId;
+
+	private String goodsName;
+
+	private BigDecimal firstMonth;
+
+	private BigDecimal secondMonth;
+
+	private BigDecimal thirdMonth;
+
+	private BigDecimal totalBillWeight;
+
+	private String commissionRate;
+
+	private BigDecimal commissionAmount;
+
+	private BigDecimal receivedAmount;
+
+	private BigDecimal retainedAmount;
+
+}

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

@@ -17,7 +17,6 @@
 package org.springblade.purchase.sales.entity;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -298,6 +297,11 @@ public class Order implements Serializable {
 	@ApiModelProperty(value = "提成标准")
 	private String commissionRate;
 	/**
+	 * 操作提成标准
+	 */
+	@ApiModelProperty(value = "操作提成标准")
+	private String operatingCommissionRate;
+	/**
 	 * 销售单价
 	 */
 	@ApiModelProperty(value = "销售单价")
@@ -455,7 +459,7 @@ public class Order implements Serializable {
 	 */
 	@ApiModelProperty(value = "回显客户中文名")
 	@TableField(exist = false)
-	private List<Map<String,Object>> corpName;
+	private List<Map<String, Object>> corpName;
 	/**
 	 * 生成发货单的订单明细ids
 	 */
@@ -573,7 +577,7 @@ public class Order implements Serializable {
 	 */
 	@ApiModelProperty(value = "所属公司中文名")
 	@TableField(exist = false)
-	private List<Map<String,Object>> belongToCorpList;
+	private List<Map<String, Object>> belongToCorpList;
 
 	/**
 	 * 是否开票
@@ -634,7 +638,7 @@ public class Order implements Serializable {
 	@TableField(exist = false)
 	private BigDecimal orderQuantity;
 	/**
-	 *销售金额
+	 * 销售金额
 	 */
 	@ApiModelProperty(value = "销售金额")
 	@TableField(exist = false)
@@ -661,7 +665,7 @@ public class Order implements Serializable {
 	 */
 	@ApiModelProperty(value = "生成工厂中文名")
 	@TableField(exist = false)
-	private List<Map<String,Object>> productionPlantList;
+	private List<Map<String, Object>> productionPlantList;
 	/**
 	 * FOB系数
 	 */
@@ -723,7 +727,7 @@ public class Order implements Serializable {
 	private Integer isFreight;
 	//是否包含标签
 	private Integer isLabel;
-    //客户对应的分管员
+	//客户对应的分管员
 	private String chargeMember;
 
 
@@ -734,7 +738,7 @@ public class Order implements Serializable {
 	 */
 	@ApiModelProperty(value = "采购成本")
 	@TableField(exist = false)
-	private BigDecimal procurementCost ;
+	private BigDecimal procurementCost;
 	/**
 	 * 采购报价
 	 */
@@ -755,5 +759,4 @@ public class Order implements Serializable {
 	private BigDecimal fc;
 
 
-
 }

+ 83 - 68
blade-service-api/store-goods-api/src/main/java/com/store/goods/entity/App.java

@@ -18,17 +18,16 @@ package com.store.goods.entity;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
 import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
 /**
  * app应用表实体类
  *
@@ -43,80 +42,96 @@ public class App implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	/**
-	* app
-	*/
-		@ApiModelProperty(value = "app")
-		private Long id;
+	 * app
+	 */
+	@ApiModelProperty(value = "app")
+	private Long id;
 	/**
-	* app名称
-	*/
-		@ApiModelProperty(value = "app名称")
-		private String appName;
+	 * app名称
+	 */
+	@ApiModelProperty(value = "app名称")
+	private String appName;
 	/**
-	* logo
-	*/
-		@ApiModelProperty(value = "logo")
-		private String logo;
+	 * logo
+	 */
+	@ApiModelProperty(value = "logo")
+	private String logo;
 	/**
-	* 小图标logo
-	*/
-		@ApiModelProperty(value = "小图标logo")
-		private String miniLogo;
+	 * 小图标logo
+	 */
+	@ApiModelProperty(value = "小图标logo")
+	private String miniLogo;
 	/**
-	* 0为安卓,1为苹果
-	*/
-		@ApiModelProperty(value = "0为安卓,1为苹果")
-		private Integer type;
+	 * 0为安卓,1为苹果
+	 */
+	@ApiModelProperty(value = "0为安卓,1为苹果")
+	private Integer type;
 	/**
-	* 安卓包名
-	*/
-		@ApiModelProperty(value = "安卓包名")
-		private String packageName;
+	 * 安卓包名
+	 */
+	@ApiModelProperty(value = "安卓包名")
+	private String packageName;
 	/**
-	* 苹果url_schema
-	*/
-		@ApiModelProperty(value = "苹果url_schema")
-		private String urlSchema;
+	 * 苹果url_schema
+	 */
+	@ApiModelProperty(value = "苹果url_schema")
+	private String urlSchema;
 	/**
-	* 苹果app_store_id
-	*/
-		@ApiModelProperty(value = "苹果app_store_id")
-		private String appStoreId;
+	 * 苹果app_store_id
+	 */
+	@ApiModelProperty(value = "苹果app_store_id")
+	private String appStoreId;
 	/**
-	* 苹果bundle_id
-	*/
-		@ApiModelProperty(value = "苹果bundle_id")
-		private String bundleId;
+	 * 苹果bundle_id
+	 */
+	@ApiModelProperty(value = "苹果bundle_id")
+	private String bundleId;
 	/**
-	* app应用描述
-	*/
-		@ApiModelProperty(value = "app应用描述")
-		private String appDesc;
+	 * app应用描述
+	 */
+	@ApiModelProperty(value = "app应用描述")
+	private String appDesc;
 
-		/**
-		 * 创建时间
-		 *
-		 * @ignore
-		 */
-		@ApiModelProperty(value = "创建时间")
-		@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-		@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-		protected Date createTime;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	protected Date createTime;
 
-		/**
-		 * 创建人
-		 *
-		 * @ignore
-		 */
-		@ApiModelProperty(value = "创建人")
-		protected Long createUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	protected Long createUser;
+
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	protected Date updateTime;
+
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	protected Long updateUser;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
 
-		@TableField(exist = false)
-		@ApiModelProperty(value = "最新的app版本")
-		private AppVersion AppVersion;
+	@TableField(exist = false)
+	@ApiModelProperty(value = "最新的app版本")
+	private AppVersion appVersion;
 
-		@TableField(exist = false)
-		@ApiModelProperty(value = "app版本历史列表")
-		private List<AppVersion> AppVersionList;
+	@TableField(exist = false)
+	@ApiModelProperty(value = "app版本历史列表")
+	private List<AppVersion> appVersionList;
 
 }

+ 53 - 34
blade-service-api/store-goods-api/src/main/java/com/store/goods/entity/AppVersion.java

@@ -16,18 +16,17 @@
  */
 package com.store.goods.entity;
 
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
-import java.util.Date;
-
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.io.Serializable;
+import java.util.Date;
+
 /**
  * app版本表实体类
  *
@@ -43,41 +42,44 @@ public class AppVersion implements Serializable {
 
 	private Long id;
 	/**
-	* 属于的app的id
-	*/
-		@ApiModelProperty(value = "属于的app的id")
-		@TableField("appId")
+	 * 属于的app的id
+	 */
+	@ApiModelProperty(value = "属于的app的id")
+	@TableField("appId")
 	private Long appid;
 	/**
-	* 版本名称
-	*/
-		@ApiModelProperty(value = "版本名称")
-		private String versionName;
+	 * 版本名称
+	 */
+	@ApiModelProperty(value = "版本名称")
+	private String versionName;
+	/**
+	 * 版本号
+	 */
+	@ApiModelProperty(value = "版本号")
+	private String versionCode;
 	/**
-	* 版本号
-	*/
-		@ApiModelProperty(value = "版本号")
-		private Long versionCode;
+	 * 版本号
+	 */
+	@ApiModelProperty(value = "最新版本号")
+	private String lastVersionCode;
 	/**
-	* 版本更新描述
-	*/
-		@ApiModelProperty(value = "版本更新描述")
-		private String versionDesc;
+	 * 版本更新描述
+	 */
+	@ApiModelProperty(value = "版本更新描述")
+	private String versionDesc;
 	/**
-	* 下载地址
-	*/
-		@ApiModelProperty(value = "下载地址")
-		private String downloadUrl;
+	 * 下载地址
+	 */
+	@ApiModelProperty(value = "下载地址")
+	private String downloadUrl;
 	/**
-	* 是否发布  0待发布 1发布
-	*/
-		@ApiModelProperty(value = "是否发布  0待发布 1发布")
-		private Integer isRelease;
+	 * 是否发布  0待发布 1发布
+	 */
+	@ApiModelProperty(value = "是否发布  0待发布 1发布")
+	private Integer isRelease;
 
 	/**
 	 * 创建时间
-	 *
-	 * @ignore
 	 */
 	@ApiModelProperty(value = "创建时间")
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@@ -86,11 +88,28 @@ public class AppVersion implements Serializable {
 
 	/**
 	 * 创建人
-	 *
-	 * @ignore
 	 */
 	@ApiModelProperty(value = "创建人")
 	protected Long createUser;
 
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	protected Date updateTime;
+
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	protected Long updateUser;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
 
 }

+ 5 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderFees.java

@@ -52,6 +52,11 @@ public class OrderFees extends OrderBase {
 	@ApiModelProperty(value = "客户id")
 	private Long corpId;
 	/**
+	 * 提单号
+	 */
+	@ApiModelProperty(value = "提单号")
+	private String billNo;
+	/**
 	 * 数量
 	 */
 	@ApiModelProperty(value = "数量")

+ 10 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderItems.java

@@ -311,6 +311,16 @@ public class OrderItems extends OrderBase {
 	@ApiModelProperty(value = "箱号")
 	private String cntrNo;
 	/**
+	 * 箱型
+	 */
+	@ApiModelProperty(value = "箱型")
+	private Long cntrType;
+	/**
+	 * 箱量
+	 */
+	@ApiModelProperty(value = "箱量")
+	private BigDecimal cntrNum;
+	/**
 	 * 供应商
 	 */
 	@ApiModelProperty(value = "供应商")

+ 246 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryReportController.java

@@ -0,0 +1,246 @@
+package org.springblade.deliver.goods.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.client.feign.IGoodsDescClient;
+import org.springblade.client.vo.GoodsDescVO;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.deliver.goods.entity.Delivery;
+import org.springblade.deliver.goods.entity.DeliveryItems;
+import org.springblade.deliver.goods.enums.DeliveryReportEnum;
+import org.springblade.deliver.goods.service.IDeliveryItemsService;
+import org.springblade.deliver.goods.service.IDeliveryService;
+import org.springblade.deliver.goods.vo.DeliveryReportVO;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * 国内发货通知单 统计报表
+ *
+ * @author BladeX
+ * @since 2021-09-26
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/deliveryReport")
+@Api(value = "国内发货通知单", tags = "国内发货通知单接口")
+public class DeliveryReportController extends BladeController {
+
+	private final IDeliveryService deliveryService;
+
+	private final IDeliveryItemsService deliveryItemsService;
+
+	private final IUserClient userClient;
+
+	private final IGoodsDescClient goodsDescClient;
+
+	/**
+	 * 提成统计
+	 */
+	@GetMapping("/commission")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "提成统计", notes = "reportVO")
+	public R<List<DeliveryReportVO>> commission(DeliveryReportVO reportVO) {
+		String quarter = reportVO.getQuarter();
+		String userType = reportVO.getUserType();
+
+		int serialId = 1;
+		List<DeliveryReportVO> reportList = new ArrayList<>();
+
+		String goodsName = null;
+		R<GoodsDescVO> goods = goodsDescClient.selectGoodsMessage(reportVO.getGoodsId());
+		if (goods.isSuccess() && goods.getData() != null){
+			goodsName = goods.getData().getCode();
+		}
+
+		int year = reportVO.getYear();
+		int lastMonth;
+		if (StringUtils.equals(quarter, DeliveryReportEnum.WINTER.getType())) {
+			quarter = "第四";
+			lastMonth = 12;
+		} else if (StringUtils.equals(quarter, DeliveryReportEnum.AUTUMN.getType())) {
+			quarter = "第三";
+			lastMonth = 9;
+		} else if (StringUtils.equals(quarter, DeliveryReportEnum.SUMMER.getType())) {
+			quarter = "第二";
+			lastMonth = 6;
+		} else {
+			quarter = "第一";
+			lastMonth = 3;
+		}
+
+		// 1、查询周期内的所有ID
+		List<Long> idList = new ArrayList<>();
+		LambdaQueryWrapper<Delivery> idQueryWrapper = new LambdaQueryWrapper<>();
+		idQueryWrapper.select(Delivery::getId)
+			.eq(Delivery::getIsDeleted, 0)
+			.gt(Delivery::getBillWeight, 0)
+			.between(Delivery::getBusinessDate, getDayOfMonth(year, lastMonth - 2).get(0), getDayOfMonth(year, lastMonth).get(1));
+		deliveryService.list(idQueryWrapper).forEach(delivery -> idList.add(delivery.getId()));
+
+		// 查不到直接返回
+		if (CollectionUtil.isEmpty(idList)) {
+			return R.data(reportList);
+		}
+
+		// 根据ID查人
+		LambdaQueryWrapper<Delivery> userQueryWrapper = new LambdaQueryWrapper<>();
+		if (StringUtils.equals(userType, DeliveryReportEnum.BUSINESS.getType())) {
+			userQueryWrapper.select(Delivery::getSaleman)
+				.eq(reportVO.getUserId() != null, Delivery::getSaleman, reportVO.getUserId())
+				.isNotNull(Delivery::getSaleman)
+				.groupBy(Delivery::getSaleman);
+		} else {
+			userQueryWrapper.select(Delivery::getCreateUser)
+				.eq(reportVO.getUserId() != null, Delivery::getCreateUser, reportVO.getUserId())
+				.groupBy(Delivery::getCreateUser);
+		}
+		userQueryWrapper.in(Delivery::getId, idList);
+		List<Delivery> deliveryUserList = deliveryService.list(userQueryWrapper);
+		if (CollectionUtil.isNotEmpty(deliveryUserList)) {
+			for (Delivery deliveryUser : deliveryUserList) {
+				Long userId;
+				// 再按人查提成比例
+				LambdaQueryWrapper<Delivery> commissionQueryWrapper = new LambdaQueryWrapper<>();
+				commissionQueryWrapper.in(Delivery::getId, idList);
+
+				if (StringUtils.equals(userType, DeliveryReportEnum.BUSINESS.getType())) {
+					userId = Long.valueOf(deliveryUser.getSaleman());
+					idQueryWrapper.eq(Delivery::getSaleman, userId);
+					commissionQueryWrapper.select(Delivery::getCommissionRate)
+						.eq(Delivery::getSaleman, userId)
+						.isNotNull(Delivery::getCommissionRate)
+						.groupBy(Delivery::getCommissionRate);
+				} else {
+					userId = deliveryUser.getCreateUser();
+					idQueryWrapper.eq(Delivery::getCreateUser, userId);
+					commissionQueryWrapper.select(Delivery::getOperatingCommissionRate)
+						.eq(Delivery::getCreateUser, userId)
+						.isNotNull(Delivery::getOperatingCommissionRate)
+						.groupBy(Delivery::getOperatingCommissionRate);
+				}
+
+				// 获取创建人中文名
+				String userName = null;
+				R<User> user = userClient.userInfoById(userId);
+				if (user.isSuccess() || user.getData() != null){
+					userName = user.getData().getName();
+				}
+
+				List<Delivery> deliveryCommissionList = deliveryService.list(commissionQueryWrapper);
+				if (CollectionUtil.isNotEmpty(deliveryCommissionList)) {
+					for (Delivery deliveryCommission : deliveryCommissionList) {
+						String commission;
+						// 根据人、提成比例、周期查所有id
+						List<Long> idLastList = new ArrayList<>();
+						if (StringUtils.equals(userType, DeliveryReportEnum.BUSINESS.getType())) {
+							commission = deliveryCommission.getCommissionRate();
+							idQueryWrapper.eq(Delivery::getCommissionRate, commission);
+						} else {
+							commission = deliveryCommission.getOperatingCommissionRate();
+							idQueryWrapper.eq(Delivery::getOperatingCommissionRate, commission);
+						}
+						deliveryService.list(idQueryWrapper).forEach(delivery -> idLastList.add(delivery.getId()));
+
+						// 组装返回
+						DeliveryReportVO reportTemp = new DeliveryReportVO();
+						reportTemp.setYear(year);
+						reportTemp.setQuarter(quarter);
+						reportTemp.setSerialId(serialId);
+						reportTemp.setGoodsName(goodsName);
+						reportTemp.setUserName(userName);
+						reportTemp.setCommissionRate(commission);
+						// 最后根据人和比例查每月总重
+						reportTemp.setFirstMonth(getBillWeightQueryWrapper(idLastList, reportVO.getGoodsId(), getDayOfMonth(year, lastMonth - 2).get(0), getDayOfMonth(year, lastMonth - 2).get(1)));
+						reportTemp.setSecondMonth(getBillWeightQueryWrapper(idLastList, reportVO.getGoodsId(), getDayOfMonth(year, lastMonth - 1).get(0), getDayOfMonth(year, lastMonth - 1).get(1)));
+						reportTemp.setThirdMonth(getBillWeightQueryWrapper(idLastList, reportVO.getGoodsId(), getDayOfMonth(year, lastMonth).get(0), getDayOfMonth(year, lastMonth).get(1)));
+
+						BigDecimal totalBillWeight = getBillWeightQueryWrapper(idLastList, reportVO.getGoodsId(), getDayOfMonth(year, lastMonth - 2).get(0), getDayOfMonth(year, lastMonth).get(1));
+						reportTemp.setTotalBillWeight(totalBillWeight);
+
+						BigDecimal commissionAmount = totalBillWeight.multiply(new BigDecimal(commission)).setScale(2, RoundingMode.HALF_UP);
+						reportTemp.setCommissionAmount(commissionAmount);
+
+						BigDecimal receivedAmount = commissionAmount.multiply(new BigDecimal("0.6")).setScale(2, RoundingMode.HALF_UP);
+						reportTemp.setReceivedAmount(receivedAmount);
+						reportTemp.setRetainedAmount(commissionAmount.subtract(receivedAmount));
+						reportList.add(reportTemp);
+						serialId += 1;
+					}
+				}
+			}
+		}
+
+		return R.data(reportList);
+	}
+
+	private BigDecimal getBillWeightQueryWrapper(List<Long> idList, Long goodsId, String beginTime, String endTime) {
+		if (CollectionUtil.isEmpty(idList)) {
+			return BigDecimal.ZERO;
+		}
+
+		BigDecimal billWeight = BigDecimal.ZERO;
+		List<Long> tempList = new ArrayList<>();
+		// 大周期内查小周期
+		LambdaQueryWrapper<Delivery> idQueryWrapper = new LambdaQueryWrapper<>();
+		idQueryWrapper.select(Delivery::getId)
+			.in(Delivery::getId, idList)
+			.between(Delivery::getBusinessDate, beginTime, endTime);
+		List<Delivery> deliveryList = deliveryService.list(idQueryWrapper);
+		for (Delivery delivery : deliveryList) {
+			tempList.add(delivery.getId());
+		}
+
+		// 查从表商品重量
+		if (CollectionUtil.isNotEmpty(tempList)) {
+			LambdaQueryWrapper<DeliveryItems> goodsQueryWrapper = new LambdaQueryWrapper<>();
+			goodsQueryWrapper.select(DeliveryItems::getBillWeight)
+				.eq(DeliveryItems::getItemId, goodsId)
+				.in(DeliveryItems::getPid, tempList);
+			List<DeliveryItems> deliveryItemsList = deliveryItemsService.list(goodsQueryWrapper);
+			if (CollectionUtil.isNotEmpty(deliveryItemsList)) {
+				for (DeliveryItems items : deliveryItemsList) {
+					billWeight = billWeight.add(items.getBillWeight());
+				}
+			}
+		}
+		return billWeight;
+	}
+
+	private List<String> getDayOfMonth(int year, int month) {
+		List<String> list = new ArrayList<>();
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		Calendar calendar = Calendar.getInstance();
+		// 设置年
+		calendar.set(Calendar.YEAR, year);
+		// 设置月份
+		calendar.set(Calendar.MONTH, month - 1);
+		// 设置日历中月份的最小天数
+		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DATE));
+		// 格式化日期
+		list.add(sdf.format(calendar.getTime()) + " 00:00:00");
+		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE));
+		list.add(sdf.format(calendar.getTime()) + " 23:59:59");
+		return list;
+	}
+
+
+
+
+}

+ 7 - 12
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -19,36 +19,33 @@ package org.springblade.deliver.goods.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import lombok.Data;
-import org.apache.poi.ss.formula.functions.T;
 import org.springblade.client.entity.BasicCorpsProfitChange;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.StorageDesc;
-import org.springblade.client.feign.*;
+import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.client.feign.ICorpsProfitChangeClient;
+import org.springblade.client.feign.ISerialClient;
+import org.springblade.client.feign.IStorageClient;
 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.deliver.goods.entity.*;
 import org.springblade.deliver.goods.enums.DeliveryEnum;
 import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
 import org.springblade.deliver.goods.mapper.*;
-import org.springblade.deliver.goods.service.IDeliveryItemsService;
+import org.springblade.deliver.goods.service.IDeliveryService;
 import org.springblade.deliver.goods.tool.JdyTool;
 import org.springblade.deliver.goods.vo.DeliveryVO;
-import org.springblade.deliver.goods.service.IDeliveryService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springblade.deliver.goods.vojo.JDYassist;
 import org.springblade.deliver.goods.vojo.JDYentries;
 import org.springblade.deliver.goods.vojo.JDYitems;
-
-
 import org.springblade.mocha.entity.BusinessOverpaymentItem;
 import org.springblade.mocha.entity.Overpayment;
 import org.springblade.mocha.feign.IBusinessOverpaymentClient;
@@ -57,11 +54,9 @@ import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springblade.purchase.sales.feign.IOrderItemsClient;
 import org.springblade.stock.entity.StockGoods;
 import org.springblade.stock.feign.IStockGoodsClient;
-import org.springblade.stock.vo.StockGoodsVO;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.net.ssl.*;

+ 12 - 16
blade-service/store-goods/src/main/java/com/store/goods/controller/AppController.java

@@ -17,29 +17,26 @@
 package com.store.goods.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.store.goods.entity.App;
 import com.store.goods.entity.AppVersion;
+import com.store.goods.service.IAppService;
 import com.store.goods.service.IAppVersionService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.Valid;
-
+import org.springblade.core.boot.ctrl.BladeController;
 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.Func;
 import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.store.goods.entity.App;
-import com.store.goods.vo.AppVO;
-import com.store.goods.service.IAppService;
-import org.springblade.core.boot.ctrl.BladeController;
 
+import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -81,7 +78,7 @@ public class AppController extends BladeController {
 	public R<IPage<App>> list(App app, Query query) {
 		try {
 			Page<App> page = new Page<>(query.getCurrent(), query.getSize());
-			IPage<App> pageList = appService.page(page, new LambdaQueryWrapper<App>().orderByDesc(App::getCreateTime));
+			IPage<App> pageList = appService.page(page, new LambdaQueryWrapper<App>().eq(App::getTenantId, AuthUtil.getTenantId()).orderByDesc(App::getCreateTime));
 			pageList.getRecords().forEach(it -> {
 				//获取最新的版本信息
 				it.setAppVersion(appService.getLatestVersionById(it.getId(), null));
@@ -98,8 +95,7 @@ public class AppController extends BladeController {
 	 * @return
 	 */
 	@RequestMapping(value = "/versionHistory", method = RequestMethod.GET)
-	public R versionHistory(App app, Query query)
-	{
+	public R versionHistory(App app, Query query) {
 		Page<AppVersion> page = new Page<>(query.getCurrent(), query.getSize());
 		IPage<AppVersion> pageList = appVersionService.page(page, new LambdaQueryWrapper<AppVersion>().eq(AppVersion::getAppid, app.getId()).orderByDesc(AppVersion::getVersionCode));
 		return R.data(pageList);
@@ -112,8 +108,8 @@ public class AppController extends BladeController {
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "新增app应用", notes = "传入app")
-	public R save(@Valid @RequestBody App app) {
-		return R.status(appService.save(app));
+	public R<App> save(@Valid @RequestBody App app) {
+		return R.data(appService.saveApp(app));
 	}
 
 	/**
@@ -133,7 +129,7 @@ public class AppController extends BladeController {
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(appService.removeByIds(Func.toLongList(ids)));
+		return R.status(appService.removeByAppIds(Func.toLongList(ids)));
 	}
 
 

+ 25 - 27
blade-service/store-goods/src/main/java/com/store/goods/controller/AppVersionController.java

@@ -16,25 +16,22 @@
  */
 package com.store.goods.controller;
 
-import com.alibaba.fastjson.JSONObject;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.store.goods.entity.App;
+import com.store.goods.entity.AppVersion;
 import com.store.goods.service.IAppService;
+import com.store.goods.service.IAppVersionService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-import javax.validation.Valid;
-
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
+import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.store.goods.entity.AppVersion;
-import com.store.goods.vo.AppVersionVO;
-import com.store.goods.service.IAppVersionService;
-import org.springblade.core.boot.ctrl.BladeController;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * app版本表 控制器
@@ -53,21 +50,21 @@ public class AppVersionController extends BladeController {
 	private final IAppService appService;
 
 
-
-    /**
+	/**
 	 * 通过包名-获取应用最新版本
-	 * */
+	 */
 	@GetMapping("/getLatestVersion")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "通过包名-获取应用最新版本", notes = " ")
-	public R<AppVersion> getLatestVersion(@ApiParam(value = "当前app包名,必填", required = true)@RequestParam String packageName,
-										  @RequestParam(required = false, name = "type", defaultValue = "0") Integer type)
-	{
-		AppVersion appVersion = appService.getLatestVersion(packageName, new Integer[]{1}, type);
-		if (appVersion == null) {
+	public R<App> getLatestVersion(@ApiParam(value = "当前app包名,必填", required = true) @RequestParam String packageName,
+								   @RequestParam(required = false, name = "type", defaultValue = "0") Integer type) {
+		List<Integer> list = new ArrayList<>();
+		list.add(1);
+		App app = appService.getLatestVersion(packageName, list, type);
+		if (app == null) {
 			return R.fail("该应用还未上传");
 		}
-		return R.data(appVersion);
+		return R.data(app);
 	}
 
 	/**
@@ -79,16 +76,15 @@ public class AppVersionController extends BladeController {
 	@PutMapping("/versionRelease")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "发布/取消app应用版本", notes = "传入AppVersion")
-	public R release(@RequestBody  AppVersion appVersion) {
+	public R release(@RequestBody AppVersion appVersion) {
 		Long appVersionId = appVersion.getId();
 		AppVersion version = appVersionService.getById(appVersionId);
-		version.setIsRelease(version.getIsRelease()==0 ? 1 : 0);
+		version.setIsRelease(version.getIsRelease() == 0 ? 1 : 0);
 		appVersionService.updateById(version);
 		return R.success("操作成功");
 	}
 
 
-
 	/**
 	 * 详情
 	 *//*
@@ -142,7 +138,9 @@ public class AppVersionController extends BladeController {
 		return R.status(appVersionService.updateById(appVersion));
 	}
 
-	*//**
+	*/
+
+	/**
 	 * 新增或修改 app版本表
 	 *//*
 	@PostMapping("/submit")
@@ -153,15 +151,15 @@ public class AppVersionController extends BladeController {
 	}
 
 
-	*//**
+	/**
 	 * 删除 app版本表
-	 *//*
+	 */
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(appVersionService.removeByIds(Func.toLongList(ids)));
-	}*/
+	}
 
 
 }

+ 18 - 6
blade-service/store-goods/src/main/java/com/store/goods/service/IAppService.java

@@ -16,11 +16,13 @@
  */
 package com.store.goods.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.store.goods.entity.App;
 import com.store.goods.entity.AppVersion;
 import com.store.goods.vo.AppVO;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.List;
 
 /**
  * app应用表 服务类
@@ -41,12 +43,22 @@ public interface IAppService extends IService<App> {
 
 	/**
 	 * 获取最新app版本信息
-	 * */
-	AppVersion getLatestVersionById(Long id, Integer[] release);
+	 */
+	AppVersion getLatestVersionById(Long id, List<Integer> release);
 
 	/**
 	 * 通过包名获取最新版本信息
-	 * */
-	AppVersion getLatestVersion(String packageName,Integer[] isRelease,Integer type);
+	 */
+	App getLatestVersion(String packageName, List<Integer> isRelease, Integer type);
+
+	/**
+	 * 保存、保存明细
+	 */
+	App saveApp(App app);
+
+	/**
+	 * 删除、删除明细
+	 */
+	boolean removeByAppIds(List<Long> idList);
 
 }

+ 66 - 13
blade-service/store-goods/src/main/java/com/store/goods/service/impl/AppServiceImpl.java

@@ -24,9 +24,15 @@ import com.store.goods.vo.AppVO;
 import com.store.goods.mapper.AppMapper;
 import com.store.goods.service.IAppService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * app应用表 服务实现类
@@ -35,8 +41,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2021-12-13
  */
 @Service
-public class AppServiceImpl extends ServiceImpl<AppMapper, App> implements IAppService
-{
+public class AppServiceImpl extends ServiceImpl<AppMapper, App> implements IAppService {
 	@Autowired
 	private AppVersionMapper appVersionMapper;
 
@@ -46,8 +51,7 @@ public class AppServiceImpl extends ServiceImpl<AppMapper, App> implements IAppS
 	}
 
 	@Override
-	public AppVersion getLatestVersionById(Long id, Integer[] release)
-	{
+	public AppVersion getLatestVersionById(Long id, List<Integer> release) {
 		//查询此app应用下最新的版本信息
 		try {
 			LambdaQueryWrapper<AppVersion> wrapper = new LambdaQueryWrapper<AppVersion>()
@@ -62,18 +66,67 @@ public class AppServiceImpl extends ServiceImpl<AppMapper, App> implements IAppS
 	}
 
 	@Override
-	public AppVersion getLatestVersion(String packageName, Integer[] isRelease, Integer type)
-	{
-		try
-		{
-			App app = baseMapper.selectOne(new LambdaQueryWrapper<App>().eq(type != null, App::getType, type).eq(App::getPackageName,packageName));
-			return getLatestVersionById(app.getId(), isRelease);
-		}
-		catch (Exception e)
-		{
+	public App getLatestVersion(String packageName, List<Integer> isRelease, Integer type) {
+		App app = baseMapper.selectOne(new LambdaQueryWrapper<App>().eq(type != null, App::getType, type).eq(App::getPackageName, packageName));
+		try {
+			AppVersion appVersion = getLatestVersionById(app.getId(), isRelease);
+			app.setAppVersion(appVersion);
+			return app;
+		} catch (Exception e) {
 			e.printStackTrace();
 			throw new SecurityException("应用不存在");
 		}
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public App saveApp(App app) {
+		if (app.getId() != null) {
+			app.setUpdateTime(new Date());
+			app.setUpdateUser(AuthUtil.getUserId());
+			baseMapper.updateById(app);
+		} else {
+			app.setCreateTime(new Date());
+			app.setCreateUser(AuthUtil.getUserId());
+			app.setTenantId(AuthUtil.getTenantId());
+			baseMapper.insert(app);
+		}
+
+		app.getAppVersionList().forEach(appVersion -> {
+			if (appVersion.getIsRelease() == 0) {
+				int count = appVersionMapper.selectCount(new LambdaQueryWrapper<AppVersion>()
+					.eq(AppVersion::getAppid, app.getId())
+					.ne(appVersion.getId() != null, AppVersion::getId, appVersion.getId()));
+				if (count > 0) {
+					throw new SecurityException("存在已发布的版本");
+				}
+			}
+
+			if (appVersion.getId() != null) {
+				appVersion.setUpdateTime(new Date());
+				appVersion.setUpdateUser(AuthUtil.getUserId());
+				appVersionMapper.updateById(appVersion);
+			} else {
+				appVersion.setAppid(app.getId());
+				appVersion.setCreateTime(new Date());
+				appVersion.setCreateUser(AuthUtil.getUserId());
+				appVersion.setTenantId(AuthUtil.getTenantId());
+				appVersionMapper.insert(appVersion);
+			}
+		});
+
+		App temp = baseMapper.selectById(app.getId());
+		temp.setAppVersionList(appVersionMapper.selectList(new LambdaQueryWrapper<AppVersion>().eq(AppVersion::getAppid, app.getId()).orderByDesc(AppVersion::getVersionCode)));
+		return temp;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean removeByAppIds(List<Long> idList) {
+		idList.forEach(id -> {
+			appVersionMapper.delete(new LambdaQueryWrapper<AppVersion>().eq(AppVersion::getAppid, id));
+		});
+		return baseMapper.deleteBatchIds(idList) >= 1;
+	}
+
 }

+ 10 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/controller/PurchaseOrderController.java

@@ -234,6 +234,16 @@ public class PurchaseOrderController extends BladeController {
 					}
 				}
 
+				//修改制单人名字
+				if(e.getUpdateUser()!=null)
+				{
+					R<User> userR = userClient.userInfoById(e.getUpdateUser());
+					if(userR.isSuccess())
+					{
+						e.setUpdateUserName(userR.getData().getRealName());
+					}
+				}
+
 				//获取供应商中文名
 				if (e.getCorpId() != null){
 					R<CorpsDesc> corpMessage1 = corpsDescClient.getCorpMessage(e.getCorpId());