Commit 9ef590f4e31d3ca742c5e0f82d5699bf94d0176e

Authored by DESKTOP-AO0VKC8\mahua
2 parents 935e3002 67b2164e

Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	src/main/resources/templates/config/receiptPreference/list.html
src/main/java/com/huaheng/pc/inventory/InventoryMaterialSummary/controller/InventoryMaterialSummaryController.java
... ... @@ -80,10 +80,9 @@ public class InventoryMaterialSummaryController extends BaseController {
80 80 .eq(StringUtils.isNotEmpty(inventoryMaterialSummary.getMaterialName()), InventoryMaterialSummary::getMaterialName, inventoryMaterialSummary.getMaterialName());
81 81 //.orderByAsc(InventoryMaterialSummary::getMaterialCode);
82 82  
83   -
84 83 List<InventoryMaterialSummary> list = inventoryMaterialSummaryService.list(lambdaQueryWrapper);
85 84 //筛选库存汇总数据的专用方法
86   - List<InventoryMaterialSummary> details = inventoryMaterialSummaryService.inventoryMaterialSummarySelect(list);
  85 + List<InventoryMaterialSummary> details = inventoryMaterialSummaryService.duplicateRemoval(list);
87 86 if (details == null) {
88 87 details = Collections.emptyList();
89 88 }
... ...
src/main/java/com/huaheng/pc/inventory/InventoryMaterialSummary/service/InventoryMaterialSummaryService.java
... ... @@ -8,10 +8,13 @@ import java.util.List;
8 8 public interface InventoryMaterialSummaryService extends IService<InventoryMaterialSummary> {
9 9  
10 10 /**
11   - * 查询库存汇总数据的专用方法
  11 + * 根据物料码去重及累加数量
12 12 * */
13 13 List<InventoryMaterialSummary> inventoryMaterialSummarySelect(List<InventoryMaterialSummary> inventoryMaterialSummaryList);
14 14  
15   -
  15 + /**
  16 + * 多条件去重及累加数量,货主,物料码
  17 + * */
  18 + List<InventoryMaterialSummary> duplicateRemoval(List<InventoryMaterialSummary> inventoryMaterialSummaryList);
16 19  
17 20 }
... ...
src/main/java/com/huaheng/pc/inventory/InventoryMaterialSummary/service/InventoryMaterialSummaryServiceImpl.java
... ... @@ -5,9 +5,9 @@ import com.huaheng.pc.inventory.InventoryMaterialSummary.domain.InventoryMateria
5 5 import com.huaheng.pc.inventory.InventoryMaterialSummary.mapper.InventoryMaterialSummaryMapper;
6 6 import org.springframework.stereotype.Service;
7 7  
8   -import java.util.ArrayList;
9   -import java.util.HashMap;
10   -import java.util.List;
  8 +import java.math.BigDecimal;
  9 +import java.util.*;
  10 +import java.util.stream.Collectors;
11 11  
12 12  
13 13 @Service
... ... @@ -19,31 +19,61 @@ public class InventoryMaterialSummaryServiceImpl extends ServiceImpl&lt;InventoryMa
19 19  
20 20  
21 21 /**
22   - * 筛选库存汇总数据的专用方法
  22 + * 根据物料码去重及累加数量
23 23 * */
24 24 @Override
25 25 public List<InventoryMaterialSummary> inventoryMaterialSummarySelect(List<InventoryMaterialSummary> inventoryMaterialSummaryList) {
26   -
27 26 /*以物料为条件把同物料数量全部相加,去重再展示*/
28 27  
  28 + //单物料条件,
29 29 HashMap<String, InventoryMaterialSummary> map = new HashMap<String, InventoryMaterialSummary>();
30 30 for (InventoryMaterialSummary bean : inventoryMaterialSummaryList) {
31   - //单物料条件,
32   - //货主和物料条件(!!!)
  31 + //map.containsKey()方法是判断该key在map中是否有该key值存在。如果存在则返回true。如果不存在则返回false
33 32 if (map.containsKey(bean.getMaterialCode())) {
34 33 bean.setQty(map.get(bean.getMaterialCode()).getQty().add(bean.getQty()));
35 34 }
  35 + //根据物料编码去重,hashMap的put方法不允许相同的键
36 36 map.put(bean.getMaterialCode(), bean);
37 37 }
38   -// inventorys.clear();//清空list
39 38 List<InventoryMaterialSummary> inventoryList = new ArrayList<>();
40 39 inventoryList.addAll(map.values());
41 40  
42 41 return inventoryList;
43 42 }
44 43  
45   -
46   -
  44 + /**
  45 + * 多条件去重
  46 + * 合并数量
  47 + * 多条件去重及累加数量,货主,物料码
  48 + * */
  49 + @Override
  50 + public List<InventoryMaterialSummary> duplicateRemoval(List<InventoryMaterialSummary> inventoryMaterialSummaryList){
  51 + /*********/
  52 + //先找货主和物料码相同的物料SKU相加得总数
  53 + for(InventoryMaterialSummary o:inventoryMaterialSummaryList){
  54 + BigDecimal numQty = BigDecimal.ZERO;
  55 + for (InventoryMaterialSummary t:inventoryMaterialSummaryList){
  56 + if(o.getCompanyCode().equals(t.getCompanyCode()) &&
  57 + o.getMaterialCode().equals(t.getMaterialCode())){
  58 +
  59 + numQty = numQty.add(t.getQty());
  60 + o.setQty(numQty);
  61 + }
  62 + }
  63 + }
  64 + /*此时,inventoryMaterialSummaryList内的全部QTY为货主和物料都相同的库存数量的总数,直接去重即可*/
  65 + //多条件去重
  66 + List<InventoryMaterialSummary> materialSummaryList = new ArrayList<>();
  67 + inventoryMaterialSummaryList.stream().collect(Collectors.collectingAndThen(
  68 + Collectors.toCollection(() -> new TreeSet<>(
  69 + Comparator.comparing(
  70 + inventoryMaterialSummary ->
  71 + inventoryMaterialSummary.getCompanyCode() + ";" + inventoryMaterialSummary.getMaterialCode()))),
  72 + ArrayList::new))
  73 + .forEach(list -> materialSummaryList.add(list));
  74 +
  75 + return materialSummaryList;
  76 + }
47 77  
48 78  
49 79  
... ...
src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java
... ... @@ -71,7 +71,7 @@ public class adjustDetailController extends BaseController {
71 71 .eq(AdjustDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) //仓库
72 72 .eq(adjustDetail.getId() != null, AdjustDetail::getId, adjustDetail.getId())//ID
73 73 .eq(StringUtils.isNotEmpty(adjustDetail.getAdjustHeaderCode()),AdjustDetail::getAdjustHeaderCode,adjustDetail.getAdjustHeaderCode())//调整单编码
74   - .eq(StringUtils.isNotEmpty(adjustDetail.getCompanyCode()),AdjustDetail::getCompanyCode,adjustDetail.getCompanyCode())//货主
  74 + .in(AdjustDetail::getCompanyCode,ShiroUtils.getCompanyCodeList())//货主
75 75 .eq(StringUtils.isNotEmpty(adjustDetail.getCycleCountHeaderCode()),AdjustDetail::getCycleCountHeaderCode,adjustDetail.getCycleCountHeaderCode())//盘单编码
76 76 .eq(adjustDetail.getCycleCountDetailId() != null ,AdjustDetail::getCycleCountHeaderCode,adjustDetail.getCycleCountHeaderCode())//盘点明细
77 77 .eq(StringUtils.isNotEmpty(adjustDetail.getCheckHeaderCode()),AdjustDetail::getCheckHeaderCode,adjustDetail.getCheckHeaderCode())//质检单编码
... ...
src/main/java/com/huaheng/pc/inventory/adjustHeader/controller/adjustHeaderController.java
... ... @@ -65,12 +65,13 @@ public class adjustHeaderController extends BaseController {
65 65 .le(StringUtils.isNotEmpty(createdEnd), AdjustHeader::getCreated, createdEnd)//创建时间范围
66 66 .eq(AdjustHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) //仓库
67 67 .eq(StringUtils.isNotEmpty(adjustHeader.getCode()),AdjustHeader::getCode,adjustHeader.getCode())//调整单编码
68   - .eq(StringUtils.isNotEmpty(adjustHeader.getCompanyCode()),AdjustHeader::getCompanyCode,adjustHeader.getCompanyCode())//货主
69 68 .eq(StringUtils.isNotEmpty(adjustHeader.getProblemType()),AdjustHeader::getProblemType,adjustHeader.getProblemType())//调整类型
70 69 .eq(StringUtils.isNotEmpty(adjustHeader.getCycleCountHeaderCode()),AdjustHeader::getCycleCountHeaderCode,adjustHeader.getCycleCountHeaderCode())//盘点单号
71 70 .eq(StringUtils.isNotEmpty(adjustHeader.getCheckHeaderCode()),AdjustHeader::getCheckHeaderCode,adjustHeader.getCheckHeaderCode())//质检单号
72 71 .eq(StringUtils.isNotEmpty(adjustHeader.getReferCode()),AdjustHeader::getReferCode,adjustHeader.getReferCode())//上游单编码
73 72 .eq(StringUtils.isNotEmpty(adjustHeader.getCreatedBy()),AdjustHeader::getCreatedBy,adjustHeader.getCreatedBy())//创建人
  73 + //货主
  74 + .in(AdjustHeader::getCompanyCode, ShiroUtils.getCompanyCodeList())
74 75  
75 76 .orderByDesc(AdjustHeader::getId);
76 77  
... ...
src/main/java/com/huaheng/pc/inventory/inventoryDetail/controller/InventoryDetailController.java
... ... @@ -73,7 +73,6 @@ public class InventoryDetailController extends BaseController
73 73 .eq(inventoryDetail.getInventoryHeaderId() != null,InventoryDetail::getInventoryHeaderId,inventoryDetail.getInventoryHeaderId()) //ID
74 74 .eq(StringUtils.isNotEmpty(inventoryDetail.getLocationCode()),InventoryDetail::getLocationCode,inventoryDetail.getLocationCode()) //库位
75 75 .eq(StringUtils.isNotEmpty(inventoryDetail.getContainerCode()),InventoryDetail::getContainerCode,inventoryDetail.getContainerCode())//容器
76   - .eq(StringUtils.isNotEmpty(inventoryDetail.getCompanyCode()),InventoryDetail::getCompanyCode,inventoryDetail.getCompanyCode())//货主
77 76 .eq(StringUtils.isNotEmpty(inventoryDetail.getSupplierCode()),InventoryDetail::getSupplierCode,inventoryDetail.getSupplierCode())//供应商
78 77 .eq(StringUtils.isNotEmpty(inventoryDetail.getMaterialCode()),InventoryDetail::getMaterialCode,inventoryDetail.getMaterialCode())//物料编码
79 78 .like(StringUtils.isNotEmpty(inventoryDetail.getMaterialName()),InventoryDetail::getMaterialName,inventoryDetail.getMaterialName())//物料名称
... ... @@ -87,6 +86,8 @@ public class InventoryDetailController extends BaseController
87 86 .eq(StringUtils.isNotEmpty(inventoryDetail.getReferCode()),InventoryDetail::getReferCode,inventoryDetail.getReferCode())//上游单号
88 87 .eq(StringUtils.isNotEmpty(inventoryDetail.getReferDetailId()),InventoryDetail::getReferDetailId,inventoryDetail.getReferDetailId())//上游行号
89 88 .eq(StringUtils.isNotEmpty(inventoryDetail.getLockCode()),InventoryDetail::getLockCode,inventoryDetail.getLockCode())//库存锁
  89 + //货主
  90 + .in(InventoryDetail::getCompanyCode, ShiroUtils.getCompanyCodeList())
90 91 .orderByDesc(InventoryDetail::getId);
91 92  
92 93 if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
... ...
src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java
... ... @@ -71,9 +71,10 @@ public class InventoryHeaderController extends BaseController
71 71 .eq(InventoryHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())//仓库
72 72 .eq(StringUtils.isNotEmpty(inventoryHeader.getLocationCode()),InventoryHeader::getLocationCode,inventoryHeader.getLocationCode()) //库位
73 73 .eq(StringUtils.isNotEmpty(inventoryHeader.getContainerCode()),InventoryHeader::getContainerCode,inventoryHeader.getContainerCode())//容器
74   - .eq(StringUtils.isNotEmpty(inventoryHeader.getCompanyCode()), InventoryHeader::getCompanyCode,inventoryHeader.getCompanyCode())//货主
75 74 .eq(StringUtils.isNotEmpty(inventoryHeader.getCreatedBy()),InventoryHeader::getCreatedBy,inventoryHeader.getCreatedBy())//创建用户
76 75 .eq(StringUtils.isNotEmpty(inventoryHeader.getLastUpdatedBy()),InventoryHeader::getLastUpdatedBy,inventoryHeader.getLastUpdatedBy())//更新用户
  76 + //货主
  77 + .in(InventoryHeader::getCompanyCode, ShiroUtils.getCompanyCodeList())
77 78 .orderByDesc(InventoryHeader::getId);
78 79  
79 80 if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
... ...
src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java
... ... @@ -12,6 +12,7 @@ import com.huaheng.framework.web.controller.BaseController;
12 12 import com.huaheng.framework.web.page.PageDomain;
13 13 import com.huaheng.framework.web.page.TableDataInfo;
14 14 import com.huaheng.framework.web.page.TableSupport;
  15 +import com.huaheng.pc.inventory.InventoryMaterialSummary.domain.InventoryMaterialSummary;
15 16 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
16 17 import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
17 18 import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
... ... @@ -70,7 +71,6 @@ public class InventoryTransactionController extends BaseController{
70 71 .eq(InventoryTransaction::getWarehouseCode,ShiroUtils.getWarehouseCode())//仓库
71 72 .eq(StringUtils.isNotEmpty(inventoryTransaction.getLocationCode()), InventoryTransaction::getLocationCode,inventoryTransaction.getLocationCode()) //库位
72 73 .eq(StringUtils.isNotEmpty(inventoryTransaction.getContainerCode()),InventoryTransaction::getContainerCode,inventoryTransaction.getContainerCode())//容器
73   - .eq(StringUtils.isNotEmpty(inventoryTransaction.getCompanyCode()),InventoryTransaction::getCompanyCode,inventoryTransaction.getCompanyCode())//货主
74 74 .eq(StringUtils.isNotEmpty(inventoryTransaction.getSupplierCode()), InventoryTransaction::getSupplierCode,inventoryTransaction.getSupplierCode())//供应商
75 75 .eq(StringUtils.isNotEmpty(inventoryTransaction.getMaterialCode()),InventoryTransaction::getMaterialCode,inventoryTransaction.getMaterialCode())//物料编码
76 76 .like(StringUtils.isNotEmpty(inventoryTransaction.getMaterialName()),InventoryTransaction::getMaterialName,inventoryTransaction.getMaterialName())//物料名称
... ... @@ -82,7 +82,8 @@ public class InventoryTransactionController extends BaseController{
82 82 .eq(StringUtils.isNotEmpty(inventoryTransaction.getBillCode()), InventoryTransaction::getBillCode,inventoryTransaction.getBillCode())//出入库单编码
83 83 .eq(inventoryTransaction.getTransactionType() != null,InventoryTransaction::getTransactionType,inventoryTransaction.getTransactionType()) // 交易类型
84 84 .eq(StringUtils.isNotEmpty(inventoryTransaction.getReferCode()),InventoryTransaction::getReferCode,inventoryTransaction.getReferCode())//上游单号
85   -
  85 + //货主
  86 + .in(InventoryTransaction::getCompanyCode, ShiroUtils.getCompanyCodeList())
86 87 .orderByDesc(InventoryTransaction::getId);
87 88  
88 89 if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
... ...
src/main/resources/static/css/style.css
... ... @@ -7496,10 +7496,11 @@ body.skin-yellow {
7496 7496 }
7497 7497 .input_list ul{
7498 7498 width:100%;
7499   - padding: 5px 0;
  7499 + padding:3px 0;
7500 7500 }
7501 7501 .input_list li{
7502 7502 width:25%;
  7503 + padding: 3px 0;
7503 7504 display:inline-flex;
7504 7505 }
7505 7506 .input_list li label{
... ... @@ -7512,4 +7513,13 @@ body.skin-yellow {
7512 7513 }
7513 7514 .div1 img:hover{
7514 7515 cursor: pointer;
  7516 +}
  7517 +
  7518 +@media (max-width:1200px) {
  7519 + .input_list li{
  7520 + width:45%;}
  7521 +}
  7522 +@media (max-width:768px) {
  7523 + .input_list li{
  7524 + width:100%;}
7515 7525 }
7516 7526 \ No newline at end of file
... ...
src/main/resources/templates/inventory/inventoryMaterialSummary/inventoryMaterialSummary.html
... ... @@ -20,7 +20,7 @@
20 20 物料名称:<input id="materialName" type="text" name="materialName" />
21 21 </li>
22 22 <li class="time">
23   - <label>创建时间</label>
  23 + <label>创建时间:</label>
24 24 <input type="text" class="time-input" id="startTime" placeholder="开始时间"
25 25 name="createdBegin"/>
26 26 <span>-</span>
... ... @@ -28,6 +28,9 @@
28 28 name="createdEnd"/>
29 29 </li>
30 30 <li>
  31 + 货主:<input id="companyCode" type="text" name="companyCode" />
  32 + </li>
  33 + <li>
31 34 <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
32 35 </li>
33 36 </ul>
... ... @@ -64,7 +67,8 @@
64 67 refresh:true,
65 68 showToggle: false,
66 69 showColumns: false,
67   - showExport: true, //是否添加导出按钮
  70 + showExport: true, //导出
  71 + exportDataType: "all", //导出类型basic', 'all', 'selected'.当前页、所有数据、选中数据
68 72 detailView: true,
69 73 pagination: true,
70 74 sidePagination: "client", //前端分页
... ... @@ -84,13 +88,10 @@
84 88 title: '仓库 ',
85 89 visible: true
86 90 },
87   - /*{
88   - field: 'companyCode',
89   - title: '货主编码'
90   - },*/
91 91 {
92   - field: 'qty',
93   - title: '库存总数'
  92 + field: 'companyCode',
  93 + title: '货主编码',
  94 + visible: true
94 95 },
95 96 {
96 97 field: 'materialCode',
... ... @@ -101,6 +102,10 @@
101 102 title: '物料名称'
102 103 },
103 104 {
  105 + field: 'qty',
  106 + title: '库存总数'
  107 + },
  108 + {
104 109 field: 'materialSpec',
105 110 title: '物料规格'
106 111 },
... ...
src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
... ... @@ -58,13 +58,12 @@
58 58 <li>
59 59 项 目 号:<input type="text" name="projectNo"/>
60 60 </li>
61   - AjaxResult.error("单据号为"+receiptHeader.getCode()+"入库单不需要审核"); <li>
  61 + <li>
62 62 交易类型:<select name="type" th:with="type=${@dict.getType('inventoryTransactionType')}">
63 63 <option value="">所有</option>
64 64 <option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>
65 65 </select>
66 66 </li>
67   -
68 67 <li class="time">
69 68 <label>创建时间: </label>
70 69 <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
... ... @@ -82,10 +81,10 @@
82 81 </div>
83 82 <div class="col-sm-12 select-info">
84 83 <div class="btn-group hidden-xs" id="toolbar" role="group">
85   - <a class="btn btn-outline btn-success btn-rounded" onclick="report()"
  84 + <!--<a class="btn btn-outline btn-success btn-rounded" onclick="report()"
86 85 shiro:hasPermission="inventory:inventoryTransaction:report">
87 86 <i class="fa fa-plus"></i> 打印
88   - </a>
  87 + </a>-->
89 88 </div>
90 89 <table id="bootstrap-table" data-mobile-responsive="true" class="table table-bordered table-hover"></table>
91 90 </div>
... ... @@ -113,7 +112,7 @@
113 112 sortName: "id",
114 113 sortOrder: "desc",
115 114 showExport: true, //导出
116   - exportDataType: "selected", //导出类型basic', 'all', 'selected'.当前页、所有数据、选中数据
  115 + exportDataType: "all", //导出类型basic', 'all', 'selected'.当前页、所有数据、选中数据
117 116 pagination:true,
118 117 pageNumber: 1, // 初始化加载第一页,默认第一页
119 118 pageSize: 10, // 每页的记录行数(*)
... ...
src/main/resources/templates/monitor/locationstatus/locationstatus.html
... ... @@ -9,13 +9,14 @@
9 9 font-size: 10px;
10 10 /*width: 50px;*/
11 11 text-align: left;
12   - margin: auto 3px;
  12 + margin: 5px 20px 5px 5px;
13 13 }
14 14 #img_list li img{
15 15 height: 35px;
16 16 width: 35px;
17 17 }
18 18 #info_list{
  19 + width: 100%;
19 20 display:inline-block;
20 21 }
21 22 #info_list li{
... ...
src/test/java/com.huaheng.test/EncryptPassword.java deleted
1   -package com.huaheng.test;
2   -
3   -import com.huaheng.framework.shiro.service.PasswordService;
4   -
5   -import java.math.BigDecimal;
6   -
7   -public class EncryptPassword {
8   -
9   - public static void main(String[] args) {
10   -// PasswordService passwordService = new PasswordService();
11   -// String psw = passwordService.encryptPassword("superAdmin", "admin123", "3d82fd");
12   -// System.out.println(psw);
13   - BigDecimal sum = new BigDecimal(575);
14   - BigDecimal max = new BigDecimal(400);
15   - System.out.println(sum.compareTo(max));
16   - }
17   -}
src/test/java/com.huaheng.test/User.java 0 → 100644
  1 +package com.huaheng.test;
  2 +
  3 +public class User {
  4 +
  5 + public String name;
  6 +
  7 + public Integer age;
  8 +
  9 + public String sex;
  10 +
  11 +
  12 + public String getName() {
  13 + return name;
  14 + }
  15 +
  16 + public void setName(String name) {
  17 + this.name = name;
  18 + }
  19 +
  20 + public Integer getAge() {
  21 + return age;
  22 + }
  23 +
  24 + public void setAge(Integer age) {
  25 + this.age = age;
  26 + }
  27 +
  28 + public String getSex() {
  29 + return sex;
  30 + }
  31 +
  32 + public void setSex(String sex) {
  33 + this.sex = sex;
  34 + }
  35 +
  36 + @Override
  37 + public String toString() {
  38 + return "User{" +
  39 + "name='" + name + '\'' +
  40 + ", age=" + age +
  41 + ", sex='" + sex + '\'' +
  42 + '}';
  43 + }
  44 +}
... ...
src/test/java/com.huaheng.test/tasting.java 0 → 100644
  1 +package com.huaheng.test;
  2 +
  3 +
  4 +import com.huaheng.pc.inventory.InventoryMaterialSummary.domain.InventoryMaterialSummary;
  5 +
  6 +import java.math.BigDecimal;
  7 +import java.util.*;
  8 +import java.util.stream.Collectors;
  9 +
  10 +public class tasting {
  11 +
  12 +
  13 + private static List<User> list = new ArrayList<User>();
  14 +
  15 + public static void main(String[] args) {
  16 +
  17 + User user0 = new User();
  18 + user0.setName("小强");
  19 + user0.setAge(11);
  20 + user0.setSex("男");
  21 + list.add(user0);
  22 +
  23 + User user2 = new User();
  24 + user2.setName("小强");
  25 + user2.setAge(15);
  26 + user2.setSex("男");
  27 + list.add(user2);
  28 +
  29 + User user3 = new User();
  30 + user3.setName("小强");
  31 + user3.setAge(23);
  32 + user3.setSex("男");
  33 + list.add(user3);
  34 +
  35 + User user4 = new User();
  36 + user4.setName("小雨");
  37 + user4.setAge(24);
  38 + user4.setSex("女");
  39 + list.add(user4);
  40 +
  41 + User user5 = new User();
  42 + user5.setName("小雨");
  43 + user5.setAge(24);
  44 + user5.setSex("女");
  45 + list.add(user5);
  46 +
  47 + User user6 = new User();
  48 + user6.setName("小雨");
  49 + user6.setAge(15);
  50 + user6.setSex("女");
  51 + list.add(user6);
  52 + System.out.println("原始数据:" + list);
  53 +
  54 + List<User> u = new ArrayList<>();
  55 +
  56 + //先找货主和物料码相同的物料SKU相加得总数
  57 + for(User o:list){
  58 + int numQty = 0;
  59 + for (User t:list){
  60 + if(o.getName().equals(t.getName()) &&
  61 + o.getSex().equals(t.getSex())){
  62 +
  63 + numQty = numQty + t.getAge();
  64 + o.setAge(numQty);
  65 + }
  66 + }
  67 + }
  68 +
  69 + //多条件去重
  70 + list.stream().collect(Collectors.collectingAndThen(
  71 + Collectors.toCollection(() -> new TreeSet<>(
  72 + Comparator.comparing(user -> user.getSex() + ";" + user.getName()))), ArrayList::new))
  73 + .forEach(user -> u.add(user));
  74 +
  75 + System.out.println("多条件去重后数据:" + u);
  76 +
  77 +
  78 + }
  79 +
  80 +
  81 +
  82 +
  83 +
  84 +}
... ...