Browse Source

订单采购明细导入,商品模板下载 2022年7月29日19点10分

纪新园 3 years ago
parent
commit
8e10dddb27

+ 6 - 0
blade-service-api/trade-purchase-api/pom.xml

@@ -12,6 +12,12 @@
     <artifactId>trade-purchase-api</artifactId>
     <name>${project.artifactId}</name>
     <version>${bladex.project.version}</version>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+        </dependency>
+    </dependencies>
     <packaging>jar</packaging>
 
 

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

@@ -473,4 +473,10 @@ public class OrderItems extends OrderBase {
 	 * 是否质量胎
 	 */
 	private Integer shopQuality;
+
+	/**
+	 * 毛重
+	 */
+	@ApiModelProperty(value = "毛重")
+	private BigDecimal grossWeight;
 }

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

@@ -0,0 +1,76 @@
+package com.trade.purchase.order.entity;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.trade.purchase.order.common.entity.OrderBase;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 订单明细表实体类
+ *
+ * @author BladeX
+ * @since 2021-09-26
+ */
+@Data
+public class OrderItemsExecl {
+
+	//提单号
+	@ExcelProperty("提单号")
+	private String billNo;
+
+	//商品类别名称
+	@ExcelProperty("商品类别名称")
+	private String priceCategoryNames;
+
+	//规格型号
+	@ExcelProperty("规格型号")
+	private String specificationAndModel;
+
+	//箱号
+	@ExcelProperty("箱号")
+	private String containerNo;
+
+	//箱量
+	@ExcelProperty("箱量")
+	private BigDecimal cntrNum;
+
+	//箱型
+	@ExcelProperty("箱型")
+	private Long cntrType;
+
+	//件数
+	@ExcelProperty("件数")
+	private Long number;
+
+	//发票重量
+	@ExcelProperty("发票重量")
+	private BigDecimal invoiceWeight;
+
+	//码单重量
+	@ExcelProperty("码单重量")
+	private BigDecimal billWeight;
+
+	//毛重
+	@ExcelProperty("毛重")
+	private BigDecimal grossWeight;
+
+
+	//单价
+	@ExcelProperty("单价")
+	private BigDecimal price;
+
+
+	//发票金额
+	@ExcelProperty("发票金额")
+	private BigDecimal amount;
+
+	//税率
+	@ExcelProperty("税率")
+	private BigDecimal taxRate;
+	//备注
+	@ExcelProperty("备注")
+	private String remarks;
+
+
+}

+ 8 - 4
blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescController.java

@@ -30,6 +30,7 @@ import org.springblade.client.corps.service.ICorpsDescService;
 import org.springblade.client.entity.*;
 import org.springblade.client.goods.enums.GoodsTypeEnum;
 import org.springblade.client.goods.excel.GoodsExcel;
+import org.springblade.client.goods.excel.GoodsExcels;
 import org.springblade.client.goods.excel.GoodsInfoExcel;
 import org.springblade.client.goods.excel.GoodsOutExcel;
 import org.springblade.client.goods.service.*;
@@ -378,11 +379,12 @@ public class GoodsDescController extends BladeController {
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "导入商品资料", notes = "传入excel")
 	public R importUser(MultipartFile file) {
-		List<GoodsExcel> excelList = ExcelUtil.read(file, GoodsExcel.class);
+//		List<GoodsExcel> excelList = ExcelUtil.read(file, GoodsExcel.class);
+		List<GoodsExcels> excelList = ExcelUtil.read(file, GoodsExcels.class);
 		if (CollectionUtils.isEmpty(excelList)) {
 			throw new SecurityException("数据不能为空");
 		}
-		return goodsDescService.importGoods(excelList, false);
+		return goodsDescService.importGoodsNew(excelList, false);
 	}
 
 	/**
@@ -392,8 +394,10 @@ public class GoodsDescController extends BladeController {
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "导出模板")
 	public void exportPrice(HttpServletResponse response) {
-		List<GoodsExcel> list = new ArrayList<>();
-		ExcelUtil.export(response, "导出模板-产品信息", "导入数据表", list, GoodsExcel.class);
+		/*List<GoodsExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "导出模板-产品信息", "导入数据表", list, GoodsExcel.class);*/
+		List<GoodsExcels> list = new ArrayList<>();
+		ExcelUtil.export(response, "导出模板-商品信息", "导入数据表", list, GoodsExcels.class);
 	}
 
 

+ 73 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/excel/GoodsExcels.java

@@ -0,0 +1,73 @@
+package org.springblade.client.goods.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 io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class GoodsExcels implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@ExcelProperty("商品编码(必填)")
+	private String code;
+
+	@ExcelProperty("商品名称(必填)")
+	private String cname;
+	@ExcelProperty("商品类别(必填)")
+	private String type;
+	//英文名称
+	@ExcelProperty("英文名称(必填)")
+	private String ename;
+	//海关中文
+	@ExcelProperty("海关中文")
+	private String customName;
+	//海关英文
+	@ExcelProperty("海关英文")
+	private String customEname;
+	//规格编码
+	@ExcelProperty("规格编码")
+	private String typeno;
+	//英文规格
+	@ExcelProperty("英文规格")
+	private String etypeno;
+	//海关编码
+	@ExcelProperty("海关编码")
+	private String customCode;
+	//退税率
+	@ExcelProperty("退税率")
+	private BigDecimal customRate;
+	//计量单位
+	@ExcelProperty("计量单位")
+	private String assistUnit;
+	//单价
+	@ExcelProperty("单价")
+	private BigDecimal price;
+	/**
+	 * 供应商名称
+	 */
+	@ExcelProperty("供应商名称")
+	private String corpName;
+	//中文描述
+	@ExcelProperty("中文描述")
+	private String nameDescription;
+	//英文描述
+	@ExcelProperty("英文描述")
+	private String cnameDescription;
+
+
+
+
+
+
+
+
+}

+ 10 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/service/IGoodsDescService.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.goods.excel.GoodsExcel;
+import org.springblade.client.goods.excel.GoodsExcels;
 import org.springblade.client.goods.excel.GoodsInfoExcel;
 import org.springblade.client.vo.GoodsDescVO;
 import org.springblade.client.vo.ProductVO;
@@ -104,6 +105,15 @@ public interface IGoodsDescService extends IService<GoodsDesc> {
 	R importGoods(List<GoodsExcel> data, Boolean isCovered);
 
 	/**
+	 * 导入商品(新)
+	 *
+	 * @param data
+	 * @param
+	 * @return
+	 */
+	R importGoodsNew(List<GoodsExcels> data, Boolean isCovered);
+
+	/**
 	 * 导入产品信息
 	 */
 	R importGoodsInfo(List<GoodsInfoExcel> data, Boolean isCovered);

+ 72 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/service/impl/GoodsDescServiceImpl.java

@@ -27,6 +27,7 @@ import org.springblade.client.corps.mapper.CorpsDescMapper;
 import org.springblade.client.entity.*;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.goods.excel.GoodsExcel;
+import org.springblade.client.goods.excel.GoodsExcels;
 import org.springblade.client.goods.excel.GoodsInfoExcel;
 import org.springblade.client.goods.mapper.*;
 import org.springblade.client.goods.service.IGoodsDescService;
@@ -402,6 +403,77 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 
 	}
 
+	/**
+	 * 导入商品(新)
+	 *
+	 * @param data
+	 * @param
+	 * @return
+	 */
+	@Override
+	public R importGoodsNew(List<GoodsExcels> data, Boolean isCovered) {
+		if (org.springframework.util.CollectionUtils.isEmpty(data)) {
+			throw new SecurityException("导入数据不能为空");
+		}
+
+		for (int i = 0; i < data.size(); i++) {
+			GoodsExcels goodsExcel = data.get(i);
+			String type = goodsExcel.getType();
+			GoodsType goodsType = goodsTypeMapper.selectGoodsTypeCname(type, AuthUtil.getTenantId());
+			if (goodsType == null) {
+				throw new SecurityException("第" + (i + 1) + "行未添加分类或者分类不存在");
+			}
+		}
+
+		data.forEach(e -> {
+			String type = e.getType();
+			GoodsType goodsType = goodsTypeMapper.selectGoodsTypeCname(type, AuthUtil.getTenantId());
+			if (goodsType != null) {
+				GoodsDesc goodsDesc = new GoodsDesc();
+				goodsDesc.setCode(e.getCode());
+				goodsDesc.setCname(e.getCname());
+				if (StringUtil.isBlank(goodsDesc.getCnameInt())) {
+					goodsDesc.setCnameInt(getCnameInt(goodsDesc.getCname()));
+				}
+				goodsDesc.setPrice(e.getPrice());
+				goodsDesc.setType(0L);
+				goodsDesc.setGoodsTypeId(String.valueOf(goodsType.getId()));
+				// 获取供应商
+				CorpsDesc corpByName = corpsDescClient.getCorpsDesc(e.getCorpName(), "GYS");
+				if (corpByName != null) {
+					goodsDesc.setCorpId(corpByName.getId());
+					goodsDesc.setCorpName(corpByName.getCname());
+				}
+				// 如果名称相等 就认为重复
+				LambdaQueryWrapper<GoodsDesc> queryWrapper = new LambdaQueryWrapper<>();
+				queryWrapper.eq(GoodsDesc::getTenantId, AuthUtil.getTenantId());
+				queryWrapper.eq(GoodsDesc::getCname, goodsDesc.getCname());
+				queryWrapper.eq(GoodsDesc::getIsDeleted, 0);
+				GoodsDesc one = goodsDescMapper.selectOne(queryWrapper);
+				if (one == null) {
+					goodsDesc.setCreateTime(new Date());
+					goodsDesc.setCreateUser(AuthUtil.getUserId());
+					goodsDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+					goodsDescMapper.insert(goodsDesc);
+
+					GoodsTypeDesc goodsTypeDes = new GoodsTypeDesc();
+					goodsTypeDes.setGoodsId(goodsDesc.getId());
+					goodsTypeDes.setGoodsTypeId(goodsType.getId());
+					goodsTypeDes.setCreateTime(new Date());
+					goodsTypeDes.setCreateUser(AuthUtil.getUserId());
+					goodsTypeDes.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+					goodsTypeDescMapper.insert(goodsTypeDes);
+				} else {
+					goodsDesc.setId(one.getId());
+					goodsDesc.setUpdateTime(new Date());
+					goodsDesc.setUpdateUser(AuthUtil.getUserId());
+					goodsDescMapper.updateById(goodsDesc);
+				}
+			}
+		});
+		return R.success("ok");
+	}
+
 	@Override
 	public R importGoodsInfo(List<GoodsInfoExcel> data, Boolean isCovered) {
 		if (org.springframework.util.CollectionUtils.isEmpty(data)) {

+ 67 - 54
blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectServiceImpl.java

@@ -30,6 +30,7 @@ import java.math.BigDecimal;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 
@@ -479,76 +480,88 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
 	@Override
 	public int dispatch(ServiceProject serviceProject) {
 		List<ServiceProjectItem> itemList = serviceProject.getItemList();
-		Date date = new Date();
+		AtomicInteger status = new AtomicInteger(1);
 		itemList.forEach(ls -> {
+			//判断次数  如果为空赋值为1
 			if (ObjectUtils.isNotNull(ls.getFrequency())) {
+				//判断次数  如果为空赋值为1
 				if (ObjectUtils.isNull(ls.getSecond())) {
 					ls.setSecond(1);
 				}
 				switch (ls.getFrequency()) {
 					case "1"://年
-						//服务费每月需缴纳
-						BigDecimal serviceCharge = ls.getServiceCharge().divide(new BigDecimal(ls.getSecond() * 12));
-						//合计金额每月需缴纳
-						BigDecimal amount = ls.getAmount().divide(new BigDecimal(ls.getSecond() * 12));
-						//成本每月需缴纳
-						BigDecimal matMoney = ls.getMatMoney().divide(new BigDecimal(ls.getSecond() * 12));
-						for (int i = 0; i < ls.getSecond() * 12; i++) {
-							//获取需求开始日期
-							Calendar calendar = Calendar.getInstance();
-							calendar.setTime(ls.getBeginTime());
-							calendar.add(Calendar.MONTH, i);//设置月分
-							calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
-							Date date1 = calendar.getTime();
-
-							//获取提醒日期
-							Calendar reminderCalendar = Calendar.getInstance();
-							Date reminderDate;
-							//判断提醒日期是否为空  空默认每月一日为提醒日期  否则 每月提醒日期为当前日
-							if (ObjectUtils.isNotNull(ls.getReminderDay())) {
-								reminderCalendar.setTime(ls.getReminderDay());
-								calendar.add(Calendar.MONTH, i);//设置月分
-								reminderDate = calendar.getTime();
-							} else {
-								calendar.setTime(date);
-								calendar.add(Calendar.MONTH, i);//设置月分
-								calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
-								reminderDate = calendar.getTime();
-							}
-
-							ls.setServiceCharge(serviceCharge);
-							ls.setAmount(amount);
-							ls.setMatMoney(matMoney);
-							ls.setBeginTime(date1);
-							ls.setReminderDay(reminderDate);
-
-						}
-
+						this.insertProjectItem(ls, ls.getSecond() * 12, serviceProject.getId());
 					case "2"://半年
-						for (int i = 0; i < ls.getSecond() * 6; i++) {
-
-						}
-
+						this.insertProjectItem(ls, ls.getSecond() * 6, serviceProject.getId());
 					case "3"://季度
-						for (int i = 0; i < ls.getSecond() * 3; i++) {
-
-						}
-
+						this.insertProjectItem(ls, ls.getSecond() * 3, serviceProject.getId());
 					case "4"://月
-						for (int i = 0; i < ls.getSecond() * 1; i++) {
-
-						}
-
+						this.insertProjectItem(ls, ls.getSecond(), serviceProject.getId());
 					case "5"://次
-						for (int i = 0; i < ls.getSecond(); i++) {
-
-						}
+						this.insertProjectItem(ls, ls.getSecond(), serviceProject.getId());
+					default:
+						status.set(0);
+						break;
 				}
+			} else {
+				this.insertProjectItem(ls, 1, serviceProject.getId());
 			}
 		});
+		return status.get();
+	}
 
+	/**
+	 * 派工生成单条或多条任务
+	 * @param ls 任务集合
+	 * @param number  生成条数
+	 * @param projectId  父id
+	 */
+	public void insertProjectItem(ServiceProjectItem ls, int number, Long projectId) {
+		//获取当前时间
+		Date date = new Date();
+		//服务费每月需缴纳
+		BigDecimal serviceCharge = ls.getServiceCharge().divide(new BigDecimal(number));
+		//合计金额每月需缴纳
+		BigDecimal amount = ls.getAmount().divide(new BigDecimal(number));
+		//成本每月需缴纳
+		BigDecimal matMoney = ls.getMatMoney().divide(new BigDecimal(number));
+		for (int i = 0; i < number; i++) {
+			//获取需求开始日期
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(ls.getBeginTime());
+			calendar.add(Calendar.MONTH, i);//设置月分
+			calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+			Date date1 = calendar.getTime();
+
+			//获取提醒日期
+			Calendar reminderCalendar = Calendar.getInstance();
+			Date reminderDate;
+			//判断提醒日期是否为空  空默认每月一日为提醒日期  否则 每月提醒日期为当前日
+			if (ObjectUtils.isNotNull(ls.getReminderDay())) {
+				reminderCalendar.setTime(ls.getReminderDay());
+				calendar.add(Calendar.MONTH, i);//设置月分
+				reminderDate = calendar.getTime();
+			} else {
+				calendar.setTime(date);
+				calendar.add(Calendar.MONTH, i);//设置月分
+				calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+				reminderDate = calendar.getTime();
+			}
 
-		return 0;
+			ls.setServiceCharge(serviceCharge);
+			ls.setAmount(amount);
+			ls.setMatMoney(matMoney);
+			ls.setBeginTime(date1);
+			ls.setReminderDay(reminderDate);
+			ls.setTenantId(AuthUtil.getTenantId());
+			ls.setPId(projectId);
+			ls.setCreateTime(new Date());
+			ls.setCreateUser(SecureUtil.getUserId());
+			ls.setCreateUserName(SecureUtil.getUser().getUserName());
+			ls.setTaskStatus(10);
+			ls.setBranch("Y");
+			serviceProjectItemMapper.insert(ls);
+		}
 	}
 
 	public void checkMoney(Long serviceId, List<ServiceProjectItem> items) {

+ 27 - 4
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/controller/PurchaseOrderController.java

@@ -11,10 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.trade.purchase.excel.PurchaseOrderExcel;
 import com.trade.purchase.order.dto.OrderSubmitDto;
-import com.trade.purchase.order.entity.Order;
-import com.trade.purchase.order.entity.OrderFees;
-import com.trade.purchase.order.entity.OrderFiles;
-import com.trade.purchase.order.entity.OrderItems;
+import com.trade.purchase.order.entity.*;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import com.trade.purchase.order.service.IOrderFeesService;
 import com.trade.purchase.order.service.IOrderFilesService;
@@ -44,6 +41,7 @@ import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
 import org.springblade.core.excel.util.ExcelUtil;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
@@ -724,4 +722,29 @@ public class PurchaseOrderController extends BladeController {
 		return R.data(pages);
 	}
 
+	/**
+	 * 导入订单明细模板
+	 */
+	@GetMapping("/exportPrice")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "导出订单明细模板")
+	public void exportPrice(HttpServletResponse response) {
+		List<OrderItemsExecl> list = new ArrayList<>();
+		ExcelUtil.export(response, "导入模板-采购订单明细", "订单明细数据表", list, OrderItemsExecl.class);
+	}
+
+	/**
+	 * 导入订单明细
+	 */
+	@PostMapping("/importPrice")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "导入订单明细", notes = "传入excel")
+	public R importUser(MultipartFile file) {
+		List<OrderItemsExecl> excelList = ExcelUtil.read(file, OrderItemsExecl.class);
+		if (CollectionUtils.isEmpty(excelList)) {
+			throw new SecurityException("数据不能为空");
+		}
+		return R.data(excelList);
+	}
+
 }