Browse Source

导入价格管理、导入库存账信息

lazhaoqian 4 years ago
parent
commit
d50f37ece0
25 changed files with 713 additions and 16 deletions
  1. 10 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsDescClient.java
  2. 9 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IGoodsDescClient.java
  3. 7 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java
  4. 47 5
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/PriceItem.java
  5. 59 0
      blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/entity/StockGoods.java
  6. 5 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java
  7. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/corps/mapper/CorpsDescMapper.xml
  8. 9 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsDescService.java
  9. 5 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java
  10. 7 0
      blade-service/blade-client/src/main/java/org/springblade/client/goods/feign/GoodsDescClient.java
  11. 2 2
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  12. 20 0
      blade-service/blade-mocha-item/pom.xml
  13. 34 3
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/PriceItemController.java
  14. 24 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/excel/PriceImport.java
  15. 44 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/excel/PriceItemExcel.java
  16. 5 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/PriceItemMapper.xml
  17. 26 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/IPriceItemService.java
  18. 111 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/PriceItemServiceImpl.java
  19. 20 0
      blade-service/blade-stock/pom.xml
  20. 35 4
      blade-service/blade-stock/src/main/java/org/springblade/stock/controller/StockGoodsController.java
  21. 49 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/excel/StockGoodsExcel.java
  22. 24 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/excel/StockGoodsImport.java
  23. 8 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/mapper/StockGoodsMapper.xml
  24. 25 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/service/IStockGoodsService.java
  25. 127 1
      blade-service/blade-stock/src/main/java/org/springblade/stock/service/impl/StockGoodsServiceImpl.java

+ 10 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsDescClient.java

@@ -24,6 +24,7 @@ public interface ICorpsDescClient {
 	String CORP_DETAILS = API_PREFIX + "/corpDetails";
 	String getMessage = API_PREFIX + "/getMessage";
 	String GET_CORPS_MESSAGE = API_PREFIX + "/get_corps_message";
+	String GET_BY_CNAME = API_PREFIX + "get_by_name";
 
 	/**
 	 * 获取CorpsDesc列表
@@ -60,5 +61,14 @@ public interface ICorpsDescClient {
 	 */
 	@GetMapping(GET_CORPS_MESSAGE)
 	R<List<Map<String,Object>>> getCorpsMessage(@RequestParam("corpIds") String corpIds);
+	/**
+	 * 根据id获取客户信息
+	 *
+	 * @param cname 客户名
+	 * @param tenantId 租户
+	 * @return
+	 */
+	@GetMapping(GET_BY_CNAME)
+	R<CorpsDesc> getCorpByName(@RequestParam("cname") String cname,@RequestParam("tenantId") String tenantId);
 
 }

+ 9 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IGoodsDescClient.java

@@ -20,6 +20,7 @@ public interface IGoodsDescClient {
 	String API_PREFIX = "/client";
 	String GOODS_BASIC = API_PREFIX + "/goodsBasic";
 	String GOODSD_ESCMESSAGE = API_PREFIX + "/goodsDescMessage";
+	String GOODS_BY_CODE = API_PREFIX + "goods_by_code";
 
 	/**
 	 * 获取商品信息
@@ -29,6 +30,14 @@ public interface IGoodsDescClient {
 	 */
 	@GetMapping(GOODSD_ESCMESSAGE)
 	R<GoodsDescVO> selectGoodsMessage(@RequestParam("Id") Long Id);
+	/**
+	 * 获取商品信息
+	 *
+	 * @param code
+	 * @return
+	 */
+	@GetMapping(GOODS_BY_CODE)
+	R<GoodsDesc> GoodsByCode(@RequestParam("code") String code);
 
 	/**
 	 * 获取所有商品基础信息

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

@@ -18,6 +18,7 @@ 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 java.io.Serializable;
@@ -301,6 +302,12 @@ public class Delivery implements Serializable {
 		@ApiModelProperty(value = "详情回显客户中文名")
 		@TableField(exist = false)
 		private List<Map<String,Object>> corpName;
+	/**
+	 * 销售公司中文名
+	 */
+		@ApiModelProperty(value = "销售公司中文名")
+		@TableField(exist = false)
+		private List<Map<String, Object>> salesCompanyNameList;
 
 
 }

+ 47 - 5
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/PriceItem.java

@@ -17,6 +17,10 @@
 package org.springblade.mocha.entity;
 
 import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.util.Date;
@@ -105,16 +109,16 @@ public class PriceItem implements Serializable {
 		@ApiModelProperty(value = "备注")
 		private String remarks;
 	/**
-	* 版本
-	*/
-		@ApiModelProperty(value = "版本")
-		private String version;
-	/**
 	 * 租户id
 	 */
 		@ApiModelProperty(value = "租户id")
 		private String tenantId;
 	/**
+	* 版本
+	*/
+		@ApiModelProperty(value = "版本")
+		private String version;
+	/**
 	* 创建人
 	*/
 		@ApiModelProperty(value = "创建人")
@@ -148,7 +152,45 @@ public class PriceItem implements Serializable {
 	* 是否已删除(0 否 1是)
 	*/
 		@ApiModelProperty(value = "是否已删除(0 否 1是)")
+		@TableLogic
 		private Integer isDeleted;
+	/**
+	 * 产地
+	 */
+		@ApiModelProperty(value = "产地")
+		private String placeOfOrigin;
+	/**
+	 * 规格
+	 */
+		@ApiModelProperty(value = "规格")
+		private String typenoOne;
+	/**
+	 * 供应商名称
+	 */
+		@ApiModelProperty(value = "供应商名称")
+		private String corpName;
+	/**
+	 * 供应商id
+	 */
+		@ApiModelProperty(value = "供应商id")
+		private Long corpId;
+	/**
+	 * 创建人中文名
+	 */
+		@ApiModelProperty(value = "创建人中文名")
+		@TableField(exist = false)
+		private String createUserName;
+	/**
+	 * 修改人中文名
+	 */
+		@ApiModelProperty(value = "修改人中文名")
+		@TableField(exist = false)
+		private String updateUserName;
+	/**
+	 * 产地
+	 */
+		@ApiModelProperty(value = "产地")
+		private String placeProduction;
 
 
 }

+ 59 - 0
blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/entity/StockGoods.java

@@ -17,6 +17,9 @@
 package org.springblade.stock.entity;
 
 import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.util.Date;
@@ -178,6 +181,7 @@ public class StockGoods implements Serializable {
 	* 是否已删除(0 否 1是)
 	*/
 		@ApiModelProperty(value = "是否已删除(0 否 1是)")
+		@TableLogic
 		private Integer isDeleted;
 	/**
 	 * 批次号
@@ -226,4 +230,59 @@ public class StockGoods implements Serializable {
 		private BigDecimal balanceAmount;
 
 
+	/**
+	 * 规格
+	 */
+		@ApiModelProperty(value = "规格")
+		private String typenoOne;
+	/**
+	 * 供应商名称
+	 */
+		@ApiModelProperty(value = "供应商名称")
+		private String corpName;
+	/**
+	 * 编码
+	 */
+		@ApiModelProperty(value = "编码")
+		private String code;
+	/**
+	 * 品牌
+	 */
+		@ApiModelProperty(value = "品牌")
+		private String brand;
+	/**
+	 * 花纹
+	 */
+		@ApiModelProperty(value = "花纹")
+		private String brandItem;
+	/**
+	 * 规格
+	 */
+		@ApiModelProperty(value = "规格")
+		private String typeno;
+	/**
+	 * 产地
+	 */
+		@ApiModelProperty(value = "产地")
+		private String placeProduction;
+	/**
+	 * 商品名称
+	 */
+		@ApiModelProperty(value = "商品名称")
+		private String cname;
+	/**
+	 * 创建人中文名
+	 */
+		@ApiModelProperty(value = "创建人中文名")
+		@TableField(exist = false)
+		private String createUserName;
+	/**
+	 * 修改人中文名
+	 */
+		@ApiModelProperty(value = "修改人中文名")
+		@TableField(exist = false)
+		private String updateUserName;
+
+
+
 }

+ 5 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java

@@ -66,4 +66,9 @@ public class CorpsDescClient implements ICorpsDescClient {
 	public R<List<Map<String, Object>>> getCorpsMessage(String corpIds) {
 		return R.data(service.getCorpsMessage(corpIds));
 	}
+
+	@Override
+	public R<CorpsDesc> getCorpByName(String cname, String tenantId) {
+		return R.data(service.getCorpByName(cname,tenantId));
+	}
 }

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/corps/mapper/CorpsDescMapper.xml

@@ -178,7 +178,7 @@
           and tenant_id = #{tenantId}
     </select>
     <select id="selectCorpsDescCname" resultMap="corpsDescResultMap">
-        select id, cname
+        select id, cname,code
         from basic_corps_desc
         where is_deleted = 0
           and cname = #{cname}

+ 9 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsDescService.java

@@ -17,6 +17,7 @@
 package org.springblade.client.corps.service;
 
 import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.vo.CorpsDescVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -76,4 +77,12 @@ public interface ICorpsDescService extends IService<CorpsDesc> {
 	 */
 	List<Map<String,Object>> getCorpsMessage(String corps);
 
+	/**
+	 * 根据客户名获取客户信息
+	 * @param cname
+	 * @param tenantId
+	 * @return
+	 */
+	CorpsDesc getCorpByName(String cname, String tenantId);
+
 }

+ 5 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java

@@ -152,6 +152,11 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 		return baseMapper.getCorpsMessage(collect);
 	}
 
+	@Override
+	public CorpsDesc getCorpByName(String cname, String tenantId) {
+		return baseMapper.selectCorpsDescCname(cname,tenantId);
+	}
+
 	/**
 	 * 保护客户联系人信息
 	 *

+ 7 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/feign/GoodsDescClient.java

@@ -1,5 +1,6 @@
 package org.springblade.client.goods.feign;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -8,6 +9,7 @@ import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.goods.assemble.mapstruct.GoodsDescMapstructMapper;
 import org.springblade.client.goods.service.IGoodsDescService;
 import org.springblade.client.vo.GoodsDescVO;
+import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
@@ -41,6 +43,11 @@ public class GoodsDescClient implements IGoodsDescClient {
 		return R.data(goodsDescService.selectGoodsMessage(id));
 	}
 
+	@Override
+	public R<GoodsDesc> GoodsByCode(String code) {
+		return R.data(goodsDescService.getOne(new QueryWrapper<GoodsDesc>().eq("code", code).eq("tenant_id", SecureUtil.getTenantId())));
+	}
+
 	/**
 	 * 获取所有商品的id和名称
 	 *

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

@@ -127,9 +127,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		}
 		//获取销售公司中文名
 		if (selectById.getSalesCompany() != null){
-			R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(selectById.getSalesCompany());
+			R<List<Map<String,Object>>> corpMessage = corpsDescClient.getCorpsMessage(selectById.getSalesCompany().toString());
 			if (corpMessage.isSuccess() && corpMessage.getData() != null){
-				selectById.setSalesCompanyName(corpMessage.getData().getCname());
+				selectById.setSalesCompanyNameList(corpMessage.getData());
 			}
 		}
 		//获取销售客户中文名

+ 20 - 0
blade-service/blade-mocha-item/pom.xml

@@ -38,6 +38,26 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.4.1</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-excel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-client-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 34 - 3
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/PriceItemController.java

@@ -16,23 +16,33 @@
  */
 package org.springblade.mocha.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.HttpServletResponse;
 import javax.validation.Valid;
 
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.mocha.excel.PriceImport;
+import org.springblade.mocha.excel.PriceItemExcel;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.mocha.entity.PriceItem;
 import org.springblade.mocha.vo.PriceItemVO;
 import org.springblade.mocha.service.IPriceItemService;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 价格管理明细表 控制器
@@ -66,7 +76,7 @@ public class PriceItemController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入priceItem")
 	public R<IPage<PriceItem>> list(PriceItem priceItem, Query query) {
-		IPage<PriceItem> pages = priceItemService.page(Condition.getPage(query), Condition.getQueryWrapper(priceItem));
+		IPage<PriceItem> pages = priceItemService.listMessage(Condition.getPage(query), Condition.getQueryWrapper(priceItem));
 		return R.data(pages);
 	}
 
@@ -101,7 +111,6 @@ public class PriceItemController extends BladeController {
 		if (priceItem.getId() == null){
 			return R.data(500,"请选择要删除的数据","error");
 		}
-		priceItem.setIsDeleted(1);
 		return R.status(priceItemService.updateById(priceItem));
 	}
 
@@ -112,7 +121,7 @@ public class PriceItemController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入priceItem")
 	public R submit(@Valid @RequestBody PriceItem priceItem) {
-		return R.status(priceItemService.saveOrUpdate(priceItem));
+		return priceItemService.updateMessage(priceItem);
 	}
 
 
@@ -125,6 +134,28 @@ public class PriceItemController extends BladeController {
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(priceItemService.removeByIds(Func.toLongList(ids)));
 	}
+	/**
+	 * 导出模板
+	 */
+	@GetMapping("export-template")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "导出模板")
+	public void exportPrice(HttpServletResponse response) {
+		List<PriceItemExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "价格管理模板", "价格管理数据表", list, PriceItemExcel.class);
+	}
+	/**
+	 * 导入用户
+	 */
+	@PostMapping("import-price")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "导入价格", notes = "传入excel")
+	public R importUser(MultipartFile file) {
+		Integer isCovered = 0;
+		PriceImport priceImport = new PriceImport(priceItemService, isCovered == 1);
+		ExcelUtil.save(file, priceImport, PriceItemExcel.class);
+		return R.success("操作成功");
+	}
 
 
 }

+ 24 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/excel/PriceImport.java

@@ -0,0 +1,24 @@
+package org.springblade.mocha.excel;
+
+import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+import org.springblade.mocha.service.IPriceItemService;
+
+import java.util.List;
+
+/**
+ * 价格管理数据导入类
+ *
+ * @author Chill
+ */
+@RequiredArgsConstructor
+@AllArgsConstructor
+public class PriceImport implements ExcelImporter<PriceItemExcel> {
+	private IPriceItemService priceItemService;
+	private final Boolean isCovered;
+	@Override
+	public void save(List<PriceItemExcel> data) {
+		priceItemService.importUser(data,isCovered);
+	}
+}

+ 44 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/excel/PriceItemExcel.java

@@ -0,0 +1,44 @@
+package org.springblade.mocha.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 PriceItemExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 大字(规格编码)
+	 */
+	@ExcelProperty("大字(规格编码)")
+	private String code;
+	/**
+	 * 名称
+	 */
+	@ExcelProperty("名称")
+	private String cname;
+	/**
+	 * 销售价格
+	 */
+	@ExcelProperty("销售价格")
+	private BigDecimal salesPrice;
+	/**
+	 * 采购价格
+	 */
+	@ExcelProperty("采购价格")
+	private BigDecimal purchasePrice;
+	/**
+	 * 供应商
+	 */
+	@ExcelProperty("供应商")
+	private String corpName;
+}

+ 5 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/PriceItemMapper.xml

@@ -25,6 +25,11 @@
         <result column="update_time" property="updateTime"/>
         <result column="status" property="status"/>
         <result column="is_deleted" property="isDeleted"/>
+        <result column="place_of_origin" property="placeOfOrigin"/>
+        <result column="typeno_one" property="typenoOne"/>
+        <result column="corp_name" property="corpName"/>
+        <result column="corp_id" property="corpId"/>
+        <result column="place_production" property="placeProduction"/>
     </resultMap>
 
 

+ 26 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/IPriceItemService.java

@@ -16,11 +16,16 @@
  */
 package org.springblade.mocha.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.PriceItem;
+import org.springblade.mocha.excel.PriceItemExcel;
 import org.springblade.mocha.vo.PriceItemVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 价格管理明细表 服务类
  *
@@ -37,5 +42,26 @@ public interface IPriceItemService extends IService<PriceItem> {
 	 * @return
 	 */
 	IPage<PriceItemVO> selectPriceItemPage(IPage<PriceItemVO> page, PriceItemVO priceItem);
+	/**
+	 * 导入价格管理数据
+	 *
+	 * @param data
+	 * @param isCovered
+	 * @return
+	 */
+	void importUser(List<PriceItemExcel> data, Boolean isCovered);
+
+	/**
+	 * 新增或修改价格信息
+	 * @param priceItem
+	 * @return
+	 */
+	R<PriceItem> updateMessage(PriceItem priceItem);
+
+	/**
+	 * 查询价格信息
+	 * @return
+	 */
+	IPage<PriceItem> listMessage(IPage<PriceItem> page,QueryWrapper<PriceItem> queryWrapper);
 
 }

+ 111 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/PriceItemServiceImpl.java

@@ -16,13 +16,31 @@
  */
 package org.springblade.mocha.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.GoodsDesc;
+import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.client.feign.IGoodsDescClient;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.mocha.entity.PriceItem;
+import org.springblade.mocha.excel.PriceItemExcel;
 import org.springblade.mocha.vo.PriceItemVO;
 import org.springblade.mocha.mapper.PriceItemMapper;
 import org.springblade.mocha.service.IPriceItemService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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 java.util.Date;
+import java.util.List;
 
 /**
  * 价格管理明细表 服务实现类
@@ -31,11 +49,104 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2021-10-14
  */
 @Service
+@AllArgsConstructor
 public class PriceItemServiceImpl extends ServiceImpl<PriceItemMapper, PriceItem> implements IPriceItemService {
 
+	private ICorpsDescClient corpsDescClient;//获取客户信息
+	private IGoodsDescClient goodsDescClient;//商品信息
+	private IUserClient userClient;//用户信息
 	@Override
 	public IPage<PriceItemVO> selectPriceItemPage(IPage<PriceItemVO> page, PriceItemVO priceItem) {
 		return page.setRecords(baseMapper.selectPriceItemPage(page, priceItem));
 	}
 
+	/**
+	 * 导入价格管理信息
+	 * @param data
+	 * @param isCovered
+	 */
+	@Override
+	@Transactional
+	public void importUser(List<PriceItemExcel> data, Boolean isCovered) {
+		data.forEach(priceItemExcel -> {
+			PriceItem priceItem = new PriceItem();
+			priceItem.setPurchasePrice(priceItemExcel.getPurchasePrice());
+			priceItem.setSalesPrice(priceItemExcel.getSalesPrice());
+			//获取商品信息
+			if (StringUtils.isNotBlank(priceItemExcel.getCode())){
+				priceItem.setCode(priceItemExcel.getCode());
+				R<GoodsDesc> goodsDesc = goodsDescClient.GoodsByCode(priceItemExcel.getCode());
+				if (goodsDesc.isSuccess() && goodsDesc.getData() != null){
+					if (StringUtils.isNotBlank(goodsDesc.getData().getBrand())){
+						priceItem.setBrand(goodsDesc.getData().getBrand());
+					}
+					if (StringUtils.isNotBlank(goodsDesc.getData().getBrandItem())){
+						priceItem.setBrandItem(goodsDesc.getData().getBrandItem());
+					}
+					if (StringUtils.isNotBlank(goodsDesc.getData().getTypeno())){
+						priceItem.setTypeno(goodsDesc.getData().getTypeno());
+					}
+					priceItem.setBigCharacter(goodsDesc.getData().getCname());
+				}
+			}
+			//获取客户信息
+			if (StringUtils.isNotBlank(priceItemExcel.getCorpName())){
+				R<CorpsDesc> corpByName = corpsDescClient.getCorpByName(priceItemExcel.getCorpName(), SecureUtil.getTenantId());
+				if (corpByName.isSuccess() && corpByName.getData() != null){
+					priceItem.setCorpId(corpByName.getData().getId());
+					priceItem.setCorpCode(corpByName.getData().getCode());
+					priceItem.setCorpName(corpByName.getData().getCname());
+				}
+			}
+			PriceItem item = baseMapper.selectOne(new QueryWrapper<PriceItem>().eq("code", priceItemExcel.getCode()).eq("is_deleted", 0).eq("tenant_id", SecureUtil.getTenantId()));
+			if (item == null){
+				priceItem.setCreateUser(SecureUtil.getUserId());
+				priceItem.setCreateTime(new Date());
+				priceItem.setTenantId(SecureUtil.getTenantId());
+				baseMapper.insert(priceItem);
+			}else {
+				priceItem.setId(item.getId());
+				priceItem.setUpdateUser(SecureUtil.getUserId());
+				priceItem.setUpdateTime(new Date());
+				baseMapper.updateById(priceItem);
+			}
+		});
+	}
+
+	@Override
+	public R<PriceItem> updateMessage(PriceItem priceItem) {
+		priceItem.setTenantId(SecureUtil.getTenantId());
+		if (priceItem.getId() == null){
+			priceItem.setCreateTime( new Date());
+			priceItem.setCreateUser(SecureUtil.getUserId());
+			baseMapper.insert(priceItem);
+		}else {
+			priceItem.setUpdateTime(new Date());
+			priceItem.setUpdateUser(SecureUtil.getUserId());
+			baseMapper.updateById(priceItem);
+		}
+		return R.data(priceItem);
+	}
+
+	@Override
+	public IPage<PriceItem> listMessage(IPage<PriceItem> page, QueryWrapper<PriceItem> queryWrapper) {
+		IPage<PriceItem> priceItemIPage = baseMapper.selectPage(page, queryWrapper);
+		if (CollectionUtils.isNotEmpty(priceItemIPage.getRecords())){
+			priceItemIPage.getRecords().forEach(item ->{
+				if (item.getCreateUser() != null){
+					R<User> createUser = userClient.userInfoById(item.getCreateUser());
+					if (createUser.isSuccess() && createUser.getData() != null){
+						item.setCreateUserName(createUser.getData().getName());
+					}
+				}
+				if (item.getUpdateUser() != null){
+					R<User> updateUser = userClient.userInfoById(item.getUpdateUser());
+					if (updateUser.isSuccess() && updateUser.getData() != null){
+						item.setUpdateUserName(updateUser.getData().getName());
+					}
+				}
+			});
+		}
+		return priceItemIPage;
+	}
 }

+ 20 - 0
blade-service/blade-stock/pom.xml

@@ -26,6 +26,26 @@
             <artifactId>blade-stock-api</artifactId>
             <version>2.8.2.RELEASE</version>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-excel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-client-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-user-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 35 - 4
blade-service/blade-stock/src/main/java/org/springblade/stock/controller/StockGoodsController.java

@@ -21,18 +21,27 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
+
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.stock.excel.StockGoodsExcel;
+import org.springblade.stock.excel.StockGoodsImport;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.stock.entity.StockGoods;
 import org.springblade.stock.vo.StockGoodsVO;
 import org.springblade.stock.service.IStockGoodsService;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 库存账 控制器
@@ -66,7 +75,7 @@ public class StockGoodsController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入stockGoods")
 	public R<IPage<StockGoods>> list(StockGoods stockGoods, Query query) {
-		IPage<StockGoods> pages = stockGoodsService.page(Condition.getPage(query), Condition.getQueryWrapper(stockGoods));
+		IPage<StockGoods> pages = stockGoodsService.listMessage(Condition.getPage(query), Condition.getQueryWrapper(stockGoods));
 		return R.data(pages);
 	}
 
@@ -108,10 +117,10 @@ public class StockGoodsController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入stockGoods")
 	public R submit(@Valid @RequestBody StockGoods stockGoods) {
-		return R.status(stockGoodsService.saveOrUpdate(stockGoods));
+		return stockGoodsService.updateMessage(stockGoods);
 	}
 
-	
+
 	/**
 	 * 删除 库存账
 	 */
@@ -121,6 +130,28 @@ public class StockGoodsController extends BladeController {
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(stockGoodsService.removeByIds(Func.toLongList(ids)));
 	}
+	/**
+	 * 导出模板
+	 */
+	@GetMapping("/export-template")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "导出模板")
+	public void exportPrice(HttpServletResponse response) {
+		List<StockGoodsExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "库存导入模板", "库存导入数据表", list, StockGoodsExcel.class);
+	}
+	/**
+	 * 导入用户
+	 */
+	@PostMapping("/import-price")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "导入库存", notes = "传入excel")
+	public R importUser(MultipartFile file) {
+		Integer isCovered = 0;
+		StockGoodsImport stockGoodsImport = new StockGoodsImport(stockGoodsService, isCovered == 1);
+		ExcelUtil.save(file, stockGoodsImport, StockGoodsExcel.class);
+		return R.success("操作成功");
+	}
+
 
-	
 }

+ 49 - 0
blade-service/blade-stock/src/main/java/org/springblade/stock/excel/StockGoodsExcel.java

@@ -0,0 +1,49 @@
+package org.springblade.stock.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 StockGoodsExcel implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 大字(规格编码)
+	 */
+	@ExcelProperty("大字(规格编码)")
+	private String code;
+	/**
+	 * 名称
+	 */
+	@ExcelProperty("名称")
+	private String cname;
+	/**
+	 * 总库存
+	 */
+	@ExcelProperty("总库存")
+	private BigDecimal balanceQuantity;
+	/**
+	 * 内贸锁定
+	 */
+	@ExcelProperty("内贸锁定")
+	private BigDecimal lockingQuantity;
+	/**
+	 * 可用库存
+	 */
+	@ExcelProperty("可用库存")
+	private BigDecimal surplusRouteQuantity;
+	/**
+	 * 客户名称
+	 */
+	@ExcelProperty("客户名称")
+	private String corpName;
+}

+ 24 - 0
blade-service/blade-stock/src/main/java/org/springblade/stock/excel/StockGoodsImport.java

@@ -0,0 +1,24 @@
+package org.springblade.stock.excel;
+
+import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+import org.springblade.stock.service.IStockGoodsService;
+
+import java.util.List;
+
+/**
+ * 库存数据导入类
+ *
+ * @author Chill
+ */
+@RequiredArgsConstructor
+@AllArgsConstructor
+public class StockGoodsImport implements ExcelImporter<StockGoodsExcel> {
+	private IStockGoodsService stockGoodsService;//库存服务
+	private final Boolean isCovered;
+	@Override
+	public void save(List<StockGoodsExcel> data) {
+		stockGoodsService.importUser(data,isCovered);
+	}
+}

+ 8 - 0
blade-service/blade-stock/src/main/java/org/springblade/stock/mapper/StockGoodsMapper.xml

@@ -40,6 +40,14 @@
         <result column="in_amount" property="inAmount"/>
         <result column="out_amount" property="outAmount"/>
         <result column="balance_amount" property="balanceAmount"/>
+        <result column="typeno_one" property="typenoOne"/>
+        <result column="corp_name" property="corpName"/>
+        <result column="code" property="code"/>
+        <result column="brand" property="brand"/>
+        <result column="brand_item" property="brandItem"/>
+        <result column="typeno" property="typeno"/>
+        <result column="place_production" property="placeProduction"/>
+        <result column="cname" property="cname"/>
     </resultMap>
 
 

+ 25 - 0
blade-service/blade-stock/src/main/java/org/springblade/stock/service/IStockGoodsService.java

@@ -16,11 +16,16 @@
  */
 package org.springblade.stock.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springblade.core.tool.api.R;
 import org.springblade.stock.entity.StockGoods;
+import org.springblade.stock.excel.StockGoodsExcel;
 import org.springblade.stock.vo.StockGoodsVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 库存账 服务类
  *
@@ -56,6 +61,26 @@ public interface IStockGoodsService extends IService<StockGoods> {
 	 * 修改库存总账
 	 */
 	int updateStock();
+	/**
+	 * 导入库存账数据
+	 *
+	 * @param data
+	 * @param isCovered
+	 * @return
+	 */
+	void importUser(List<StockGoodsExcel> data, Boolean isCovered);
+	/**
+	 * 查询库存信息
+	 * @return
+	 */
+	IPage<StockGoods> listMessage(IPage<StockGoods> page, QueryWrapper<StockGoods> queryWrapper);
+
+	/**
+	 * 保存或修改库存账
+	 * @param stockGoods
+	 * @return
+	 */
+	R<StockGoods> updateMessage(StockGoods stockGoods);
 
 
 

+ 127 - 1
blade-service/blade-stock/src/main/java/org/springblade/stock/service/impl/StockGoodsServiceImpl.java

@@ -18,19 +18,33 @@ package org.springblade.stock.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 com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.GoodsDesc;
+import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.client.feign.IGoodsDescClient;
+import org.springblade.client.vo.GoodsDescVO;
 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.stock.entity.StockGoods;
+import org.springblade.stock.excel.StockGoodsExcel;
 import org.springblade.stock.vo.StockGoodsVO;
 import org.springblade.stock.mapper.StockGoodsMapper;
 import org.springblade.stock.service.IStockGoodsService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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 java.util.Date;
+import java.util.List;
 
 /**
  * 库存账 服务实现类
@@ -39,8 +53,11 @@ import java.util.Date;
  * @since 2021-09-26
  */
 @Service
+@AllArgsConstructor
 public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGoods> implements IStockGoodsService {
-
+	private ICorpsDescClient corpsDescClient;//获取客户信息
+	private IGoodsDescClient goodsDescClient;//商品信息
+	private IUserClient userClient;//用户信息
 	@Override
 	public IPage<StockGoodsVO> selectStockGoodsPage(IPage<StockGoodsVO> page, StockGoodsVO stockGoods) {
 		return page.setRecords(baseMapper.selectStockGoodsPage(page, stockGoods));
@@ -85,4 +102,113 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 		return 0;
 	}
 
+	@Override
+	@Transactional
+	public void importUser(List<StockGoodsExcel> data, Boolean isCovered) {
+		for (StockGoodsExcel datum : data) {
+			StockGoods stockGoods = new StockGoods();
+			stockGoods.setLockingQuantity(datum.getLockingQuantity());
+			stockGoods.setBalanceQuantity(datum.getBalanceQuantity());
+			stockGoods.setSurplusRouteQuantity(datum.getSurplusRouteQuantity());
+			stockGoods.setTenantId(SecureUtil.getTenantId());
+			//获取商品id
+			R<GoodsDesc> goodsDesc = goodsDescClient.GoodsByCode(datum.getCode());
+			if (goodsDesc.isSuccess() && goodsDesc.getData() != null){
+				stockGoods.setGoodsId(goodsDesc.getData().getId());
+				if (StringUtils.isNotBlank(goodsDesc.getData().getBrand())){
+					stockGoods.setBrand(goodsDesc.getData().getBrand());
+				}
+				if (StringUtils.isNotBlank(goodsDesc.getData().getBrandItem())){
+					stockGoods.setBrandItem(goodsDesc.getData().getBrandItem());
+				}
+				if (StringUtils.isNotBlank(goodsDesc.getData().getTypeno())){
+					stockGoods.setTypeno(goodsDesc.getData().getTypeno());
+				}
+				stockGoods.setCname(goodsDesc.getData().getCname());
+				stockGoods.setCode(goodsDesc.getData().getCode());
+			}else {
+				continue;
+			}
+			//获取客户id
+			R<CorpsDesc> corpsDesc = corpsDescClient.getCorpByName(datum.getCorpName(), SecureUtil.getTenantId());
+			if (corpsDesc.isSuccess() && corpsDesc.getData() != null){
+				stockGoods.setCorpId(corpsDesc.getData().getId());
+				stockGoods.setCorpName(corpsDesc.getData().getCname());
+			}else {
+				continue;
+			}
+			//查询库存账
+			StockGoods goods = baseMapper.selectOne(new QueryWrapper<StockGoods>().eq("goods_id", stockGoods.getGoodsId())
+				.eq("corp_id", stockGoods.getCorpId()).eq("tenant_id", SecureUtil.getTenantId()).eq("is_deleted", 0));
+			if (goods == null){
+				stockGoods.setCreateTime(new Date());
+				stockGoods.setCreateUser(SecureUtil.getUserId());
+				baseMapper.insert(stockGoods);
+			}else {
+				stockGoods.setUpdateUser(SecureUtil.getUserId());
+				stockGoods.setUpdateTime(new Date());
+				stockGoods.setId(goods.getId());
+				baseMapper.updateById(stockGoods);
+			}
+		}
+	}
+
+	@Override
+	public IPage<StockGoods> listMessage(IPage<StockGoods> page, QueryWrapper<StockGoods> queryWrapper) {
+		IPage<StockGoods> stockGoodsIPage = baseMapper.selectPage(page, queryWrapper);
+		if (CollectionUtils.isNotEmpty(stockGoodsIPage.getRecords())){
+			stockGoodsIPage.getRecords().stream().forEach(item ->{
+				//获取商品信息
+				R<GoodsDescVO> goodsMessage = goodsDescClient.selectGoodsMessage(item.getGoodsId());
+				if (goodsMessage.isSuccess() && goodsMessage.getData() != null){
+					if (StringUtils.isNotBlank(goodsMessage.getData().getBrand())){
+						item.setBrand(goodsMessage.getData().getBrand());
+					}
+					if (StringUtils.isNotBlank(goodsMessage.getData().getBrandItem())){
+						item.setBrandItem(goodsMessage.getData().getBrandItem());
+					}
+					if (StringUtils.isNotBlank(goodsMessage.getData().getTypeno())){
+						item.setTypeno(goodsMessage.getData().getTypeno());
+					}
+					item.setCname(goodsMessage.getData().getCname());
+					item.setCode(goodsMessage.getData().getCode());
+				}
+				//获取客户信息
+				R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());
+				if (corpMessage.isSuccess() && corpMessage.getData() != null){
+					item.setCorpName(corpMessage.getData().getCname());
+				}
+				//获取用户信息
+				if (item.getCreateUser() != null){
+					R<User> createUser = userClient.userInfoById(item.getCreateUser());
+					if (createUser.isSuccess() && createUser.getData() != null){
+						item.setCreateUserName(createUser.getData().getName());
+					}
+				}
+				if (item.getUpdateUser() != null){
+					R<User> updateUser = userClient.userInfoById(item.getUpdateUser());
+					if (updateUser.isSuccess() && updateUser.getData() != null){
+						item.setUpdateUserName(updateUser.getData().getName());
+					}
+				}
+			});
+		}
+		return stockGoodsIPage;
+	}
+
+	@Override
+	public R<StockGoods> updateMessage(StockGoods stockGoods) {
+		if (stockGoods.getId() == null){
+			stockGoods.setCreateTime(new Date());
+			stockGoods.setCreateUser(SecureUtil.getUserId());
+			stockGoods.setTenantId(SecureUtil.getTenantId());
+			baseMapper.insert(stockGoods);
+		}else {
+			stockGoods.setUpdateUser(SecureUtil.getUserId());
+			stockGoods.setUpdateTime(new Date());
+			baseMapper.updateById(stockGoods);
+		}
+		return R.data(stockGoods);
+	}
+
 }