Browse Source

出运明细优化

zengtx 2 years ago
parent
commit
a589c5fbda

+ 64 - 75
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/controller/SyShippingDetailsController.java

@@ -115,17 +115,20 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 	@AutoLog(value = "发运明细主表-分页列表查询")
 	@ApiOperation(value="发运明细主表-分页列表查询", notes="发运明细主表-分页列表查询")
 	@GetMapping(value = "/list")
-	public Result<IPage<SyShippingDetailsVo>> queryPageList(SyShippingDetailsVo syShippingDetails, String startTime, String endTime, String flourOrGarment,
+	public Result<IPage<QueryShippingVo>> queryPageList(SyShippingDetailsVo syShippingDetails, String startTime, String endTime, String flourOrGarment,
 														String refer, String preDeliveryDateB, String preDeliveryDateE, String supplier, String isElement,
 														@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
 														@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
 														HttpServletRequest req) {
 
-		Result<IPage<SyShippingDetailsVo>> result = new Result<IPage<SyShippingDetailsVo>>();
+		Result<IPage<QueryShippingVo>> result = new Result<IPage<QueryShippingVo>>();
+
+		Page<QueryShippingVo> page = new Page<QueryShippingVo>(1, -1);
+		IPage<QueryShippingVo> pageList = null;
          //列表合计
-		 Double amountTo = 0.0000;
+		 BigDecimal amountTo = BigDecimal.ZERO;
 
-		QueryWrapper<SyShippingDetailsVo> queryWrapper = new QueryWrapper<>();
+		QueryWrapper<QueryShippingVo> queryWrapper = new QueryWrapper<>();
 		SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
 		if(oConvertUtils.isNotEmpty(syShippingDetails.getDocumentNo())){
 			queryWrapper.like("a.document_no",syShippingDetails.getDocumentNo());
@@ -200,31 +203,17 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 			queryWrapper.in("b.small_po",asList);
 		}
 
-		Page<SyShippingDetailsVo> page = new Page<SyShippingDetailsVo>(1, -1);
-		IPage<SyShippingDetailsVo> pageList;
+
 		if (flourOrGarment.equals("0")) { // 面辅料
 			queryWrapper.eq("1", 1);
-			pageList = syShippingDetailsService.queryShippingDetailsGarment(page, queryWrapper);
+			pageList = syShippingDetailsMapper.queryShippingDetailsGarmentCeshi(page, queryWrapper);
 		} else { // 成衣
 			queryWrapper.eq("1", 1);
-			pageList = syShippingDetailsService.queryShippingDetails(page, queryWrapper);
+			pageList = syShippingDetailsMapper.queryShippingDetailsCeshi(page, queryWrapper);
 		}
          // 计算总合计数量
-		amountTo = pageList.getRecords().stream().mapToDouble(SyShippingDetailsVo::getShipmentQuantity).sum();
-
-        // 对查询结果按 createTime 逆序排序
-		pageList.setRecords(pageList.getRecords().stream().sorted(Comparator.comparing(SyShippingDetailsVo::getCreateTime).reversed()).collect(Collectors.toList()));
+		amountTo = pageList.getRecords().stream().map(QueryShippingVo::getShipmentQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
 
-//		List<QueryShippingVo> voList = new ArrayList<>();
-//		for(SyShippingDetailsVo vo:pageList.getRecords()){
-//			QueryShippingVo entity = new QueryShippingVo();
-//			BeanUtils.copyProperties(vo,entity);
-//			voList.add(entity);
-//		}
-		Page<QueryShippingVo> page1 = new Page<QueryShippingVo>(1, -1);
-		//IPage<QueryShippingVo> voList1 = new I;
-		//voList1.setRecords(voList);
-		//page1.setRecords(voList);
 		result.setResult(pageList);
 		result.setSuccess(true);
 
@@ -351,11 +340,15 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 //			result.setSuccess(false);
 //			return result;
 //		}
+
+		List<String> idList = new ArrayList<>();
+		idList.add(id);
+
 		String idsSplit[] = itemIds.split(",");
 		for(String str:idsSplit){
 			strList.add(str);
 		}
-		int size = syShippingDetailsService.syShippingDetailsDelete(id,strList);
+		int size = syShippingDetailsService.syShippingDetailsDelete(idList,strList);
 		if(size>0){
 			result.setSuccess(true);
 			result.setMessage("删除成功");
@@ -381,9 +374,14 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 			throw new JeecgBootException("为获取到勾选数据ID!");
 		}
 
+        // 使用HashSet对List进行去重
+		Set<String> uniqueSet = new HashSet<>(syShippingDetails.getIds());
+
+		// 创建一个新的List,将去重后的元素重新添加进去
+		List<String> deduplicatedList = new ArrayList<>(uniqueSet);
+
 		//获取子表ID
         List<String> itemIds = new ArrayList<>();
-
 		for(String li:syShippingDetails.getItemId()){
 			String idsSplit[] = li.split(",");
 			for(String id :idsSplit){
@@ -398,20 +396,21 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 			throw new JeecgBootException("部分单据已提交,不允许删除!");
 		}
 
-		int ii = 0;
-		for(String str :syShippingDetails.getIds()){
-
-			List<String> itenIdList = new ArrayList<>();
-
-			List<String> strList = syShippingDetails.getItemId();
-			String idIndex = strList.get(ii);
-			String split[] = idIndex.split(",");
-			for(String sr : split){
-				itenIdList.add(sr);
-			}
-			syShippingDetailsService.syShippingDetailsDelete(str,itenIdList);
-			ii++;
-		}
+		syShippingDetailsService.syShippingDetailsDelete(deduplicatedList,itemIds);
+//		int ii = 0;
+//		for(String str :syShippingDetails.getIds()){
+//
+//			List<String> itenIdList = new ArrayList<>();
+//
+//			List<String> strList = syShippingDetails.getItemId();
+//			String idIndex = strList.get(ii);
+//			String split[] = idIndex.split(",");
+//			for(String sr : split){
+//				itenIdList.add(sr);
+//			}
+//
+//			ii++;
+//		}
 		result.setSuccess(true);
 		result.setMessage("删除成功");
 		result.setResult(1);
@@ -599,6 +598,11 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 					result.setMessage("报关要素未维护,不允许导出!");
 					return result;
 				}
+				  if(li.getSubmitStatus().equals("0")){
+					  result.setSuccess(false);
+					  result.setMessage("有未提交数据,不允许导出");
+					  return result;
+				  }
 				  if(oConvertUtils.isEmpty(li.getGarmentFactory())){
 					  li.setGarmentFactory(" ");
 				  }
@@ -672,7 +676,11 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 					  result.setSuccess(false);
 					  result.setMessage("报关要素未维护,不允许导出!");
 					  return result;
-
+				  }
+				  if(li.getSubmitStatus().equals("0")){
+					  result.setSuccess(false);
+					  result.setMessage("有未提交数据,不允许导出");
+					  return result;
 				  }
 				  String pre = sf.format(li.getPreDeliveryDate());
 				  //用到货日期代替一下预发货日期
@@ -949,25 +957,18 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 		  List<String> submitListId = syShippingDetails.getGrouyIdList();
 		  for(String str:submitListId ){
 			  idsList.add(str);
-//		  	String idsArray[] = str.split(",");
-//
-//		  	for(String arr:idsArray){
-//				idsList.add(arr);
-//			}
 		  }
 
-
-		  //查询是否已提交
-		  QueryWrapper<SyShippingDetailsItem> itemQueryWrapper = new QueryWrapper<>();
-		  itemQueryWrapper.in("id",idsList).eq("submit_status","0");
-		  List<SyShippingDetailsItem> list = syShippingDetailsItemService.list(itemQueryWrapper);
 			  if(syShippingDetails.getType().equals("1")) {
+
+				  Set<String> seenData = new HashSet<>();
+
+				  //查询未提交数据
+				  QueryWrapper<SyShippingDetailsItem> itemQueryWrapper = new QueryWrapper<>();
+				  itemQueryWrapper.in("id",idsList).eq("submit_status","0");
+				  List<SyShippingDetailsItem> list = syShippingDetailsItemService.list(itemQueryWrapper);
+
 				  for (SyShippingDetailsItem li : list) {
-//					  if (li.getSubmitStatus() == 1) {
-//						  result.setSuccess(false);
-//						  result.setMessage("部分单据已提交,请勿重复提交!");
-//						  return result;
-//					  }
 
 					  //判断是不是辅料数据,如果是不必维护一下内容
 					  String code = li.getInventoryCcode().substring(0,2);
@@ -975,7 +976,6 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 					  if(li.getInventoryCcode().length() >= 4){
 						  code1 = li.getInventoryCcode().substring(0,4);
 					  }
-
 					  if(!code.equals("04") && !code.equals("05")&& !code.equals("06")&& !code.equals("07")&& !code1.equals("0299")&& !code1.equals("0399")&& !code1.equals("0499")){
 						  //判断物料成份。isTc、款号是否为空,为空不允许提交
 						  if(oConvertUtils.isEmpty(li.getItemNumber()) || oConvertUtils.isEmpty(li.getMaterialComposition()) || oConvertUtils.isEmpty(li.getIsTc())){
@@ -984,29 +984,18 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
 							  return result;
 						  }
 					  }
-
-					  
-				  }
-				  //判断重复自由项数据
-				  for (String str : syShippingDetails.getGrouyIdList()) {
-					  Set<String> seenData = new HashSet<>();
-					  QueryWrapper<SyShippingDetailsItem> queryWrapper = new QueryWrapper<>();
-					  queryWrapper.in("group_id", str).eq("del_flag", 0);
-					  List<SyShippingDetailsItem> groupList = syShippingDetailsItemService.list(queryWrapper);
-
-					  for (SyShippingDetailsItem item : groupList) {
-						  String key = generateKey(item);
-						  if (seenData.contains(key)) {
-							  result.setSuccess(false);
-							  result.setMessage("第" + count + "条里面有重复数据,无法提交");
-							  return result;
-						  }
-						  seenData.add(key);
+					  //判断重复自由项数据
+					  String key = generateKey(li);
+					  if (seenData.contains(key)) {
+						  result.setSuccess(false);
+						  result.setMessage("第" + count + "条里面有重复数据,无法提交");
+						  return result;
 					  }
-
+					  seenData.add(key);
 					  count++;
 				  }
 
+
 			  }else{
 
 			  	  List<String> taId = new ArrayList<>();
@@ -1067,7 +1056,7 @@ public class SyShippingDetailsController extends JeecgController<SyShippingDetai
   //处理拼接
 	 private String generateKey(SyShippingDetailsItem item) {
 		 // 根据需要拼接一个唯一标识字符串,用于比较
-		 return item.getSmallPo() + item.getOrderNumber() + item.getPreDeliveryDate() + item.getPreCompletionDate()
+		 return item.getGroupId()+item.getSmallPo() + item.getOrderNumber() + item.getPreDeliveryDate() + item.getPreCompletionDate()
 				 + item.getItemNumber() + item.getInventoryCode() + item.getColour() + item.getSize()
 				 + item.getGuangpeiGateWidth() + item.getWeight() + item.getCodingRules();
 	 }

+ 11 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/entity/VO/QueryShippingVo.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
+import java.math.BigDecimal;
+
 @Data
 public class QueryShippingVo {
 
@@ -69,7 +71,7 @@ public class QueryShippingVo {
     /**发货数量*/
     @Excel(name = "发货数量", width = 15)
     @ApiModelProperty(value = "发货数量")
-    private Double shipmentQuantity;
+    private BigDecimal shipmentQuantity;
 
     /**报关单价*/
     @Excel(name = "报关单价", width = 15)
@@ -127,12 +129,18 @@ public class QueryShippingVo {
     @ApiModelProperty(value = "状态")
     private String submitStatus;
 
-    //0-面辅料/1-成衣
-    private String flourOrGarment;
+    @ApiModelProperty(value = "物料分类")
+    private String inventoryCcode;
+
+
+
+
     //报关要素主表ID
     private String elementsId;
     //分组id
     private String groupId;
 
+    //创建时间
+    private String createTime;
 
 }

+ 7 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/mapper/SyShippingDetailsMapper.java

@@ -28,9 +28,16 @@ public interface SyShippingDetailsMapper extends BaseMapper<SyShippingDetails> {
     //发运明细分页列表查询 -成衣的
     public IPage<SyShippingDetailsVo> queryShippingDetails(IPage<SyShippingDetailsVo> page, @Param("ew") QueryWrapper<SyShippingDetailsVo> queryWrapper);
 
+    //发运明细分页列表查询 -成衣的
+    public IPage<QueryShippingVo> queryShippingDetailsCeshi(IPage<QueryShippingVo> page, @Param("ew") QueryWrapper<QueryShippingVo> queryWrapper);
+
+
     //发运明细分页列表查询 -面辅料的
     public IPage<SyShippingDetailsVo> queryShippingDetailsGarment(IPage<SyShippingDetailsVo> page, @Param("ew") QueryWrapper<SyShippingDetailsVo> queryWrapper);
 
+    //发运明细分页列表查询 -面辅料的
+    public IPage<QueryShippingVo> queryShippingDetailsGarmentCeshi(IPage<QueryShippingVo> page, @Param("ew") QueryWrapper<QueryShippingVo> queryWrapper);
+
     //子表删除
     public void syshippingDetailsItemUpdate(@Param("shippingDetailsId") String shippingDetailsId);
 

+ 45 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/mapper/xml/SyShippingDetailsMapper.xml

@@ -95,6 +95,29 @@ GROUP BY b.group_id
 
 </select>
 
+
+    <select id="queryShippingDetailsCeshi" resultType="org.jeecg.modules.documents.shippingDetails.entity.VO.QueryShippingVo">
+    select e.declaration_name as declarationName,e.hs_code as hsCode,e.english_product_name as englishProductName,
+    a.id as id,GROUP_CONCAT(b.id) as itemIds,a.document_no as documentNo,b.order_number as orderNumber,a.push_state,b.submit_status as submitStatus,
+    b.customer_abbreviation as customerAbbreviation,b.sales_department as salesDepartment,b.salesman as salesman,
+    b.small_po as smallPo,b.pack_id as packId,b.pre_delivery_date as preDeliveryDate,b.inventory_ccode as inventoryCcode,
+    sum(b.shipment_quantity) as shipmentQuantity,b.customs_declaration_unit_price as customsDeclarationUnitPrice,
+    b.is_tc as isTc,b.distribution_point as distributionPoint,b.item_number as itemNumber,b.number_of_sets as numberOfSets,
+    b.inventory_name as inventoryName,
+    b.pur_or_sub_order as purOrSubOrder,
+    b.material_composition as materialComposition,
+    b.account as account,
+    b.garment_factory as garmentFactory,b.elements_id as elementsId,b.group_id as groupId
+     from sy_shipping_details_item b
+left join sy_shipping_details a
+on a.id = b.shipping_details_id and a.del_flag = 0 and b.del_flag = 0
+left join sy_declaration_elements e  on b.elements_id = e.id
+${ew.customSqlSegment} and  b.inventory_ccode LIKE '19%'
+GROUP BY b.group_id
+
+</select>
+
+
     <select id="queryShippingDetailsGarment" resultType="org.jeecg.modules.documents.shippingDetails.entity.VO.SyShippingDetailsVo">
     select e.declaration_name as declarationName,e.hs_code as hsCode,e.english_product_name as englishProductName,a.create_time as createTime,b.is_reference as isReference,a.id as id,GROUP_CONCAT(b.id) as itemIds,a.document_no as documentNo,a.document_date as documentDate,b.order_number as orderNumber,a.push_state,b.submit_status as submitStatus,
     b.customer_abbreviation as customerAbbreviation,b.sales_department as salesDepartment,b.salesman as salesman,a.customer as customer,b.specification_and_model as specificationAndModel,
@@ -124,6 +147,28 @@ ${ew.customSqlSegment}
 and a.del_flag = 0  and b.inventory_ccode not LIKE '19%'
 GROUP BY b.group_id
 
+</select>
+
+    <select id="queryShippingDetailsGarmentCeshi" resultType="org.jeecg.modules.documents.shippingDetails.entity.VO.QueryShippingVo">
+    select e.declaration_name as declarationName,e.hs_code as hsCode,e.english_product_name as englishProductName,
+    a.id as id,GROUP_CONCAT(b.id) as itemIds,a.document_no as documentNo,b.order_number as orderNumber,a.push_state,b.submit_status as submitStatus,
+    b.customer_abbreviation as customerAbbreviation,b.sales_department as salesDepartment,b.salesman as salesman,
+    b.small_po as smallPo,b.pack_id as packId,b.pre_delivery_date as preDeliveryDate,b.inventory_ccode as inventoryCcode,
+    sum(b.shipment_quantity) as shipmentQuantity,b.customs_declaration_unit_price as customsDeclarationUnitPrice,
+    b.is_tc as isTc,b.distribution_point as distributionPoint,b.item_number as itemNumber,b.number_of_sets as numberOfSets,
+    b.inventory_name as inventoryName,
+    b.pur_or_sub_order as purOrSubOrder,
+    b.material_composition as materialComposition,
+    b.account as account,
+    b.garment_factory as garmentFactory,b.elements_id as elementsId,b.group_id as groupId
+     from sy_shipping_details_item b
+left join sy_shipping_details a
+on a.id = b.shipping_details_id and a.del_flag = 0 and b.del_flag = 0
+left join sy_declaration_elements e  on b.elements_id = e.id
+${ew.customSqlSegment}
+ and b.inventory_ccode not LIKE '19%'
+GROUP BY b.group_id order by a.create_time desc
+
 </select>
     
     <update id="syshippingDetailsItemUpdate">

+ 2 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/service/ISyShippingDetailsService.java

@@ -30,8 +30,6 @@ public interface ISyShippingDetailsService extends IService<SyShippingDetails> {
     //发运明细分页列表查询 --成衣的
     public IPage<SyShippingDetailsVo> queryShippingDetails(IPage<SyShippingDetailsVo> page, QueryWrapper<SyShippingDetailsVo> queryWrapper);
 
-    //发运明细分页列表查询 --成衣的
-  //  public IPage<QueryShippingVo> queryShippingDetailsCeshi(IPage<QueryShippingVo> page, QueryWrapper<QueryShippingVo> queryWrapper);
 
     //发运明细分页列表查询 -面辅料的
     public IPage<SyShippingDetailsVo> queryShippingDetailsGarment(IPage<SyShippingDetailsVo> page, QueryWrapper<SyShippingDetailsVo> queryWrapper);
@@ -39,8 +37,8 @@ public interface ISyShippingDetailsService extends IService<SyShippingDetails> {
     //修改发运明细
     public SyShippingDetails syShippingDetailsEdit(SyShippingDetails syShippingDetails);
 
-    //发运明细删除
-    public int syShippingDetailsDelete(String id,List<String> itemId);
+    //发运明细批量删除
+    public int syShippingDetailsDelete(List<String> idList,List<String> itemId);
 
     //发运明细子表删除
     public void syshippingDetailsItemUpdate(String shippingDetailsId);

+ 36 - 25
jeecg-boot-module-system/src/main/java/org/jeecg/modules/documents/shippingDetails/service/impl/SyShippingDetailsServiceImpl.java

@@ -30,9 +30,8 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 发运明细主表
@@ -277,11 +276,11 @@ public class SyShippingDetailsServiceImpl extends ServiceImpl<SyShippingDetailsM
 
     /**
      * 发运明细删除
-     * @param id
+     * @param idList
      * @return
      */
     @Override
-    public int syShippingDetailsDelete(String id,List<String> itemIds) {
+    public int syShippingDetailsDelete(List<String> idList,List<String> itemIds) {
 
 
         //根据itemIds查询子表信息
@@ -289,39 +288,51 @@ public class SyShippingDetailsServiceImpl extends ServiceImpl<SyShippingDetailsM
         queryWrapper.in("id", itemIds).eq("del_flag", 0);
         List<SyShippingDetailsItem> list = syShippingDetailsItemService.list(queryWrapper);
 
+        // 批量查询订单信息
+        List<String> orderIds = list.stream()
+                .map(SyShippingDetailsItem::getSyOrderDataItemId)
+                .collect(Collectors.toList());
+        List<SyOrderDataItem> orderDataItemList = syOrderDataItemService.listByIds(orderIds);
+
         if (!list.isEmpty()) {
-            // 回写销售订单剩余数量和删除子表
-            List<SyOrderDataItem> orderDataItemList = new ArrayList<>();
+            // 建立订单ID到子表项的映射
+            Map<String, SyOrderDataItem> orderItemMap = new HashMap<>();
+            for (SyOrderDataItem orderDataItem : orderDataItemList) {
+                orderItemMap.put(orderDataItem.getId(), orderDataItem);
+            }
+
+            // 批量更新订单剩余数量
+            List<SyOrderDataItem> updatedOrderDataItemList = new ArrayList<>();
             for (SyShippingDetailsItem li : list) {
-                SyOrderDataItem orderDataItem = syOrderDataItemService.getById(li.getSyOrderDataItemId());
+                SyOrderDataItem orderDataItem = orderItemMap.get(li.getSyOrderDataItemId());
                 if (orderDataItem != null) {
                     BigDecimal surplusNum = orderDataItem.getSurplusNum().add(li.getShipmentQuantity());
                     orderDataItem.setSurplusNum(surplusNum);
-                    orderDataItemList.add(orderDataItem);
+                    updatedOrderDataItemList.add(orderDataItem);
                 }
             }
-            if (!orderDataItemList.isEmpty()) {
-                syOrderDataItemService.updateBatchById(orderDataItemList);
-            }
+            syOrderDataItemService.updateBatchById(updatedOrderDataItemList);
+
+            // 批量删除子表数据
             syShippingDetailsItemService.removeByIds(itemIds);
         }
 
-        //查询子表条数
-        QueryWrapper<SyShippingDetailsItem> queryWrapperItem1 = new QueryWrapper<>();
-        queryWrapperItem1.in("shipping_details_id", id).eq("del_flag", 0);
-        int count = syShippingDetailsItemService.count(queryWrapperItem1);
-
-        if (count == 0) {
-            SyShippingDetails syShippingDetails = getById(id);
-            //删除主表
-            syShippingDetails.setDelFlag("1");
-            boolean updated = updateById(syShippingDetails);
-            if (updated) {
-                return 1;
+        List<String> idsToDelete = new ArrayList<>();
+        // 查询子表条数
+        for(String str:idList){
+            int count = syShippingDetailsItemService.count(new QueryWrapper<SyShippingDetailsItem>()
+                    .eq("shipping_details_id", str)
+                    .eq("del_flag", 0));
+            if( count == 0 ){
+                idsToDelete.add(str);
             }
         }
+        // 删除没有查询到的子表数据
+        if (!idsToDelete.isEmpty()) {
+            this.removeByIds(idsToDelete);
+        }
 
-        return 0;
+        return 1;
     }