Browse Source

20230504 18:01

wangzhuo 2 years ago
parent
commit
e2a5e22c55
29 changed files with 937 additions and 40 deletions
  1. 8 1
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjBrandDesc.java
  2. 1 1
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjCorpsDesc.java
  3. 11 2
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjGoodsFiles.java
  4. 1 1
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrder.java
  5. 32 4
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjShip.java
  6. 18 2
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjShipItems.java
  7. 99 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/enums/OrderTypeEnum.java
  8. 1 1
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/CorpsDescImportExcel.java
  9. 72 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/GoodsDescExportExcel.java
  10. 11 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
  11. 5 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
  12. 60 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/controller/BrandDescController.java
  13. 2 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/service/impl/BrandDescServiceImpl.java
  14. 20 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsDescController.java
  15. 46 15
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/service/impl/CorpsDescServiceImpl.java
  16. 52 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/controller/GoodsDescController.java
  17. 17 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/service/impl/GoodsDescServiceImpl.java
  18. 49 6
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java
  19. 16 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderService.java
  20. 98 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  21. 60 4
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipController.java
  22. 3 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipItemsController.java
  23. 26 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/IShipService.java
  24. 163 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java
  25. 8 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/storage/service/IStorageDescService.java
  26. 16 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/storage/service/impl/StorageDescServiceImpl.java
  27. 12 0
      blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
  28. 10 0
      blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java
  29. 20 0
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java

+ 8 - 1
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjBrandDesc.java

@@ -58,7 +58,7 @@ public class PjBrandDesc implements Serializable {
 	/**
 	 * 创建人名称
 	 */
-	@ApiModelProperty(value = "创建人名称")
+	@TableField(exist = false)
 	private String createUserName;
 
 	/**
@@ -76,6 +76,13 @@ public class PjBrandDesc implements Serializable {
 	*/
 		@ApiModelProperty(value = "修改人")
 		private Long updateUser;
+
+	/**
+	 * 创建人名称
+	 */
+	@TableField(exist = false)
+	private String updateUserName;
+
 	/**
 	* 修改时间
 	*/

+ 1 - 1
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjCorpsDesc.java

@@ -139,7 +139,7 @@ public class PjCorpsDesc implements Serializable {
 	 * 业务员id
 	 */
 	@ApiModelProperty(value = "业务员id")
-	private String salesmanId;
+	private Long salesmanId;
 	/**
 	 * 业务员名称
 	 */

+ 11 - 2
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjGoodsFiles.java

@@ -19,6 +19,8 @@ package org.springblade.salesPart.entity;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
@@ -42,6 +44,13 @@ public class PjGoodsFiles implements Serializable {
 	*/
 		@ApiModelProperty(value = "主键")
 		private Long id;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
 	/**
 	* 主表id
 	*/
@@ -86,7 +95,7 @@ public class PjGoodsFiles implements Serializable {
 	* 创建时间
 	*/
 		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
+		private Date createTime;
 	/**
 	* 修改人
 	*/
@@ -96,7 +105,7 @@ public class PjGoodsFiles implements Serializable {
 	* 修改时间
 	*/
 		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
+		private Date updateTime;
 	/**
 	* 状态(0 正常 1停用)
 	*/

+ 1 - 1
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrder.java

@@ -215,7 +215,7 @@ public class PjOrder implements Serializable {
 	 * 行数
 	 */
 		@ApiModelProperty(value = "行数")
-		private String numberRows;
+		private Integer numberRows;
 	/**
 	 * 已发数量
 	 */

+ 32 - 4
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjShip.java

@@ -17,9 +17,14 @@
 package org.springblade.salesPart.entity;
 
 import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
@@ -44,6 +49,11 @@ public class PjShip implements Serializable {
 		@ApiModelProperty(value = "主键")
 		private Long id;
 	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+	/**
 	* 单据编号(任务不显示,工单显示)
 	*/
 		@ApiModelProperty(value = "单据编号(任务不显示,工单显示)")
@@ -52,12 +62,19 @@ public class PjShip implements Serializable {
 	* 订单编号(销售订单号)
 	*/
 		@ApiModelProperty(value = "订单编号(销售订单号)")
-		private Long ordNo;
+		private String ordNo;
+
+	/**
+	 * 销售订单号Id
+	 */
+	@ApiModelProperty(value = "销售订单号Id")
+	private Long ordId;
+
 	/**
 	* 源单编号(微信订单号)
 	*/
 		@ApiModelProperty(value = "源单编号(微信订单号)")
-		private Long srcOrdNo;
+		private String srcOrdNo;
 	/**
 	* 状态
 	*/
@@ -97,7 +114,7 @@ public class PjShip implements Serializable {
 	* 创建时间
 	*/
 		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
+		private Date createTime;
 	/**
 	* 修改人
 	*/
@@ -107,7 +124,7 @@ public class PjShip implements Serializable {
 	* 修改时间
 	*/
 		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
+		private Date updateTime;
 	/**
 	* 是否已删除(0 否 1是)
 	*/
@@ -166,4 +183,15 @@ public class PjShip implements Serializable {
 	@ApiModelProperty(value = "所属公司名称")
 	private String salesCompanyName;
 
+	/**
+	 * 业务日期(开始-结束)
+	 */
+	@TableField(exist = false)
+	private List<String> createTimeList;
+
+	/**
+	 * 收发货明细list
+	 */
+	@TableField(exist = false)
+	private List<PjShipItems> shipItemsList;
 }

+ 18 - 2
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjShipItems.java

@@ -20,6 +20,8 @@ import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
@@ -53,6 +55,13 @@ public class PjShipItems implements Serializable {
 	*/
 		@ApiModelProperty(value = "销售明细id")
 		private Long srcItemId;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
 	/**
 	* 创建人
 	*/
@@ -67,7 +76,7 @@ public class PjShipItems implements Serializable {
 	* 创建时间
 	*/
 		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
+		private Date createTime;
 	/**
 	* 修改人
 	*/
@@ -77,7 +86,7 @@ public class PjShipItems implements Serializable {
 	* 修改时间
 	*/
 		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
+		private Date updateTime;
 	/**
 	* 是否已删除(0 否 1是)
 	*/
@@ -108,6 +117,13 @@ public class PjShipItems implements Serializable {
 	*/
 		@ApiModelProperty(value = "商品id")
 		private Long goodsId;
+
+	/**
+	 * 批次号
+	 */
+	@ApiModelProperty(value = "批次号")
+	private String dot;
+
 	/**
 	* 品牌
 	*/

+ 99 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/enums/OrderTypeEnum.java

@@ -0,0 +1,99 @@
+package org.springblade.salesPart.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * @author caifc
+ * @date 2021-10-20 14:38
+ */
+@Getter
+@AllArgsConstructor
+public enum OrderTypeEnum {
+
+	/**
+	 * 采购类型
+	 */
+	PURCHASE("CG"),
+
+	/**
+	 * 销售类型
+	 */
+	SALES("XS"),
+
+	/**
+	 * 销售录入状态
+	 */
+	XSLR("录入"),
+
+	/**
+	 * 销售待发货状态
+	 */
+	XSDFH("待发货"),
+
+	/**
+	 * 发货任务
+	 */
+	FHRW("FHRW"),
+
+	/**
+	 * 发货工单
+	 */
+	FHGD("FHGD"),
+
+	/**
+	 * 收货任务
+	 */
+	SHRW("SHRW"),
+
+	/**
+	 * 收货工单
+	 */
+	SHGD("SHGD"),
+
+	/**
+	 * 出库任务状态待处理
+	 */
+	PENDING("待处理"),
+
+	/**
+	 * 出库任务状态已派工
+	 */
+	DISPATCHED("已派工"),
+
+	/**
+	 * 出库工单状态待出库
+	 */
+	TOBESHIPPEDOUT("待出库"),
+
+	/**
+	 * 提交审批
+	 */
+	SUBMIT("提交审批"),
+
+	/**
+	 * 审批中
+	 */
+	APPROVE("审批中"),
+
+	/**
+	 * 审批通过
+	 */
+	PASS("审批通过"),
+
+	;
+
+	private final String type;
+
+	public static OrderTypeEnum fromType(Integer orderType) {
+		for (OrderTypeEnum type : OrderTypeEnum.values()) {
+			if (Objects.equals(type.getType(), orderType)) {
+				return type;
+			}
+		}
+		throw new IllegalArgumentException("order type not exist");
+	}
+
+}

+ 1 - 1
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/CorpsDescImportExcel.java

@@ -37,7 +37,7 @@ public class CorpsDescImportExcel implements Serializable {
 	 * 发货仓库
 	 */
 	@ExcelProperty(value = "发货仓库")
-	private String delivery;
+	private String deliveryWarehouseName;
 	/**
 	 * 商城价格
 	 */

+ 72 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/GoodsDescExportExcel.java

@@ -0,0 +1,72 @@
+package org.springblade.salesPart.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 lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 商品导出实体类
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class GoodsDescExportExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 商品名称
+	 */
+	@ExcelProperty(value = "商品名称")
+	private String cname;
+
+	/**
+	 * 商品分类名称
+	 */
+	@ExcelProperty(value = "商品分类")
+	private String goodsTypeName;
+
+	/**
+	 * 规格型号
+	 */
+	@ExcelProperty(value = "规格型号")
+	private String specificationAndModel;
+
+	/**
+	 * 品牌
+	 */
+	@ExcelProperty(value = "品牌")
+	private String brandName;
+
+	/**
+	 * 采购价
+	 */
+	@ExcelProperty(value = "采购价")
+	private BigDecimal purchasePrice;
+
+	/**
+	 * 销售价
+	 */
+	@ExcelProperty(value = "销售价")
+	private BigDecimal salesPrice;
+
+	/**
+	 * 库存预警
+	 */
+	@ExcelProperty(value = "库存预警")
+	private Integer inventoryAlert;
+
+	/**
+	 * 商品描述
+	 */
+	@ExcelProperty(value = "商品描述")
+	private String goodsDescription;
+
+
+}

+ 11 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java

@@ -42,6 +42,7 @@ public interface ISysClient {
 	String DEPT_IDS = API_PREFIX + "/dept-ids";
 	String DEPT_IDS_FUZZY = API_PREFIX + "/dept-ids-fuzzy";
 	String DEPT_NAME = API_PREFIX + "/dept-name";
+	String DEPT_BY_NAME = API_PREFIX + "/getDeptIByName";
 	String DEPT_NAMES = API_PREFIX + "/dept-names";
 	String DEPT_CHILD = API_PREFIX + "/dept-child";
 	String POST = API_PREFIX + "/post";
@@ -318,4 +319,14 @@ public interface ISysClient {
 	 */
 	@GetMapping(GET_PARAM_SERVICE)
 	String getParamService(@RequestParam("paramKey") String paramKey);
+
+	/**
+	 * 配件获取所属公司
+	 *
+	 * @param tenantId  租户id
+	 * @param deptName 所属公司
+	 * @return
+	 */
+	@GetMapping(DEPT_BY_NAME)
+	R<Dept> getDeptIByName(@RequestParam("tenantId") String tenantId, @RequestParam("deptName") String deptName);
 }

+ 5 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java

@@ -170,4 +170,9 @@ public class ISysClientFallback implements ISysClient {
 		return "获取数据失败";
 	}
 
+	@Override
+	public R<Dept> getDeptIByName(String tenantId, String deptName) {
+		return R.fail("获取数据失败");
+	}
+
 }

+ 60 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/controller/BrandDescController.java

@@ -17,6 +17,7 @@
 package org.springblade.salesPart.brand.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.swagger.annotations.Api;
@@ -31,6 +32,10 @@ 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.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.salesPart.entity.PjOrder;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.salesPart.entity.PjBrandDesc;
@@ -38,6 +43,8 @@ import org.springblade.salesPart.vo.BrandDescVO;
 import org.springblade.salesPart.brand.service.IBrandDescService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  *  配件批发品牌表控制器
  *
@@ -51,6 +58,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 public class BrandDescController extends BladeController {
 
 	private final IBrandDescService brandDescService;
+	private IUserClient iUserClient;//获取用户信息
 
 	/**
 	 * 详情
@@ -72,10 +80,45 @@ public class BrandDescController extends BladeController {
 	@ApiOperation(value = "分页", notes = "传入brandDesc")
 	public R<IPage<PjBrandDesc>> list(PjBrandDesc brandDesc, Query query) {
 		LambdaQueryWrapper<PjBrandDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(PjBrandDesc::getTenantId, brandDesc.getTenantId())
+		lambdaQueryWrapper.eq(PjBrandDesc::getTenantId, AuthUtil.getTenantId())
 			.eq(PjBrandDesc::getIsDeleted, 0)
 			.like(ObjectUtils.isNotEmpty(brandDesc.getCname()), PjBrandDesc::getCname, brandDesc.getCname());
 		IPage<PjBrandDesc> pages = brandDescService.page(Condition.getPage(query), lambdaQueryWrapper);
+
+		String updateUserIds = "";//修改人id拼接
+		String createUserIds = "";//创建人id拼接
+		for (PjBrandDesc items : pages.getRecords()){
+			if (ObjectUtil.isNotEmpty(items.getUpdateUser())){
+				updateUserIds = updateUserIds + items.getUpdateUser() + ",";
+			}
+			if (ObjectUtil.isNotEmpty(items.getCreateUser())){
+				createUserIds = createUserIds + items.getCreateUser() + ",";
+			}
+		}
+
+		//获得修改人信息
+		List<User> updateUserList = iUserClient.selectUserIds(updateUserIds);
+		//获得创建人信息
+		List<User> createUserList = iUserClient.selectUserIds(createUserIds);
+
+		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
+			pages.getRecords().forEach(item -> {
+				if (ObjectUtil.isNotEmpty(updateUserList)) {
+					User user = updateUserList.stream().anyMatch(e -> e.getId().equals(item.getUpdateUser())) ? updateUserList.stream().filter(e -> e.getId().equals(item.getUpdateUser())).findFirst().get() : null;
+					if (ObjectUtils.isNotNull(user)) {
+						item.setUpdateUserName(user.getName());
+					}
+				}
+
+				if (ObjectUtil.isNotEmpty(createUserList)) {
+					User user = createUserList.stream().anyMatch(e -> e.getId().equals(item.getCreateUser())) ? createUserList.stream().filter(e -> e.getId().equals(item.getCreateUser())).findFirst().get() : null;
+					if (ObjectUtils.isNotNull(user)) {
+						item.setCreateUserName(user.getName());
+					}
+				}
+			});
+		}
+
 		return R.data(pages);
 	}
 
@@ -153,4 +196,20 @@ public class BrandDescController extends BladeController {
 		boolean status = brandDescService.updateById(brandDesc);
 		return R.status(status);
 	}
+
+	/**
+	 * 品牌下拉
+	 */
+	@GetMapping("/listAll")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "品牌下拉", notes = "传入brandDesc")
+	public R<List<PjBrandDesc>> listAll(PjBrandDesc brandDesc) {
+		LambdaQueryWrapper<PjBrandDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjBrandDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjBrandDesc::getIsDeleted, 0)
+			.like(ObjectUtils.isNotEmpty(brandDesc.getCname()), PjBrandDesc::getCname, brandDesc.getCname());
+		List<PjBrandDesc> list = brandDescService.list(lambdaQueryWrapper);
+
+		return R.data(list);
+	}
 }

+ 2 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/brand/service/impl/BrandDescServiceImpl.java

@@ -57,7 +57,8 @@ public class BrandDescServiceImpl extends ServiceImpl<BrandDescMapper, PjBrandDe
 		PjBrandDesc detail = baseMapper.selectById(brandDesc.getId());
 
 		if (ObjectUtil.isNotEmpty(detail.getCreateUser())){
-			detail.setCreateUserName(userClient.userInfoById(detail.getCreateUser()).getData().getRealName());
+			String userR = userClient.userInfoById(detail.getCreateUser()).getData().getRealName();
+			detail.setCreateUserName(userR);
 		}
 		//获取附件
 		detail.setBrandFilesList(brandFilesService.list(new QueryWrapper<PjBrandFiles>().eq("pid", detail.getId()).eq("is_deleted", 0)));

+ 20 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsDescController.java

@@ -19,12 +19,14 @@ package org.springblade.salesPart.corps.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpsDesc;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -38,6 +40,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.salesPart.corps.service.ICorpsDescService;
 import org.springblade.salesPart.corps.service.ICorpsTypeDescService;
 import org.springblade.salesPart.corps.service.ICorpsTypeService;
+import org.springblade.salesPart.entity.PjBrandDesc;
 import org.springblade.salesPart.entity.PjCorpsDesc;
 import org.springblade.salesPart.entity.PjCorpsType;
 import org.springblade.salesPart.entity.PjCorpsTypeDesc;
@@ -287,4 +290,21 @@ public class CorpsDescController extends BladeController {
 		boolean status = corpsDescService.updateById(corpsDesc);
 		return R.status(status);
 	}
+
+	/**
+	 * 下拉
+	 */
+	@GetMapping("/listAll")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "下拉", notes = "传入corpsDesc")
+	public R<List<PjCorpsDesc>> listAll(PjCorpsDesc corpsDesc) {
+		LambdaQueryWrapper<PjCorpsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjCorpsDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjCorpsDesc::getIsDeleted, 0)
+			.eq(PjCorpsDesc::getCorpType, corpsDesc.getCorpType());
+		List<PjCorpsDesc> list = corpsDescService.list(lambdaQueryWrapper);
+
+		return R.data(list);
+	}
+
 }

+ 46 - 15
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/service/impl/CorpsDescServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.salesPart.corps.service.impl;
 
+import com.alibaba.csp.sentinel.util.StringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -27,6 +28,7 @@ import lombok.AllArgsConstructor;
 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.ObjectUtil;
 import org.springblade.salesPart.corps.mapper.CorpsDescMapper;
 import org.springblade.salesPart.corps.mapper.CorpsTypeDescMapper;
 import org.springblade.salesPart.corps.mapper.CorpsTypeMapper;
@@ -34,7 +36,10 @@ import org.springblade.salesPart.corps.service.ICorpsDescService;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.excel.CorpsDescImportExcel;
 import org.springblade.salesPart.excel.SupplierImportExcel;
+import org.springblade.salesPart.storage.service.IStorageDescService;
 import org.springblade.salesPart.vo.CorpsDescVO;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
@@ -63,9 +68,11 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 	private final CorpsFilesServiceImpl corpsFilesService;//客户附件
 	private final CorpsTypeDescServiceImpl corpsTypeDescService;//客户类别对应表
 	private final CorpsTypeServiceImpl corpsTypeService;//客户类别
+	private final IStorageDescService storageDescService;//仓库
 
 	private final CorpsTypeMapper corpsTypeMapper;
 	private final IUserClient userClient;
+	private final ISysClient iSysClient;
 
 	/**
 	 * 获取客户详情
@@ -193,7 +200,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 	@Override
 	@Transactional
 	public R importUser(List<CorpsDescImportExcel> data) {
-		/*try {
+		try {
 			if (CollectionUtils.isEmpty(data)) {
 				throw new SecurityException("导入数据不能为空");
 			}
@@ -208,24 +215,43 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 					corpsDesc.setCname(e.getCname());
 					corpsDesc.setTel(e.getTel());
 					corpsDesc.setTenantId(AuthUtil.getTenantId());
-					corpsDesc.setDeliveryWarehouseName(e.getDeliveryWarehouseName());
 					corpsDesc.setPriceSystem(e.getPriceSystem());
 					corpsDesc.setAccountPeriod(e.getAccountPeriod());
-					List<User> user = userClient.userInfoByName(corpsDesc.getSalesmanName(), AuthUtil.getTenantId());
-					if (ObjectUtils.isNotNull(user)) {
-						corpsDesc.setSalesmanName(user.get(0).getRealName());
+					//获得业务员
+					if (StringUtils.isNotBlank(e.getSalesmanName())){
+						List<User> user = userClient.userInfoByName(e.getSalesmanName(), AuthUtil.getTenantId());
+						if (ObjectUtils.isNotNull(user)) {
+							corpsDesc.setSalesmanId(user.get(0).getId());
+							corpsDesc.setSalesmanName(user.get(0).getRealName());
+						}else {
+							throw new SecurityException("请输入正确的业务员");
+						}
 					}
+
 					corpsDesc.setCreditLimit(e.getCreditLimit());
 					corpsDesc.setUseCreditLimit(e.getUseCreditLimit());
 
-					*//*if (StringUtil.isNotBlank(e.getCompanyName())) {
-						org.springblade.client.entity.CorpsDesc company = baseMapper.selectCorpsDescCname(e.getCompanyName(), AuthUtil.getTenantId());
-						if (ObjectUtil.isNotEmpty(company)) {
-							corpsDesc.setBelongtocompany(String.valueOf(company.getId()));
+					//获得所属公司
+					if (StringUtil.isNotBlank(e.getSalesCompanyName())) {
+						R<Dept> dept = iSysClient.getDeptIByName(AuthUtil.getTenantId(), e.getSalesCompanyName());
+						if (ObjectUtil.isNotEmpty(dept)) {
+							corpsDesc.setSalesCompanyId(dept.getData().getId());
+							corpsDesc.setSalesCompanyName(dept.getData().getDeptName());
 						} else {
 							throw new SecurityException("请输入正确的所属公司");
 						}
-					}*//*
+					}
+
+					//获得仓库
+					if (StringUtils.isNotBlank(e.getDeliveryWarehouseName())){
+						PjStorageDesc storageDesc = storageDescService.getMessageByName(e.getDeliveryWarehouseName());
+						if (ObjectUtil.isNotEmpty(storageDesc)){
+							corpsDesc.setDeliveryWarehouseId(storageDesc.getId());
+							corpsDesc.setDeliveryWarehouseName(storageDesc.getCname());
+						}else {
+							throw new SecurityException("请输入正确的仓库");
+						}
+					}
 
 					corpsDesc.setCorpsTypeId(String.valueOf(corpsType.getId()));
 					corpsDesc.setCorpType("KH");
@@ -268,8 +294,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 
 		} catch (Exception exception) {
 			throw new SecurityException("请检查导入数据" + exception.getMessage());
-		}*/
-		return null;
+		}
 	}
 
 	/**
@@ -295,9 +320,15 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 				corpsDesc.setTel(e.getTel());
 				corpsDesc.setTenantId(AuthUtil.getTenantId());
 
-				List<User> user = userClient.userInfoByName(corpsDesc.getSalesmanName(), AuthUtil.getTenantId());
-				if (ObjectUtils.isNotNull(user)) {
-					corpsDesc.setSalesmanName(user.get(0).getRealName());
+				//获得业务员
+				if (StringUtils.isNotBlank(e.getSalesmanName())){
+					List<User> user = userClient.userInfoByName(e.getSalesmanName(), AuthUtil.getTenantId());
+					if (ObjectUtils.isNotNull(user)) {
+						corpsDesc.setSalesmanId(user.get(0).getId());
+						corpsDesc.setSalesmanName(user.get(0).getRealName());
+					}else {
+						throw new SecurityException("请输入正确的业务员");
+					}
 				}
 
 				corpsDesc.setCorpType("GYS");

+ 52 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/controller/GoodsDescController.java

@@ -35,8 +35,12 @@ 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.salesPart.entity.PjBrandDesc;
 import org.springblade.salesPart.entity.PjGoodsType;
+import org.springblade.salesPart.excel.CorpsDescExportExcel;
+import org.springblade.salesPart.excel.GoodsDescExportExcel;
 import org.springblade.salesPart.excel.GoodsExcel;
 import org.springblade.salesPart.goods.service.IGoodsTypeService;
 import org.springframework.web.bind.annotation.*;
@@ -213,4 +217,52 @@ public class GoodsDescController extends BladeController {
 		List<GoodsExcel> list = new ArrayList<>();
 		ExcelUtil.export(response, "导出模板-商品信息", "导入数据表", list, GoodsExcel.class);
 	}
+
+	/**
+	 * 导出商品
+	 */
+	@GetMapping("/exportGoodsList")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "导出商品", notes = "传入goods")
+	public void exportGoodsList(PjGoodsDesc goods, HttpServletResponse response) {
+		LambdaQueryWrapper<PjGoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjGoodsDesc::getIsDeleted, 0)
+			.like(StringUtils.isNotBlank(goods.getSpecificationAndModel()), PjGoodsDesc::getSpecificationAndModel, goods.getSpecificationAndModel())//规格型号
+			.like(StringUtils.isNotBlank(goods.getBrandItem()), PjGoodsDesc::getBrandItem, goods.getBrandItem())//花纹
+			.like(StringUtils.isNotBlank(goods.getCname()), PjGoodsDesc::getCname, goods.getCname())//商品名称
+			.eq(ObjectUtils.isNotEmpty(goods.getBrandId()), PjGoodsDesc::getBrandId, goods.getBrandId())//品牌
+			.like(ObjectUtils.isNotEmpty(goods.getBrandName()), PjGoodsDesc::getBrandName, goods.getBrandName())
+			.eq(ObjectUtils.isNotEmpty(goods.getSalesCompanyId()), PjGoodsDesc::getSalesCompanyId, goods.getSalesCompanyId())//所属公司
+			.eq(ObjectUtils.isNotEmpty(goods.getWhether()), PjGoodsDesc::getWhether, goods.getWhether())//是否管理到批次号
+			.eq(ObjectUtils.isNotEmpty(goods.getExplosionProof()), PjGoodsDesc::getExplosionProof, goods.getExplosionProof());//是否防爆
+		List<PjGoodsDesc> list = goodsService.list(lambdaQueryWrapper);
+		list.forEach(e -> {
+			String typeId = e.getGoodsTypeId();
+			String[] split = typeId.split(",");
+			List<String> stringList = Arrays.asList(split);
+			LambdaQueryWrapper<PjGoodsType> goodsTypeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			goodsTypeLambdaQueryWrapper.in(PjGoodsType::getId, stringList);
+			List<PjGoodsType> types = goodsDescType.list(goodsTypeLambdaQueryWrapper);
+			if (CollectionUtils.isNotEmpty(types)) {
+				List<String> typeStr = types.stream().map(PjGoodsType::getCname).collect(Collectors.toList());
+				e.setGoodsTypeName(typeStr.toString().replace("[", "").replace("]", ""));
+			}
+		});
+		ExcelUtil.export(response, "商品信息", "商品信息", BeanUtil.copy(list, GoodsDescExportExcel.class), GoodsDescExportExcel.class);
+	}
+
+	/**
+	 * 启用禁用
+	 */
+	@GetMapping("/updateEnableOrNot")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "启用禁用", notes = "传入goodsDesc")
+	public R updateEnableOrNot(PjGoodsDesc goodsDesc){
+		if (goodsDesc.getId() == null){
+			return R.fail(500, "请选择数据");
+		}
+		boolean status = goodsDescService.updateById(goodsDesc);
+		return R.status(status);
+	}
 }

+ 17 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/service/impl/GoodsDescServiceImpl.java

@@ -110,6 +110,23 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, PjGoodsDe
 			baseMapper.updateById(goodsDesc);
 		}
 		this.saveType(goodsDesc.getId(), goodsDesc.getGoodsTypeId());
+
+		if (CollectionUtils.isNotEmpty(goodsDesc.getGoodsFilesList())) {
+			goodsDesc.getGoodsFilesList().stream().forEach(files -> {
+				files.setPid(goodsDesc.getId());
+				files.setTenantId(AuthUtil.getTenantId());
+				if (files.getId() == null) {
+					files.setCreateTime(new Date());
+					files.setCreateUser(AuthUtil.getUserId());
+					goodsFilesService.save(files);
+				} else {
+					files.setUpdateTime(new Date());
+					files.setUpdateUser(AuthUtil.getUserId());
+					goodsFilesService.updateById(files);
+				}
+			});
+		}
+
 		return goodsDesc;
 	}
 

+ 49 - 6
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java

@@ -19,6 +19,7 @@ package org.springblade.salesPart.order.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -34,6 +35,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.entity.PjOrderItems;
+import org.springblade.salesPart.entity.PjShip;
 import org.springblade.salesPart.order.service.IOrderItemsService;
 import org.springblade.salesPart.vo.OrderVO;
 import org.springblade.system.user.entity.User;
@@ -116,16 +118,16 @@ public class OrderController extends BladeController {
 		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
 			pages.getRecords().forEach(item -> {
 				if (ObjectUtil.isNotEmpty(updateUserList)) {
-					User user = updateUserList.stream().anyMatch(e -> e.getId().equals(order.getUpdateUser())) ? updateUserList.stream().filter(e -> e.getId().equals(order.getUpdateUser())).findFirst().get() : null;
+					User user = updateUserList.stream().anyMatch(e -> e.getId().equals(item.getUpdateUser())) ? updateUserList.stream().filter(e -> e.getId().equals(item.getUpdateUser())).findFirst().get() : null;
 					if (ObjectUtils.isNotNull(user)) {
-						order.setUpdateUserName(user.getName());
+						item.setUpdateUserName(user.getName());
 					}
 				}
 
 				if (ObjectUtil.isNotEmpty(createUserList)) {
-					User user = createUserList.stream().anyMatch(e -> e.getId().equals(order.getCreateUser())) ? createUserList.stream().filter(e -> e.getId().equals(order.getCreateUser())).findFirst().get() : null;
+					User user = createUserList.stream().anyMatch(e -> e.getId().equals(item.getCreateUser())) ? createUserList.stream().filter(e -> e.getId().equals(item.getCreateUser())).findFirst().get() : null;
 					if (ObjectUtils.isNotNull(user)) {
-						order.setUpdateUserName(user.getName());
+						item.setCreateUserName(user.getName());
 					}
 				}
 			});
@@ -183,7 +185,9 @@ public class OrderController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入order")
 	public R submit(@Valid @RequestBody PjOrder order) {
-		order.setBsType("XS");
+		if (StringUtils.isBlank(order.getBsType())){
+			throw new RuntimeException("缺少必要参数");
+		}
 		return orderService.saveOrderMessage(order);
 	}
 
@@ -192,11 +196,50 @@ public class OrderController extends BladeController {
 	 * 删除 配件销售采购表
 	 */
 	@PostMapping("/remove")
-	@ApiOperationSupport(order = 8)
+	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(orderService.removeByIds(Func.toLongList(ids)));
 	}
 
+	/**
+	 * 小程序支付根据仓库分单
+	 */
+	@GetMapping("appletReinsurancePolicy")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "小程序分单", notes = "传入order")
+	public R appletReinsurancePolicy(PjOrder order){
+
+		//根据购物车商品仓库生成销售单
+
+
+		return null;
+	}
+
+	/**
+	 * 生成出库任务
+	 */
+	@GetMapping("/generateShipTask")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "生成出库任务", notes = "传入order")
+	public R generateShipTask(PjOrder order){
+		if (order.getId() == null){
+			throw new RuntimeException("来源信息错误");
+		}
+		return orderService.generateShipTask(order);
+	}
+
+	/**
+	 * 生成入库任务
+	 */
+	@GetMapping("/inboundTask")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "生成入库任务", notes = "传入order")
+	public R inboundTask(PjOrder order){
+		if (order.getId() == null){
+			throw new RuntimeException("来源信息错误");
+		}
+		return orderService.inboundTask(order);
+	}
 
 }

+ 16 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderService.java

@@ -55,4 +55,20 @@ public interface IOrderService extends IService<PjOrder> {
 	 */
 	R saveOrderMessage(PjOrder order);
 
+	/**
+	 * 生成出库任务
+	 *
+	 * @param order
+	 * @return
+	 */
+	R generateShipTask(PjOrder order);
+
+	/**
+	 * 生成入库任务
+	 *
+	 * @param order
+	 * @return
+	 */
+	R inboundTask(PjOrder order);
+
 }

+ 98 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -16,19 +16,26 @@
  */
 package org.springblade.salesPart.order.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import lombok.AllArgsConstructor;
 import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.salesPart.entity.PjOrder;
+import org.springblade.salesPart.entity.PjOrderItems;
+import org.springblade.salesPart.entity.PjShip;
+import org.springblade.salesPart.enums.OrderTypeEnum;
 import org.springblade.salesPart.order.mapper.OrderItemsMapper;
 import org.springblade.salesPart.order.mapper.OrderMapper;
 import org.springblade.salesPart.order.service.IOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.salesPart.ship.mapper.ShipMapper;
 import org.springblade.salesPart.vo.OrderVO;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.Date;
@@ -49,6 +56,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	private ISerialClient serialClient;
 
 	private final OrderItemsMapper orderItemsMapper;
+	private final ShipMapper shipMapper;
 
 	/**
 	 * 获取销售订单详情
@@ -59,6 +67,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	@Override
 	public PjOrder getMessageById(PjOrder order) {
 		PjOrder detail = baseMapper.selectById(order.getId());
+
+		LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
+			.eq(PjOrderItems::getIsDeleted, 0)
+			.eq(PjOrderItems::getPid, detail.getId());
+
+		detail.setOrderItemsList(orderItemsMapper.selectList(itemsLambdaQueryWrapper));
 		return detail;
 	}
 
@@ -81,6 +96,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	 * @return
 	 */
 	@Override
+	@Transactional
 	public R saveOrderMessage(PjOrder order) {
 		if (order.getId() == null){
 			// 获取系统编号
@@ -94,6 +110,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 			order.setCreateUser(AuthUtil.getUserId());
 			order.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 			order.setTenantId(AuthUtil.getTenantId());
+			order.setStatus(OrderTypeEnum.XSLR.getType());
 			baseMapper.insert(order);
 		}else {
 			order.setUpdateUser(AuthUtil.getUserId());
@@ -121,8 +138,89 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				}
 			});
 			order.setOrderItemsList(order.getOrderItemsList());
+			order.setNumberRows(order.getOrderItemsList().size());
 		}
 		return R.data(order);
 	}
 
+	/**
+	 * 生成出库任务
+	 *
+	 * @param order
+	 * @return
+	 */
+	@Override
+	@Transactional
+	public R generateShipTask(PjOrder order) {
+		PjOrder pjOrder = baseMapper.selectById(order.getId());
+
+		PjShip pjShip = new PjShip();
+		// 获取系统编号
+		R billNo = serialClient.getBillNo(OrderTypeEnum.FHRW.getType(), OrderTypeEnum.FHRW.getType(), OrderTypeEnum.FHRW.getType());
+		if (billNo.getCode() != 200) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成系统编号失败");
+		}
+		BeanUtil.copyProperties(pjOrder,pjShip);
+		pjShip.setId(null);
+		pjShip.setBillno((String) billNo.getData());
+		pjShip.setOrdNo(pjOrder.getOrdNo());
+		pjShip.setOrdId(pjOrder.getId());
+		pjShip.setSrcOrdNo(pjOrder.getSrcOrdNo());
+		pjShip.setStatusName(OrderTypeEnum.PENDING.getType());
+		pjShip.setBsType(pjOrder.getBusinessSource());
+		pjShip.setTenantId(AuthUtil.getTenantId());
+		pjShip.setBizTypeName(OrderTypeEnum.FHRW.getType());
+		pjShip.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+		pjShip.setCreateUser(AuthUtil.getUserId());
+		pjShip.setCreateTime(new Date());
+		shipMapper.insert(pjShip);
+
+		//修改销售状态为代发货
+		pjOrder.setStatus(OrderTypeEnum.XSDFH.getType());
+		baseMapper.updateById(pjOrder);
+
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 生成出库任务
+	 *
+	 * @param order
+	 * @return
+	 */
+	@Override
+	@Transactional
+	public R inboundTask(PjOrder order) {
+		PjOrder pjOrder = baseMapper.selectById(order.getId());
+
+		PjShip pjShip = new PjShip();
+		// 获取系统编号
+		R billNo = serialClient.getBillNo(OrderTypeEnum.SHRW.getType(), OrderTypeEnum.SHRW.getType(), OrderTypeEnum.SHRW.getType());
+		if (billNo.getCode() != 200) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成系统编号失败");
+		}
+		BeanUtil.copyProperties(pjOrder,pjShip);
+		pjShip.setId(null);
+		pjShip.setBillno((String) billNo.getData());
+		pjShip.setOrdNo(pjOrder.getOrdNo());
+		pjShip.setOrdId(pjOrder.getId());
+		pjShip.setSrcOrdNo(pjOrder.getSrcOrdNo());
+		pjShip.setStatusName(OrderTypeEnum.PENDING.getType());
+		pjShip.setBsType(pjOrder.getBusinessSource());
+		pjShip.setTenantId(AuthUtil.getTenantId());
+		pjShip.setBizTypeName(OrderTypeEnum.SHRW.getType());
+		pjShip.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+		pjShip.setCreateUser(AuthUtil.getUserId());
+		pjShip.setCreateTime(new Date());
+		shipMapper.insert(pjShip);
+
+		//修改采购状态
+		pjOrder.setStatus(OrderTypeEnum.XSDFH.getType());
+		baseMapper.updateById(pjOrder);
+
+		return R.success("操作成功");
+	}
+
 }

+ 60 - 4
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.salesPart.ship.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -25,8 +26,15 @@ import javax.validation.Valid;
 
 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.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.salesPart.entity.PjOrder;
+import org.springblade.salesPart.entity.PjOrderItems;
+import org.springblade.salesPart.entity.PjShipItems;
+import org.springblade.salesPart.enums.OrderTypeEnum;
+import org.springblade.salesPart.ship.service.IShipItemsService;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.salesPart.entity.PjShip;
@@ -47,6 +55,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 public class ShipController extends BladeController {
 
 	private final IShipService shipService;
+	private final IShipItemsService shipItemsService;
 
 	/**
 	 * 详情
@@ -55,7 +64,8 @@ public class ShipController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入ship")
 	public R<PjShip> detail(PjShip ship) {
-		PjShip detail = shipService.getOne(Condition.getQueryWrapper(ship));
+		ship.setTenantId(AuthUtil.getTenantId());
+		PjShip detail = shipService.getMessageById(ship);
 		return R.data(detail);
 	}
 
@@ -66,7 +76,25 @@ public class ShipController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入ship")
 	public R<IPage<PjShip>> list(PjShip ship, Query query) {
-		IPage<PjShip> pages = shipService.page(Condition.getPage(query), Condition.getQueryWrapper(ship));
+		if (ObjectUtil.isEmpty(ship.getBizTypeName())){
+			throw new RuntimeException("缺少必要参数");
+		}
+		LambdaQueryWrapper<PjShip> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjShip::getTenantId, AuthUtil.getTenantId())
+			.eq(PjShip::getIsDeleted, 0)
+			.eq(PjShip::getBizTypeName, ship.getBizTypeName())//单据类型
+			.like(ObjectUtil.isNotEmpty(ship.getOrdNo()), PjShip::getOrdNo, ship.getOrdNo())//销售订单
+			.eq(ObjectUtil.isNotEmpty(ship.getStorageId()), PjShip::getStorageId, ship.getStorageId())//仓库
+			.like(ObjectUtil.isNotEmpty(ship.getStorageName()), PjShip::getStorageName, ship.getStorageName())
+			.eq(ObjectUtil.isNotEmpty(ship.getCustomerId()), PjShip::getCustomerId, ship.getCustomerId())//客户
+			.like(ObjectUtil.isNotEmpty(ship.getCustomerName()), PjShip::getCustomerName, ship.getCustomerName());
+
+		if (ship.getCreateTimeList() != null && ship.getCreateTimeList().size() > 1) {//业务日期
+			lambdaQueryWrapper.ge(PjShip::getCreateTime, ship.getCreateTimeList().get(0));
+			lambdaQueryWrapper.le(PjShip::getCreateTime, ship.getCreateTimeList().get(1));
+		}
+
+		IPage<PjShip> pages = shipService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -98,7 +126,20 @@ public class ShipController extends BladeController {
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "修改", notes = "传入ship")
 	public R update(@Valid @RequestBody PjShip ship) {
-		return R.status(shipService.updateById(ship));
+		if (ObjectUtil.isEmpty(ship.getBizTypeName()) || ObjectUtil.isEmpty(ship.getId())){
+			throw new RuntimeException("缺少必要参数");
+		}
+
+		//发货任务删除判断
+		if (ship.getBizTypeName().equals(OrderTypeEnum.FHRW.getType())){
+			if (OrderTypeEnum.DISPATCHED.getType().equals(ship.getStatusName())){
+				throw new RuntimeException("出库任务已生成工单无法删除");
+			}
+		}
+
+		ship.setIsDeleted(1);
+		shipService.updateById(ship);
+		return R.success("操作成功");
 	}
 
 	/**
@@ -108,7 +149,10 @@ public class ShipController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入ship")
 	public R submit(@Valid @RequestBody PjShip ship) {
-		return R.status(shipService.saveOrUpdate(ship));
+		if (ObjectUtil.isEmpty(ship.getBizTypeName())){
+			throw new RuntimeException("缺少必要参数");
+		}
+		return shipService.saveShipMessage(ship);
 	}
 
 
@@ -122,5 +166,17 @@ public class ShipController extends BladeController {
 		return R.status(shipService.removeByIds(Func.toLongList(ids)));
 	}
 
+	/**
+	 * 生成出库工单
+	 */
+	@PostMapping("/outboundWorkOrder")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R outboundWorkOrder(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		if (ObjectUtil.isEmpty(ids)){
+			throw new RuntimeException("缺少必要参数");
+		}
+		return shipService.outboundWorkOrder(ids);
+	}
 
 }

+ 3 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipItemsController.java

@@ -98,7 +98,9 @@ public class ShipItemsController extends BladeController {
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "修改", notes = "传入shipItems")
 	public R update(@Valid @RequestBody PjShipItems shipItems) {
-		return R.status(shipItemsService.updateById(shipItems));
+		shipItems.setIsDeleted(1);
+		shipItemsService.updateById(shipItems);
+		return R.success("操作成功");
 	}
 
 	/**

+ 26 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/IShipService.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.salesPart.ship.service;
 
+import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.entity.PjShip;
 import org.springblade.salesPart.vo.ShipVO;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -30,6 +32,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 public interface IShipService extends IService<PjShip> {
 
 	/**
+	 * 获取收发货订单详情
+	 *
+	 * @param ship
+	 * @return
+	 */
+	PjShip getMessageById(PjShip ship);
+
+	/**
 	 * 自定义分页
 	 *
 	 * @param page
@@ -38,4 +48,20 @@ public interface IShipService extends IService<PjShip> {
 	 */
 	IPage<ShipVO> selectShipPage(IPage<ShipVO> page, ShipVO ship);
 
+	/**
+	 * 保存订单信息
+	 *
+	 * @param ship
+	 * @return
+	 */
+	R saveShipMessage(PjShip ship);
+
+	/**
+	 * 生成出库工单
+	 *
+	 * @param ids
+	 * @return
+	 */
+	R outboundWorkOrder(String ids);
+
 }

+ 163 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -16,13 +16,33 @@
  */
 package org.springblade.salesPart.ship.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import lombok.AllArgsConstructor;
+import org.springblade.client.feign.ISerialClient;
+import org.springblade.core.secure.utils.AuthUtil;
+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.salesPart.entity.PjOrderItems;
 import org.springblade.salesPart.entity.PjShip;
+import org.springblade.salesPart.entity.PjShipItems;
+import org.springblade.salesPart.enums.OrderTypeEnum;
+import org.springblade.salesPart.order.mapper.OrderItemsMapper;
+import org.springblade.salesPart.ship.mapper.ShipItemsMapper;
 import org.springblade.salesPart.vo.ShipVO;
 import org.springblade.salesPart.ship.mapper.ShipMapper;
 import org.springblade.salesPart.ship.service.IShipService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * 配件收发货表 服务实现类
@@ -31,11 +51,154 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2023-04-21
  */
 @Service
+@AllArgsConstructor
 public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements IShipService {
 
+	/**
+	 * 生成系统编号
+	 */
+	private ISerialClient serialClient;
+	private OrderItemsMapper orderItemsMapper;
+	private ShipItemsMapper shipItemsMapper;
+
+	/**
+	 * 获取收发货订单详情
+	 *
+	 * @param ship
+	 * @return
+	 */
+	@Override
+	public PjShip getMessageById(PjShip ship) {
+		PjShip detail = baseMapper.selectById(ship.getId());
+
+		LambdaQueryWrapper<PjShipItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		itemsLambdaQueryWrapper.eq(PjShipItems::getTenantId, AuthUtil.getTenantId())
+			.eq(PjShipItems::getIsDeleted, 0)
+			.eq(PjShipItems::getPid, detail.getId());
+		return detail;
+	}
+
 	@Override
 	public IPage<ShipVO> selectShipPage(IPage<ShipVO> page, ShipVO ship) {
 		return page.setRecords(baseMapper.selectShipPage(page, ship));
 	}
 
+	/**
+	 * 保存订单信息
+	 *
+	 * @param ship
+	 * @return
+	 */
+	@Override
+	@Transactional
+	public R saveShipMessage(PjShip ship) {
+		if (ship.getId() == null){
+			// 获取系统编号
+			R billNo = serialClient.getBillNo(ship.getBizTypeName(), ship.getBizTypeName(), ship.getBizTypeName());
+			if (billNo.getCode() != 200) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				return R.fail(500, "生成系统编号失败");
+			}
+			ship.setBillno((String) billNo.getData());
+			ship.setCreateTime(new Date());
+			ship.setCreateUser(AuthUtil.getUserId());
+			ship.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+			ship.setTenantId(AuthUtil.getTenantId());
+			baseMapper.insert(ship);
+		}else {
+			ship.setUpdateUser(AuthUtil.getUserId());
+			ship.setUpdateTime(new Date());
+			baseMapper.updateById(ship);
+		}
+
+		// 保存订单明细
+		if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
+			ship.getShipItemsList().forEach(item -> {
+				if (item.getId() == null){
+					item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+					item.setPid(ship.getId());
+					item.setTenantId(AuthUtil.getTenantId());
+					shipItemsMapper.insert(item);
+				}else {
+					item.setUpdateTime(new Date());
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setPid(ship.getId());
+					shipItemsMapper.updateById(item);
+				}
+			});
+			ship.setShipItemsList(ship.getShipItemsList());
+			ship.setNumberRows(ship.getShipItemsList().size());
+		}
+		return R.data(ship);
+	}
+
+	/**
+	 * 生成出库工单
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@Override
+	public R outboundWorkOrder(String ids) {
+		List<Long> shipIds = Func.toLongList(ids);
+		for (Long id : shipIds) {
+			//获得出库任务数据
+			PjShip rwShip = baseMapper.selectById(id);
+			if (ObjectUtil.isEmpty(rwShip)) {
+				throw new RuntimeException("数据异常 请联系管理员");
+			}
+
+			//新建出库工单
+			PjShip gdShip = new PjShip();
+			// 获取系统编号
+			R billNo = serialClient.getBillNo(OrderTypeEnum.FHGD.getType(), OrderTypeEnum.FHGD.getType(), OrderTypeEnum.FHGD.getType());
+			if (billNo.getCode() != 200) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				continue;
+			}
+			BeanUtil.copyProperties(rwShip, gdShip);
+
+			gdShip.setId(null);
+			gdShip.setBillno((String) billNo.getData());
+			gdShip.setStatusName(OrderTypeEnum.TOBESHIPPEDOUT.getType());
+			gdShip.setTenantId(AuthUtil.getTenantId());
+			gdShip.setBizTypeName(OrderTypeEnum.FHGD.getType());
+			gdShip.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+			gdShip.setCreateUser(AuthUtil.getUserId());
+			gdShip.setCreateTime(new Date());
+			baseMapper.insert(gdShip);
+
+			//根据销售id获得销售明细数据
+			List<PjOrderItems> list = orderItemsMapper.selectList(new QueryWrapper<PjOrderItems>()
+				.eq("pid", rwShip.getOrdId())
+				.eq("is_deleted", 0)
+				.eq("tenant_id", AuthUtil.getTenantId()));
+			if (ObjectUtil.isNotEmpty(list)){
+				list.forEach(e -> {
+					//根据销售明细创建入库工单明细
+					PjShipItems shipItems = new PjShipItems();
+					BeanUtil.copyProperties(e, shipItems);
+
+					shipItems.setId(null);
+					shipItems.setPid(gdShip.getId());
+					shipItems.setSrcItemId(e.getId());
+					shipItems.setCreateTime(new Date());
+					shipItems.setCreateUser(AuthUtil.getUserId());
+					shipItems.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+					shipItems.setSendNum(e.getGoodsNum());
+					shipItemsMapper.insert(shipItems);
+				});
+				gdShip.setNumberRows(list.size());
+			}
+
+			//修改出库任务状态
+			rwShip.setStatusName(OrderTypeEnum.DISPATCHED.getType());
+			baseMapper.updateById(rwShip);
+		}
+
+		return R.success("操作成功");
+	}
+
 }

+ 8 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/storage/service/IStorageDescService.java

@@ -54,4 +54,12 @@ public interface IStorageDescService extends IService<PjStorageDesc> {
 	 */
 	PjStorageDesc saveMessage(PjStorageDesc storageDesc);
 
+	/**
+	 * 根据仓库名称获取仓库详情
+	 *
+	 * @param storageName
+	 * @return
+	 */
+	PjStorageDesc getMessageByName(String storageName);
+
 }

+ 16 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/storage/service/impl/StorageDescServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.salesPart.storage.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.salesPart.entity.PjStorageDesc;
 import org.springblade.salesPart.vo.StorageDescVO;
@@ -76,4 +77,19 @@ public class StorageDescServiceImpl extends ServiceImpl<StorageDescMapper, PjSto
 		return storageDesc;
 	}
 
+	/**
+	 * 根据仓库名称获取仓库详情
+	 *
+	 * @param storageName
+	 * @return
+	 */
+	@Override
+	public PjStorageDesc getMessageByName(String storageName) {
+		LambdaQueryWrapper<PjStorageDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjStorageDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjStorageDesc::getIsDeleted, 0)
+			.eq(PjStorageDesc::getCname, storageName);
+		return baseMapper.selectOne(lambdaQueryWrapper);
+	}
+
 }

+ 12 - 0
blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java

@@ -214,6 +214,18 @@ public class SysClient implements ISysClient {
 		return paramServiceService.getValue(paramKey);
 	}
 
+	/**
+	 * 配件获取所属公司
+	 *
+	 * @param tenantId  租户id
+	 * @param deptName 所属公司
+	 * @return
+	 */
+	@Override
+	public R<Dept> getDeptIByName(String tenantId, String deptName) {
+		return deptService.getDeptIByName(tenantId, deptName);
+	}
+
 	@Override
 	@GetMapping(TENANT_ID)
 	public R<Tenant> getTenant(String tenantId) {

+ 10 - 0
blade-service/blade-system/src/main/java/org/springblade/system/service/IDeptService.java

@@ -17,6 +17,7 @@
 package org.springblade.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.tool.api.R;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.vo.DeptVO;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -134,4 +135,13 @@ public interface IDeptService extends IService<Dept> {
 	 */
 	List<DeptVO> search(String deptName, Long parentId);
 
+	/**
+	 * 配件获取所属公司
+	 *
+	 * @param tenantId  租户id
+	 * @param deptName 所属公司
+	 * @return
+	 */
+	R<Dept> getDeptIByName(String tenantId, String deptName);
+
 }

+ 20 - 0
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java

@@ -21,9 +21,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.system.cache.SysCache;
 import org.springblade.system.entity.Dept;
@@ -190,4 +192,22 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
 		return DeptWrapper.build().listNodeVO(deptList);
 	}
 
+	/**
+	 * 配件获取所属公司
+	 *
+	 * @param tenantId  租户id
+	 * @param deptName 所属公司
+	 * @return
+	 */
+	@Override
+	public R<Dept> getDeptIByName(String tenantId, String deptName) {
+		Dept dept = baseMapper.selectOne(new LambdaQueryWrapper<Dept>()
+			.eq(Dept::getDeptName, deptName)
+			.eq(Dept::getParentId, 0)
+			.eq(Dept::getTenantId, AuthUtil.getTenantId())
+			.eq(Dept::getIsDeleted, 0)
+		);
+		return R.data(dept);
+	}
+
 }