Browse Source

Merge branch 'master' of xwh/wms into master

肖文浩 4 years ago
parent
commit
1a3a1a1c80
24 changed files with 381 additions and 97 deletions
  1. 1 1
      wms-core-service/src/main/java/com/lote/wms/inventory/check/entity/enums/InventoryCheckStatusEnum.java
  2. 4 0
      wms-core-service/src/main/java/com/lote/wms/inventory/check/service/InventoryCheckService.java
  3. 118 37
      wms-core-service/src/main/java/com/lote/wms/inventory/check/service/impl/InventoryCheckServiceImpl.java
  4. 26 8
      wms-core-service/src/main/java/com/lote/wms/inventory/inventory/service/impl/InventoryServiceImpl.java
  5. 11 1
      wms-core-service/src/main/java/com/lote/wms/inventory/move/entity/dto/InventoryMvDto.java
  6. 6 0
      wms-core-service/src/main/java/com/lote/wms/inventory/move/service/impl/InventoryMvOperationServiceImpl.java
  7. 10 0
      wms-core-service/src/main/java/com/lote/wms/outstock/order/entity/queryvo/OutOrderQueryVo.java
  8. 7 1
      wms-core-service/src/main/java/com/lote/wms/outstock/order/service/impl/OutOrderExportServiceImpl.java
  9. 3 0
      wms-core-service/src/main/java/com/lote/wms/outstock/order/service/impl/OutOrderImportService2Impl.java
  10. 17 7
      wms-core-service/src/main/java/com/lote/wms/outstock/outshelf/service/impl/OutShelfServiceImpl.java
  11. 1 1
      wms-core-service/src/main/resources/mybatis/mapper/inventory/inventory/InventoryMapper.xml
  12. 14 0
      wms-core-service/src/main/resources/mybatis/mapper/outstock/order/OutOrderMapper.xml
  13. 14 0
      wms-operate/src/main/java/com/lote/wms/controller/operate/inventory/check/InventoryCheckController.java
  14. 64 2
      wms-operate/src/main/resources/static/ui/js/inventory/check/check/list.js
  15. 1 0
      wms-operate/src/main/resources/static/ui/js/inventory/check/checkDetail/list.js
  16. 1 0
      wms-operate/src/main/resources/static/ui/js/inventory/move/random/list.js
  17. 9 2
      wms-operate/src/main/resources/static/ui/js/inventory/move/random/main.js
  18. 15 14
      wms-operate/src/main/resources/static/ui/js/outstock/boxed/outBoxed/main.js
  19. 3 1
      wms-operate/src/main/resources/static/ui/views/inventory/check/check/list.html
  20. 24 0
      wms-operate/src/main/resources/static/ui/views/inventory/check/checkDetail/updateCheckQty.html
  21. 8 1
      wms-operate/src/main/resources/static/ui/views/inventory/move/random/main.html
  22. 12 11
      wms-operate/src/main/resources/static/ui/views/outstock/boxed/outBoxed/main.html
  23. 6 5
      wms-operate/src/main/resources/static/ui/views/outstock/wave/outWave/print/printWaveAndOrderNew.html
  24. 6 5
      wms-operate/src/main/resources/static/ui/views/outstock/wave/outWave/print/printWaveNew.html

+ 1 - 1
wms-core-service/src/main/java/com/lote/wms/inventory/check/entity/enums/InventoryCheckStatusEnum.java

@@ -6,7 +6,7 @@ package com.lote.wms.inventory.check.entity.enums;
  */
 public enum InventoryCheckStatusEnum {
 
-	ING("1", "开始盘点", "待完成盘点"), COMPLATE("2", "完成盘点", "待确认差异"), CONFIRM("3", "确认差异", "待生效差异"), EFFECT("4", "生效并结束", "已完结");
+	ING("1", "开始盘点", "待完成盘点"), COMPLATE("2", "完成盘点", "待确认差异"), CONFIRM("3", "确认差异", "待生效差异"), EFFECT("4", "完结并结束", "已完结");
 
 	private String code;
 

+ 4 - 0
wms-core-service/src/main/java/com/lote/wms/inventory/check/service/InventoryCheckService.java

@@ -8,6 +8,8 @@ import com.lote.wms.inventory.check.entity.formvo.InventoryCheckVo;
 import com.lote.wms.inventory.check.entity.queryvo.InventoryCheckQueryVo;
 import com.lote.wms.user.user.entity.User;
 
+import java.util.Map;
+
 public interface InventoryCheckService {
 	InventoryCheck add(InventoryCheck record);
 
@@ -41,4 +43,6 @@ public interface InventoryCheckService {
 	Message confirm(String id, User user);
 
 	Message effect(String id, User user);
+
+    Message export(Map<String, Object> map);
 }

+ 118 - 37
wms-core-service/src/main/java/com/lote/wms/inventory/check/service/impl/InventoryCheckServiceImpl.java

@@ -1,11 +1,15 @@
 package com.lote.wms.inventory.check.service.impl;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
 
 import javax.annotation.Resource;
 
+import com.lote.wms.base.product.entity.ProductBarcode;
+import com.lote.wms.common.config.SystemConfig;
+import com.lote.wms.common.utils.*;
+import org.apache.poi.ss.usermodel.Sheet;
 import org.mybatis.plugin.model.Pager;
 import org.mybatis.plugin.util.PagerUtil;
 import org.slf4j.Logger;
@@ -21,10 +25,6 @@ import com.lote.wms.common.core.db.DataAccessHolder;
 import com.lote.wms.common.core.db.IdWorkerAide;
 import com.lote.wms.common.exception.ServiceException;
 import com.lote.wms.common.model.Message;
-import com.lote.wms.common.utils.BeanUtil;
-import com.lote.wms.common.utils.DateUtil;
-import com.lote.wms.common.utils.NumberUtil;
-import com.lote.wms.common.utils.StringUtil;
 import com.lote.wms.inventory.check.dao.InventoryCheckMapper;
 import com.lote.wms.inventory.check.entity.InventoryCheck;
 import com.lote.wms.inventory.check.entity.InventoryCheckCriteria;
@@ -70,6 +70,9 @@ public class InventoryCheckServiceImpl implements InventoryCheckService {
 	@Resource
 	private InventoryCheckDetailService inventoryCheckDetailService;
 
+	@Resource
+	private SystemConfig systemConfig;
+
 	private static final Logger logger = LoggerFactory.getLogger(InventoryCheckServiceImpl.class);
 
 	public InventoryCheck add(InventoryCheck record) {
@@ -559,11 +562,11 @@ public class InventoryCheckServiceImpl implements InventoryCheckService {
 			return message;
 		}
 		if (!StringUtil.isEquals(check.getStatusCode(), InventoryCheckStatusEnum.CONFIRM.getCode())) {
-			message.setMsg("只有确认差异状态的盘点单可以操作生效");
+			message.setMsg("只有确认差异状态的盘点单可以操作完结");
 			return message;
 		}
 		if (StringUtil.isEquals(check.getStatusCode(), InventoryCheckStatusEnum.EFFECT.getCode())) {
-			message.setMsg("该盘点单状态已确认生效");
+			message.setMsg("该盘点单状态已确认完结");
 			return message;
 		}
 
@@ -599,33 +602,33 @@ public class InventoryCheckServiceImpl implements InventoryCheckService {
 			}
 
 			// -----------------------------------开始更新库存
-			InventoryVo inventoryVo = new InventoryVo();
-			inventoryVo.setId(inventory.getId());
-			BeanUtil.copy(inventory, inventoryVo);
-			inventoryVo.setRefNo(check.getCode());
-			inventoryVo.setUserCode(user.getCode());
-			inventoryVo.setUserId(user.getId());
-			if (diffQty > 0) {
-				// 盘盈生效
-				inventoryVo.setChangeQty(diffQty);
-				inventoryVo.setOpType(InventoryOpTypeEnum.INVENTORY_CHECK_GAINS_EFFECT);
-				Message addQtyMessage = inventoryService.addQty(inventoryVo);
-				// 如添加库存失败,抛异常将上面的操作回滚
-				if (!addQtyMessage.isSuccess()) {
-					throw new ServiceException(addQtyMessage.getMsg());
-				}
-				gains++;
-
-			} else {
-				// 盘亏
-				inventoryVo.setChangeQty(-diffQty);
-				inventoryVo.setOpType(InventoryOpTypeEnum.INVENTORY_CHECK_LOSS_EFFECT);
-				Message cutInventoryMessage = inventoryService.cutQty(inventoryVo);
-				if (!cutInventoryMessage.isSuccess()) {
-					throw new ServiceException(cutInventoryMessage.getMsg());
-				}
-				loss++;
-			}
+//			InventoryVo inventoryVo = new InventoryVo();
+//			inventoryVo.setId(inventory.getId());
+//			BeanUtil.copy(inventory, inventoryVo);
+//			inventoryVo.setRefNo(check.getCode());
+//			inventoryVo.setUserCode(user.getCode());
+//			inventoryVo.setUserId(user.getId());
+//			if (diffQty > 0) {
+//				// 盘盈生效
+//				inventoryVo.setChangeQty(diffQty);
+//				inventoryVo.setOpType(InventoryOpTypeEnum.INVENTORY_CHECK_GAINS_EFFECT);
+//				Message addQtyMessage = inventoryService.addQty(inventoryVo);
+//				// 如添加库存失败,抛异常将上面的操作回滚
+//				if (!addQtyMessage.isSuccess()) {
+//					throw new ServiceException(addQtyMessage.getMsg());
+//				}
+//				gains++;
+//
+//			} else {
+//				// 盘亏
+//				inventoryVo.setChangeQty(-diffQty);
+//				inventoryVo.setOpType(InventoryOpTypeEnum.INVENTORY_CHECK_LOSS_EFFECT);
+//				Message cutInventoryMessage = inventoryService.cutQty(inventoryVo);
+//				if (!cutInventoryMessage.isSuccess()) {
+//					throw new ServiceException(cutInventoryMessage.getMsg());
+//				}
+//				loss++;
+//			}
 			// -----------------------------------结束更新库存
 
 			detail.setIsEffect(BaseConstant.Y);
@@ -643,9 +646,87 @@ public class InventoryCheckServiceImpl implements InventoryCheckService {
 
 		update(check);
 
-		message.setMsg("确认生效成功,盘盈记录数:" + gains + ",盘亏记录数:" + loss);
+//		message.setMsg("确认生效成功,盘盈记录数:" + gains + ",盘亏记录数:" + loss);
+		message.setMsg("确认完结成功。" );
 		message.setSuccess(true);
 		return message;
 	}
 
+	@Override
+	public Message export(Map<String, Object> map) {
+		String id = (String) map.get("id");
+		if (Objects.isNull(id) || "".equals(id)){
+			return Message.fail("请选择一条数据!");
+		}
+		InventoryCheck check = get(id);
+		if (check == null) {
+			return Message.fail("盘点单id不存在!");
+		}
+		if (!StringUtil.isEquals(check.getStatusCode(), InventoryCheckStatusEnum.EFFECT.getCode())) {
+			return Message.fail("盘点单状态已确认完结才可以导出");
+		}
+
+		String headCnStrList[] = new String[] { "序号", "货位", "货品编码", "UPC", "货品描述", "货主名称", "在库数量", "盘点数", "备注",
+				"库存状态" };
+		Sheet sheet = null;
+		List<String> headCnList = Arrays.asList(headCnStrList);
+		try {
+			sheet = POIExcelUtil.createSheet("盘点单明细", headCnList);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		List<InventoryCheckDetail> inventoryCheckDetailList = inventoryCheckDetailService.listByCheckId(check.getId());
+		if (Objects.isNull(inventoryCheckDetailList) || inventoryCheckDetailList.size()==0){
+			return Message.fail("该盘点单无明细");
+		}
+
+		// 转换成行
+		List<String[]> row = parseRow(inventoryCheckDetailList, headCnList);
+		// 保存到excel中
+		POIExcelUtil.addRows(sheet, row);
+
+
+		// 保存到临时文件返回路径 TODO
+		try {
+			// 随机生成文件
+			String fileName = UUID.randomUUID().toString() + ".xlsx";
+			File tempFile = new File(systemConfig.getRuntimeFileDir() + "/inventory/");
+			if (!tempFile.exists()) {
+				tempFile.mkdirs();
+			}
+			String fileNameAndPath = systemConfig.getRuntimeFileDir() + "/inventory/" + fileName;
+			POIExcelUtil.saveToFile(sheet, fileNameAndPath);
+
+			// 上传文件服务器
+			String downUrl = FileServerClient.fileUpload(systemConfig.getFileServerUrl(), fileNameAndPath);
+			return Message.success(downUrl);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		return Message.fail("系统异常,请稍后重试!");
+	}
+
+	private List<String[]> parseRow(List<InventoryCheckDetail> inventoryCheckDetailList, List<String> headCnList) {
+		List<String[]> rows = new ArrayList<>();
+		int number=1;
+		for (InventoryCheckDetail inventoryCheckDetail : inventoryCheckDetailList) {
+			String[] row = new String[headCnList.size()];
+			row[0] = String.valueOf(number++);
+			row[1] = inventoryCheckDetail.getLocationCode();
+			row[2] = inventoryCheckDetail.getSku();
+			row[3] = inventoryCheckDetail.getBarcode();
+			row[4] = inventoryCheckDetail.getProductName();
+			row[5] = inventoryCheckDetail.getCustomerCode();
+			row[6] = String.valueOf(inventoryCheckDetail.getSysQty());
+			row[7] = String.valueOf(inventoryCheckDetail.getCheckQty());
+			row[8] = inventoryCheckDetail.getRemark();
+			Inventory inventory = inventoryService.get(inventoryCheckDetail.getInventoryId());
+			row[9] = inventory.getStatusName();
+			rows.add(row);
+		}
+		return rows;
+	}
+
 }

+ 26 - 8
wms-core-service/src/main/java/com/lote/wms/inventory/inventory/service/impl/InventoryServiceImpl.java

@@ -232,9 +232,9 @@ public class InventoryServiceImpl implements InventoryService {
 		if (!StringUtil.isEmpty(warehouseCode)) {
 			cri.andWarehouseCodeEqualTo(warehouseCode);
 		}
-		if (DataAccessHolder.getWarehouseCodes() != null) {
-			cri.andWarehouseCodeIn(DataAccessHolder.getWarehouseCodes());
-		}
+//		if (DataAccessHolder.getWarehouseCodes() != null) {
+//			cri.andWarehouseCodeIn(DataAccessHolder.getWarehouseCodes());
+//		}
 		if (!StringUtil.isEmpty(zoneCode)) {
 			cri.andZoneCodeEqualTo(zoneCode);
 		}
@@ -308,9 +308,9 @@ public class InventoryServiceImpl implements InventoryService {
 		if (!StringUtil.isEmpty(warehouseCode)) {
 			cri.andWarehouseCodeEqualTo(warehouseCode);
 		}
-		if (DataAccessHolder.getWarehouseCodes() != null) {
-			cri.andWarehouseCodeIn(DataAccessHolder.getWarehouseCodes());
-		}
+//		if (DataAccessHolder.getWarehouseCodes() != null) {
+//			cri.andWarehouseCodeIn(DataAccessHolder.getWarehouseCodes());
+//		}
 		if (!StringUtil.isEmpty(zoneCode)) {
 			cri.andZoneCodeEqualTo(zoneCode);
 		}
@@ -1005,6 +1005,7 @@ public class InventoryServiceImpl implements InventoryService {
 		updateVo.setUpdateByUserId(vo.getUserId());
 		updateVo.setUpdateTime(new Date());
 		int count = this.inventoryMapper.updateQty(updateVo);// 只会更新updateVo不为空的字段
+//		int countByStatus = this.inventoryMapper.updateStatus(vo);
 		if (count != 1) {
 			message.setMsg("更新库存失败,执行数据库插入返回影响行数为" + count);
 			message.setSuccess(false);
@@ -1419,8 +1420,16 @@ public class InventoryServiceImpl implements InventoryService {
 			vo.setRefNo(refNo);
 			vo.setUserCode(user.getCode());
 			vo.setUserId(user.getId());
-
+			vo.setStatusCode(InventoryStatusEnum.LOCKED.getCode());
+			vo.setStatusName(InventoryStatusEnum.LOCKED.getName());
+			vo.setUpdateByUserCode(user.getCode());
+			vo.setUpdateByUserId(user.getId());
+			vo.setUpdateTime(new Date());
+
+			vo.setFreezeByUserCode(user.getCode());
+			vo.setFreezeTime(new Date());
 			Message cutMessage = updAvail(vo);
+			inventoryMapper.updateStatus(vo);
 			if (!cutMessage.isSuccess()) {
 				return cutMessage;
 			}
@@ -1434,8 +1443,17 @@ public class InventoryServiceImpl implements InventoryService {
 			vo.setRefNo(refNo);
 			vo.setUserCode(user.getCode());
 			vo.setUserId(user.getId());
-
+			vo.setStatusCode(InventoryStatusEnum.LOCKED.getCode());
+			vo.setStatusName(InventoryStatusEnum.LOCKED.getName());
+			vo.setUpdateByUserCode(user.getCode());
+			vo.setUpdateByUserId(user.getId());
+			vo.setUpdateTime(new Date());
+
+			vo.setFreezeByUserCode(user.getCode());
+			vo.setFreezeTime(new Date());
 			Message cutMessage = updAvail(vo);
+			vo.setDataVersion(vo.getDataVersion()+1);
+			inventoryMapper.updateStatus(vo);
 			if (!cutMessage.isSuccess()) {
 				return cutMessage;
 			}

+ 11 - 1
wms-core-service/src/main/java/com/lote/wms/inventory/move/entity/dto/InventoryMvDto.java

@@ -30,7 +30,17 @@ public class InventoryMvDto {
 	
 	//操作人
 	private User userOperation;
-	
+
+	private String transResult;
+
+	public String getTransResult() {
+		return transResult;
+	}
+
+	public void setTransResult(String transResult) {
+		this.transResult = transResult;
+	}
+
 	public String getOutShelfLocationCode() {
 		return outShelfLocationCode;
 	}

+ 6 - 0
wms-core-service/src/main/java/com/lote/wms/inventory/move/service/impl/InventoryMvOperationServiceImpl.java

@@ -170,6 +170,7 @@ public class InventoryMvOperationServiceImpl implements InventoryMvOperationServ
 		String warehouseCode = inventoryMvDto.getWarehouseCode();
 		String outLocationCode = inventoryMvDto.getOutShelfLocationCode();
 		String barcode = inventoryMvDto.getBarcode();
+		String transResult = inventoryMvDto.getTransResult();// 移库原因
 
 		String outshelfInventoryId = inventoryMvDto.getOutShelfInventoryId();// 原下架库存id
 		Integer qty = inventoryMvDto.getQty();// 操作数量
@@ -189,6 +190,9 @@ public class InventoryMvOperationServiceImpl implements InventoryMvOperationServ
 		if (StringUtil.isEmpty(outshelfInventoryId)) {
 			return Message.fail("原库存id不能为空!");
 		}
+//		if (StringUtil.isEmpty(transResult)) {
+//			return Message.fail("移库原因不能为空!");
+//		}
 		if (StringUtil.isEqual(onShelfLocationCode, outLocationCode)) {
 			return Message.fail("移库上架库位不能和下架库位相同!");
 		}
@@ -236,6 +240,7 @@ public class InventoryMvOperationServiceImpl implements InventoryMvOperationServ
 		mvout.setCreatedByUserId(user.getId());
 		mvout.setCreatedTime(new Date());
 		mvout.setId(IdWorkerAide.nextId());
+		mvout.setRemark(transResult);
 		inventoryMvOutService.add(mvout);
 
 		// i_inventory_mv_on
@@ -246,6 +251,7 @@ public class InventoryMvOperationServiceImpl implements InventoryMvOperationServ
 		mvOn.setQtyMvOn(qty);
 		mvOn.setInventoryMoveOutId(mvout.getId());
 		mvOn.setId(IdWorkerAide.nextId());
+		mvOn.setRemark(transResult);
 		inventoryMvOnService.add(mvOn);
 
 		// 查询移库记录 i_inventory_mv_out join i_inventory_mv_on

+ 10 - 0
wms-core-service/src/main/java/com/lote/wms/outstock/order/entity/queryvo/OutOrderQueryVo.java

@@ -20,6 +20,8 @@ public class OutOrderQueryVo extends QueryParam implements Serializable {
 
 	private String orderExportFieldStr;
 
+	private String boxExportFieldStr;//箱号
+
 	private String receiverExportFieldStr;
 
 	private String senderExportFieldStr;
@@ -28,6 +30,14 @@ public class OutOrderQueryVo extends QueryParam implements Serializable {
 
 	private String apiTypeCode;
 
+	public String getBoxExportFieldStr() {
+		return boxExportFieldStr;
+	}
+
+	public void setBoxExportFieldStr(String boxExportFieldStr) {
+		this.boxExportFieldStr = boxExportFieldStr;
+	}
+
 	private String barcodeDigest;
 
 	private Date cancelTime;

+ 7 - 1
wms-core-service/src/main/java/com/lote/wms/outstock/order/service/impl/OutOrderExportServiceImpl.java

@@ -120,6 +120,7 @@ public class OutOrderExportServiceImpl implements OutOrderExportService {
 		orderMap.put("shipped_ex_time", "发货时长(小时)");
 
 		orderMap.put("create_way", "创建方式");
+		orderMap.put("box_no", "箱号");
 
 		sendMap = new LinkedHashMap<>();
 		sendMap.put("name", "寄件人姓名");
@@ -203,8 +204,13 @@ public class OutOrderExportServiceImpl implements OutOrderExportService {
 
 		List<String> orderExportFieldList = outOrderQueryVo.getOrderExportFieldList();
 		List<String> orderFieldList = new ArrayList<>();
+		String boxExportFieldStr = null;
 		if (orderExportFieldList != null) {
 			for (String orderExportField : orderExportFieldList) {
+				if("box_no".equals(orderExportField)){
+					boxExportFieldStr="box."+orderExportField+" o_"+orderExportField;
+					break;
+				}
 				orderFieldList.add("o." + orderExportField + " o_" + orderExportField);
 			}
 		} else {
@@ -252,7 +258,7 @@ public class OutOrderExportServiceImpl implements OutOrderExportService {
 		outOrderQueryVo.setReceiverExportFieldStr(receiverExportFieldStr);
 		outOrderQueryVo.setSenderExportFieldStr(senderExportFieldStr);
 		outOrderQueryVo.setItemExportFieldStr(itemExportFieldStr);
-
+		outOrderQueryVo.setBoxExportFieldStr(boxExportFieldStr);
 		// 生成头map
 		Map<String, String> headMap = getHeadMap(orderExportFieldList, receiverExportFieldList, senderExportFieldList,
 				itemExportFieldList);

+ 3 - 0
wms-core-service/src/main/java/com/lote/wms/outstock/order/service/impl/OutOrderImportService2Impl.java

@@ -348,6 +348,9 @@ public class OutOrderImportService2Impl implements OutOrderImportService2 {
 
 			outOrderItem.setSku(outOrderImport.getSku());
 			outOrderItem.setQuantity(outOrderImport.getQuantity());
+			if (!StringUtil.isEmpty(outOrderImport.getBarcode())){
+				outOrderItem.setBarcode(outOrderImport.getBarcode());
+			}
 
 			Integer qualityCode = outOrderImport.getQualityCode();
 			if (qualityCode == null || qualityCode < 1) {

+ 17 - 7
wms-core-service/src/main/java/com/lote/wms/outstock/outshelf/service/impl/OutShelfServiceImpl.java

@@ -2,16 +2,13 @@ package com.lote.wms.outstock.outshelf.service.impl;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 
 import javax.annotation.Resource;
 
+import com.lote.wms.base.product.dao.ProductMapper;
+import com.lote.wms.base.product.entity.Product;
+import com.lote.wms.base.product.entity.queryvo.ProductQueryVo;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.mybatis.plugin.model.Pager;
 import org.mybatis.plugin.util.PagerUtil;
@@ -70,6 +67,9 @@ public class OutShelfServiceImpl implements OutShelfService {
 	@Autowired
 	private OutShelfMapper outShelfMapper;
 
+	@Autowired
+	private ProductMapper productMapper;
+
 	@Resource
 	private OutInventoryAllocationService outInventoryAllocationService;
 
@@ -600,6 +600,16 @@ public class OutShelfServiceImpl implements OutShelfService {
 			return message;
 		}
 		List<OutShelfResultVo> list = outShelfMapper.selectForOutBox(orderId);
+		OutOrder outOrder = outOrderService.get(orderId);
+		if (Objects.nonNull(list) && list.size()>0){
+			for (OutShelfResultVo outShelfResultVo : list) {
+				ProductQueryVo productQueryVo = new ProductQueryVo();
+				productQueryVo.setCustomerId(outOrder.getCustomerId());
+				productQueryVo.setSku(outShelfResultVo.getSku());
+				Product product = productMapper.getByCustomerAndSku(productQueryVo);
+				outShelfResultVo.setProductName(product.getProductName());
+			}
+		}
 		message.setExtend(list);
 		message.setSuccess(true);
 		return message;

+ 1 - 1
wms-core-service/src/main/resources/mybatis/mapper/inventory/inventory/InventoryMapper.xml

@@ -1012,7 +1012,7 @@
 				warehouse_code,
                 customer_id,
 				customer_code,
-                group_concat(barcode) as barcode,
+                barcode as barcode,
 
 				sku,
 				batch_no,

+ 14 - 0
wms-core-service/src/main/resources/mybatis/mapper/outstock/order/OutOrderMapper.xml

@@ -1708,6 +1708,9 @@
 			<if test="itemExportFieldStr !=null and itemExportFieldStr !='' ">
 				, ${itemExportFieldStr}
 			</if>
+            <if test="boxExportFieldStr !=null and boxExportFieldStr !='' ">
+              , ${boxExportFieldStr}
+            </if>
 		from out_order o
 			<if test="receiverExportFieldStr !=null and receiverExportFieldStr!= '' ">
 				left join `out_order_receiver` receiver on receiver.out_order_id=o.id
@@ -1718,6 +1721,17 @@
 			<if test="itemExportFieldStr !=null and itemExportFieldStr !='' ">
 				left join `out_order_item` item on item.out_order_id=o.id
 			</if>
+            <if test="boxExportFieldStr !=null and boxExportFieldStr !='' ">
+              left join (
+                SELECT
+                order_no1,
+                GROUP_CONCAT(b.box_no) box_no
+                FROM
+                out_order
+                LEFT JOIN out_boxed b ON out_order.order_no1 = b.out_order_no
+                GROUP BY b.out_order_no
+              ) box on o.order_no1=box.order_no1
+            </if>
 		where 1=1
 			<include refid="selectByVoListConditionSql"></include>
 		<choose>

+ 14 - 0
wms-operate/src/main/java/com/lote/wms/controller/operate/inventory/check/InventoryCheckController.java

@@ -14,6 +14,7 @@ import com.lote.wms.inventory.check.entity.queryvo.InventoryCheckQueryVo;
 import com.lote.wms.inventory.check.entity.resultvo.InventoryCheckResultVo;
 import com.lote.wms.inventory.check.service.InventoryCheckDetailService;
 import com.lote.wms.inventory.check.service.InventoryCheckService;
+import com.lote.wms.inventory.move.entity.queryvo.InventoryMvQueryVo;
 import com.lote.wms.user.user.entity.User;
 import org.mybatis.plugin.model.Pager;
 import org.slf4j.Logger;
@@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/inventory/inventoryCheck")
@@ -204,4 +206,16 @@ public class InventoryCheckController extends AbstractController {
 		Message message = inventoryCheckService.effect(id, getUser());
 		return MessageToResultAdapt.toResult(message);
 	}
+
+
+	/**
+	 * 盘点导出
+	 * @param map
+	 * @return
+	 */
+	@ResponseBody
+	@RequestMapping("export")
+	public Result export(@RequestBody Map<String,Object> map) {
+		return MessageToResultAdapt.toResult(inventoryCheckService.export(map));
+	}
 }

+ 64 - 2
wms-operate/src/main/resources/static/ui/js/inventory/check/check/list.js

@@ -310,7 +310,7 @@ function effect(){
 		return false;
 	}
 	//确认?
-	var confirmMsg = '<span style="color:red;font-size:16px;">确认对选中的盘点单执行生效,更改库存数量吗?</span></br>注:确认生效后,库存正式更改为盘点数量(此操作不可逆!)';
+	var confirmMsg = '<span style="color:red;font-size:16px;">确认对选中的盘点单执行完结吗?</span></br>注:完结仅为修改状态标识,不会修改库存数量,如需修改库存数量,请使用库存管理的移库功能。';
 	$.iMessager.confirm('操作提示', confirmMsg,function(a) {
 		if (!a) {
 			isSubmitIng = false;
@@ -331,4 +331,66 @@ function effect(){
 			isSubmitIng = false;
 		});
 	});
-}
+}
+
+
+
+//导出
+$("#export").iMenubutton({
+	menu:'#exportSubMenu',
+	btnCls: 'topjui-btn',
+	// hasDownArrow:true,
+	iconCls:'fa fa-file',
+	method:'',
+	onClick:function(){
+		var rows = getCheckedRowsData(myGrid.type, myGrid.id);//获取勾选中的行
+		if(rows == null || rows.length == 0){
+			$.iMessager.alert('提示', '请先勾选要导出的盘点数据', 'messager-info');
+			return false;
+		}
+		if(rows == null || rows.length != 1){
+			$.iMessager.alert('提示', '只可以导出一行盘点数据', 'messager-info');
+			return false;
+		}
+		var id=rows[0].id;
+
+		var exportDataStr = JSON.stringify({id:id});
+		$.iMessager.progress({text: '正在导出中....'});
+		//执行下载
+		$.ajax({
+			method:"POST",
+			url: "/inventory/inventoryCheck/export",
+			data: exportDataStr,
+			dataType:"json",
+			contentType:"application/json",
+			success: function(result){
+				$.iMessager.progress('close');
+				if(result.code !=0 ){// 如果result不是成功
+					$.iMessager.alert('操作提示', result.msg, 'messager-info');
+					return;
+				}
+
+				$.iMessager.show({title: '温馨提示',msg:'正在下载文件:'+ result.msg,timeout:4000}); // 右下角提示信息
+				window.open(result.msg)
+			}
+		});
+
+	}
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 1 - 0
wms-operate/src/main/resources/static/ui/js/inventory/check/checkDetail/list.js

@@ -155,6 +155,7 @@ $("#edit").iMenubutton({
 			var row = getSelectedRowData(myGrid.type, myGrid.id);// 获取选中的行
 			console.log(row)
 			$("#checkQty").val(row.checkQty);
+			$("#sysQty").val(row.sysQty);
 			$("#checkId").val(row.id);
 		}
 	}

+ 1 - 0
wms-operate/src/main/resources/static/ui/js/inventory/move/random/list.js

@@ -20,6 +20,7 @@ $("#myGrid").iDatagrid({
     	 {field: 'qtyMvOn',width:'100px', title: '上架数量'},
     	 
     	 {field: 'onShelfDetail',width:'200px', title: '上架详情'},
+		{field: 'remark',width:'200px', title: '移库原因'},
     	 
     	 {field: 'createdTime',width:'150px', title: '创建时间',formatter:function(value, row, index){ 
     	     return fmtDateTime(row.createdTime);

+ 9 - 2
wms-operate/src/main/resources/static/ui/js/inventory/move/random/main.js

@@ -2,7 +2,7 @@ $(function() {
 	cleanAll();
 
 	listenEnterAndFocusNext("outShelfLocationCode","barcode");
-	
+	listenEnterAndFocusNext("transResult","onShelfLocationCode");
 	/**
 	 * 商品条码回车之后请求后台数据
 	 */
@@ -30,7 +30,7 @@ $(function() {
 			return
 		}
 		
-		$("#onShelfLocationCode").focus();
+		$("#transResult").focus();
 	})
 
 	/**
@@ -148,6 +148,7 @@ function submitInventoryMv() {
 	var barcode = $("#barcode").val();
 	var onShelfLocationCode = $("#onShelfLocationCode").val();
 	var qty = $("#qty").val();
+	var transResult = $("#transResult").val();
 
 	var msgBody = {};
 	msgBody.outShelfLocationCode = outShelfLocationCode;
@@ -155,6 +156,7 @@ function submitInventoryMv() {
 	msgBody.onShelfLocationCode = onShelfLocationCode;
 	msgBody.outShelfInventoryId = outShelfInventoryId;
 	msgBody.qty = qty;
+	msgBody.transResult = transResult;
 
 	//序列化成字符串
 	var msgBodyStr = JSON.stringify(msgBody)
@@ -174,6 +176,11 @@ function submitInventoryMv() {
 		isSubmintIng = false;
 		return;
 	}
+	if(transResult == null || transResult == '') {
+		$.iMessager.show({title: '温馨提示',msg:'请输入转移原因',timeout:2000}); //右下角提示信息
+		isSubmintIng = false;
+		return;
+	}
 	if(onShelfLocationCode == outShelfLocationCode) {
 		$.iMessager.show({title: '温馨提示',msg:'下架库位号跟上架库位号不能相同',timeout:2000}); //右下角提示信息
 		isSubmintIng = false;

+ 15 - 14
wms-operate/src/main/resources/static/ui/js/outstock/boxed/outBoxed/main.js

@@ -23,16 +23,16 @@ $(function(){
 	 	}  
 	});	
 	
-	//是否自动提交
-	$("#isAutoSubBox").click(function(){
-		if ($("#isAutoSubBox").is(":checked")) {
-			$("#productQty").attr("readonly","readonly");
-			$("#productQty").val("1");//扫描提交,固定为1
-		}else{
-			$("#productQty").removeAttr("readonly");
-			$("#productQty").val("");//清空数量,由人工输入
-		}
-	});
+	// //是否自动提交
+	// $("#isAutoSubBox").click(function(){
+	// 	if ($("#isAutoSubBox").is(":checked")) {
+	// 		// $("#productQty").attr("readonly","readonly");
+	// 		// $("#productQty").val("1");//扫描提交,固定为1
+	// 	}else{
+	// 		$("#productQty").removeAttr("readonly");
+	// 		$("#productQty").val("");//清空数量,由人工输入
+	// 	}
+	// });
 	
 	//提交出库单号
     $('#outOrderNo').keyup(function (event) {
@@ -259,11 +259,12 @@ function refreshItems(){
     			}
     			
     			var tr = "<tr style='height: 15px;' id='item_"+item.id+"'>";
-	    			tr += "<th><div style='width:160px;overflow: auto;'>"+item.sku+"</div></th>";
-	    			tr += "<th><div style='width:180px;overflow: auto;'>"+item.barcode+"</div></th>";
+	    			tr += "<th><div style='width:140px;overflow: auto;'>"+item.sku+"</div></th>";
+	    			tr += "<th><div style='width:140px;overflow: auto;'>"+item.barcode+"</div></th>";
+					tr += "<th><div style='width:140px;overflow: auto;'>"+item.productName+"</div></th>";
 	    			tr += "<th><div style='width:80px;overflow: hidden;'>"+item.totalQty+"</div></th>";
-	    			tr += "<th><div style='width:90px;overflow: hidden;'>"+item.boxedQty+"</div></th>";
-	    			tr += "<th><div style='width:90px;overflow: hidden;'>"+waitBoxQty+"</div></th>";
+	    			tr += "<th><div style='width:80px;overflow: hidden;'>"+item.boxedQty+"</div></th>";
+	    			tr += "<th><div style='width:80px;overflow: hidden;'>"+waitBoxQty+"</div></th>";
     			tr += "</tr>";
     			
     			$("#itemList").append(tr);

+ 3 - 1
wms-operate/src/main/resources/static/ui/views/inventory/check/check/list.html

@@ -60,7 +60,9 @@
 			
 			<a id="confirm" href="javascript:void(0)" style="width: 85px;">确认差异</a>
 			
-			<a id="effect" href="javascript:void(0)" style="width: 85px;">生效</a>
+			<a id="effect" href="javascript:void(0)" style="width: 85px;">完结</a>
+
+			<a id="export"  href="javascript:void(0)" style="width: 85px;">导出</a>
 		</div>		
 	</div>
     <!-- 表格工具栏结束 -->

+ 24 - 0
wms-operate/src/main/resources/static/ui/views/inventory/check/checkDetail/updateCheckQty.html

@@ -0,0 +1,24 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
+<form id="updateCheckQtyFormId" style="float: left">
+    <input type="hidden" id="checkId" name="checkId">
+    <table class="editTable">
+        <tr>
+            <td class="label">原系统数量</td>
+            <td>
+                <input type="text" data-toggle="topjui-numberspinner" id="sysQty" name="sysQty" data-options="width:450" readonly="readonly">
+            </td>
+        </tr>
+        <tr>
+            <td class="label">原盘点数量</td>
+            <td>
+                <input type="text" data-toggle="topjui-numberspinner" id="checkQty" name="checkQty" data-options="width:450" readonly="readonly">
+            </td>
+        </tr>
+        <tr>
+            <td class="label">新盘点数量</td>
+            <td>
+                <input type="text" data-toggle="topjui-numberspinner" id="newCheckQty" name="newCheckQty" data-options="required:true,width:450,prompt:'请填写数字'"></td>
+            </td>
+        </tr>
+    </table>
+</form>

+ 8 - 1
wms-operate/src/main/resources/static/ui/views/inventory/move/random/main.html

@@ -108,7 +108,14 @@
 	                <input type="number" class="form-control allowClear wd220" id="qty"  placeholder="输入后请按回车">
 	            </th>
 	        </tr>
-	
+			<tr>
+				<th class="wd120">
+					<span class="btn btn-default wd120">转移原因</span>
+				</th>
+				<th>
+					<input type="text" class="form-control allowClear wd220" id="transResult"  placeholder="输入后请按回车">
+				</th>
+			</tr>
 	        <tr>
 	            <th class="wd120">
 	                <span class="btn btn-default wd120">上架库位</span>

+ 12 - 11
wms-operate/src/main/resources/static/ui/views/outstock/boxed/outBoxed/main.html

@@ -61,8 +61,8 @@
 	</style>
 </head>
 <body style="font-size: 16px;padding-top: 10px;">
-	<div  class="pull-left wd750" style="margin-left: 10px;height:800px;">
-		<div class="pull-left badge badge-success" style="width:120px;font-weight: bold; color: white;background-color: #669533;">1扫描单号</div>
+	<div  class="pull-left wdAll" style="margin-left: 10px;height:800px;">
+		<div class="badge badge-success" style="width:120px;font-weight: bold; color: white;background-color: #669533;">1扫描单号</div>
 		<table class="table wd750" style="margin-top: 0px;padding-bottom: 5px;">
 			<tr>
 				<th class="wd220"  style="padding-top: 5px;padding-bottom: 2px;">
@@ -112,7 +112,7 @@
 			</tr>			
 		</table>
 
-		<div class="pull-left badge badge-success" style="width:120px;font-weight: bold; color: white;background-color: #669533;">2扫描箱号</div>			
+		<div class="badge badge-success" style="width:120px;font-weight: bold; color: white;background-color: #669533;">2扫描箱号</div>
 		<table class="table wd750" style="margin-top: 0px;padding-bottom: 0px;">
 			<tr>
 				<th class="wd120" style="padding-bottom: 0px;">
@@ -132,7 +132,7 @@
 			</tr>
 		</table>
 							
-		<div class="pull-left badge badge-success" style="width:120px;font-weight: bold; color: white;background-color: #669533;margin-top:-10px;">3扫描商品</div>			
+		<div class="badge badge-success" style="width:120px;font-weight: bold; color: white;background-color: #669533;margin-top:-10px;">3扫描商品</div>
 		<table class="table wd750" style="margin-top: 0px;padding-bottom: 0px;">
 			<tr>
 				<th  class="wd120" style="padding-bottom: 10px;">
@@ -164,17 +164,18 @@
 		</table>
 		
 		<div style="width: 100%;max-height: 402px;margin-top: -10px;overflow-x: hidden;overflow-y:auto;">
-			<table  class="table"  style="margin-top: 0px;margin-left:8px;width:734px; height: auto;" rules="all" border="1px" >
+			<table  class="table wd1020"  style="margin-top: 0px;margin-left:8px;width:950px; height: auto;" rules="all" border="1px" >
 	 			<thead>
 	 				<tr>
-	 					<th colspan="5" style="color: red;font-weight: bold;font-size: 7pt;text-align: left;height:7px;line-height:7px">下架商品的复核装箱情况</th>
+	 					<th colspan="6" style="color: red;font-weight: bold;font-size: 7pt;text-align: left;height:7px;line-height:7px">下架商品的复核装箱情况</th>
 	 				</tr>
 					<tr style="height: 8px;">
-		 				<th><div style="text-align: left;font-size: 8pt;width:150px;height: 8px;line-height: 8px">商品SKU</div></th>
-		 				<th><div style="text-align: left;font-size: 8pt;width: 150px;height: 8px;line-height: 8px">条码</div></th>
-		 				<th><div style="text-align: center;font-size: 8pt;width:100px;height: 8px;line-height: 8px">总数</div></th>
-		 				<th><div style="text-align: center;font-size: 8pt;width:100px;height: 8px;line-height: 8px">已装箱数</div></th>
-		 				<th><div style="text-align: center;font-size: 8pt;width:100px;height: 8px;line-height: 8px">待装箱数</div></th>
+		 				<th><div style="text-align: left;font-size: 8pt;width:140px;height: 8px;line-height: 8px">商品SKU</div></th>
+		 				<th><div style="text-align: left;font-size: 8pt;width: 140px;height: 8px;line-height: 8px">条码</div></th>
+						<th><div style="text-align: left;font-size: 8pt;width: 140px;height: 8px;line-height: 8px">商品名称</div></th>
+		 				<th><div style="text-align: center;font-size: 8pt;width:80px;height: 8px;line-height: 8px">总数</div></th>
+		 				<th><div style="text-align: center;font-size: 8pt;width:80px;height: 8px;line-height: 8px">已装箱数</div></th>
+		 				<th><div style="text-align: center;font-size: 8pt;width:80px;height: 8px;line-height: 8px">待装箱数</div></th>
 		 			</tr> 			
 	 			</thead>
 	 			<tbody id="itemList">

+ 6 - 5
wms-operate/src/main/resources/static/ui/views/outstock/wave/outWave/print/printWaveAndOrderNew.html

@@ -209,27 +209,28 @@
 					</td>
 					<td style="width:36mm;text-align: center;overflow: ">
 						<div style="width:36mm;">
-							${outShelfed.productName}
+							<%=data[i].alreadyOutShelfList[j].productName%>
 						</div>
 					</td>
 					<td style="width:20mm;text-align: center;overflow: ">
 						<div style="width:20mm;">
-							${outShelfed.model}
+							<%=data[i].alreadyOutShelfList[j].model%>
 						</div>
 					</td>
 					<td style="width:36mm;font-size: 16px;text-align: center;">
 						<div style="width:36mm;">
-							<b>${outShelfed.locationCode}</b>
+							<b>
+								<%=data[i].alreadyOutShelfList[j].locationCode%></b>
 						</div>
 					</td>
 					<td style="width:15mm;text-align: center;">
 						<div style="width:15mm;">
-							${outShelfed.quantity}
+							<%=data[i].alreadyOutShelfList[j].quantity%>
 						</div>
 					</td>
 					<td style="width:25mm;text-align: center;overflow: ">
 						<div style="width:25mm;">
-							${outShelfed.extend4}
+							<%=data[i].alreadyOutShelfList[j].extend4%>
 						</div>
 					</td>
 				</tr>

+ 6 - 5
wms-operate/src/main/resources/static/ui/views/outstock/wave/outWave/print/printWaveNew.html

@@ -207,27 +207,28 @@
 							</td>
 							<td style="width:36mm;text-align: center;overflow: ">
 								<div style="width:36mm;">
-									${outShelfed.productName}
+									<%=data[i].alreadyOutShelfList[j].productName%>
 								</div>
 							</td>
 							<td style="width:20mm;text-align: center;overflow: ">
 								<div style="width:20mm;">
-									${outShelfed.model}
+									<%=data[i].alreadyOutShelfList[j].model%>
 								</div>
 							</td>
 							<td style="width:36mm;font-size: 16px;text-align: center;">
 								<div style="width:36mm;">
-									<b>${outShelfed.locationCode}</b>
+									<b>
+										<%=data[i].alreadyOutShelfList[j].locationCode%></b>
 								</div>
 							</td>
 							<td style="width:15mm;text-align: center;">
 								<div style="width:15mm;">
-									${outShelfed.quantity}
+									<%=data[i].alreadyOutShelfList[j].quantity%>
 								</div>
 							</td>
 							<td style="width:25mm;text-align: center;overflow: ">
 								<div style="width:25mm;">
-									${outShelfed.extend4}
+									<%=data[i].alreadyOutShelfList[j].extend4%>
 								</div>
 							</td>
 						</tr>