no message
							parent
							
								
									70718abd1d
								
							
						
					
					
						commit
						ad92e11877
					
				| 
						 | 
				
			
			@ -4,6 +4,35 @@
 | 
			
		|||
 | 
			
		||||
    <div class="div2" style="padding-bottom: 10px">
 | 
			
		||||
      <el-form ref="form" :model="param" label-width="80px">
 | 
			
		||||
        <el-row>
 | 
			
		||||
          <el-col :span="4">
 | 
			
		||||
            <el-form-item label="库区">
 | 
			
		||||
              <el-select v-model="param.库区"  multiple filterable placeholder="请选择库区" style="width: 100%;">
 | 
			
		||||
                <el-option
 | 
			
		||||
                    v-for="item in Ku"
 | 
			
		||||
                    :key="item.index"
 | 
			
		||||
                    :label="item.name"
 | 
			
		||||
                    :value="item.name"
 | 
			
		||||
                >
 | 
			
		||||
                </el-option>
 | 
			
		||||
              </el-select>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="4">
 | 
			
		||||
            <el-form-item label="创建日期:">
 | 
			
		||||
              <el-date-picker style="width: 300px"
 | 
			
		||||
                              v-model="param.创建日期"
 | 
			
		||||
                              type="daterange"
 | 
			
		||||
                              align="right"
 | 
			
		||||
                              unlink-panels
 | 
			
		||||
                              range-separator="至"
 | 
			
		||||
                              start-placeholder="开始日期"
 | 
			
		||||
                              end-placeholder="结束日期"
 | 
			
		||||
                              :picker-options="pickerOptions">
 | 
			
		||||
              </el-date-picker>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
        </el-row>
 | 
			
		||||
        <el-button type="success" @click="find">查找</el-button>
 | 
			
		||||
        <el-button type="success" @click="down">导出</el-button>
 | 
			
		||||
        <el-button type="success" @click="rest">重置</el-button>  
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +55,7 @@
 | 
			
		|||
        @size-change="handleSizeChange"
 | 
			
		||||
        @current-change="handleCurrentChange"
 | 
			
		||||
        :current-page="pageNum"
 | 
			
		||||
        :page-sizes="[ 50, 100, 200,500]"
 | 
			
		||||
        :page-sizes="[ 100000]"
 | 
			
		||||
        :page-size="pageSize"
 | 
			
		||||
        layout="total, sizes, prev, pager, next, jumper"
 | 
			
		||||
        :total="total">
 | 
			
		||||
| 
						 | 
				
			
			@ -39,41 +68,49 @@
 | 
			
		|||
export default {
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      pickerOptions: {
 | 
			
		||||
        shortcuts: [{
 | 
			
		||||
          text: '最近一周',
 | 
			
		||||
          onClick(picker) {
 | 
			
		||||
            const end = new Date();
 | 
			
		||||
            const start = new Date();
 | 
			
		||||
            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
 | 
			
		||||
            picker.$emit('pick', [start, end]);
 | 
			
		||||
          }
 | 
			
		||||
        }, {
 | 
			
		||||
          text: '最近一个月',
 | 
			
		||||
          onClick(picker) {
 | 
			
		||||
            const end = new Date();
 | 
			
		||||
            const start = new Date();
 | 
			
		||||
            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
 | 
			
		||||
            picker.$emit('pick', [start, end]);
 | 
			
		||||
          }
 | 
			
		||||
        }, {
 | 
			
		||||
          text: '最近三个月',
 | 
			
		||||
          onClick(picker) {
 | 
			
		||||
            const end = new Date();
 | 
			
		||||
            const start = new Date();
 | 
			
		||||
            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
 | 
			
		||||
            picker.$emit('pick', [start, end]);
 | 
			
		||||
          }
 | 
			
		||||
        }]
 | 
			
		||||
      },
 | 
			
		||||
      /*多选下拉框-库区*/
 | 
			
		||||
      Ku: [],
 | 
			
		||||
      // 表头配置
 | 
			
		||||
      columns: [
 | 
			
		||||
        {
 | 
			
		||||
          prop: 'sapName',
 | 
			
		||||
          minWidth: '150px',
 | 
			
		||||
          label: 'SAP类型'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          prop: 'areaName',
 | 
			
		||||
          minWidth: '150px',
 | 
			
		||||
          label: '库区'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          prop: 'formattedDate',
 | 
			
		||||
          minWidth: '150px',
 | 
			
		||||
          label: 'FormattedDate'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          prop: 'taskCount',
 | 
			
		||||
          minWidth: '150px',
 | 
			
		||||
          label: '数量'
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      /*columns:[
 | 
			
		||||
        prop: 'a1',
 | 
			
		||||
      ],*/
 | 
			
		||||
      tableloding: false,
 | 
			
		||||
      isShow:false,//是否展示全部搜索条件
 | 
			
		||||
      tableData: [],
 | 
			
		||||
      pageSize: 50
 | 
			
		||||
      pageSize: 100000
 | 
			
		||||
      ,spanArr: [], //每行合并数
 | 
			
		||||
      pos: 0, //角标索引
 | 
			
		||||
      pageNum: 1,
 | 
			
		||||
      total: 3,
 | 
			
		||||
      param: {
 | 
			
		||||
        创建日期:[new Date().setTime(new Date().getTime() - 3600 * 1000 * 24 * 7), new Date()],
 | 
			
		||||
        库区:[],
 | 
			
		||||
      },
 | 
			
		||||
      loading: false,
 | 
			
		||||
      checked: false,
 | 
			
		||||
| 
						 | 
				
			
			@ -87,6 +124,7 @@ export default {
 | 
			
		|||
  },
 | 
			
		||||
  mounted: function () {
 | 
			
		||||
    this.queryUser();
 | 
			
		||||
    this.KuS();
 | 
			
		||||
  },
 | 
			
		||||
  updated() {
 | 
			
		||||
    // 每次更新会重新对 Table 进行重新布局
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +139,7 @@ export default {
 | 
			
		|||
    cellStyle({ row, column }) {
 | 
			
		||||
      // 找到数组中列>1那一个单元格,就是需要改变的样式
 | 
			
		||||
      if (row['mergeData'][column.property] && row['mergeData'][column.property][1] && row['mergeData'][column.property][1] > 1) {
 | 
			
		||||
        return { 'text-align': 'left' }
 | 
			
		||||
        return { 'text-align': 'center' }
 | 
			
		||||
      } else {
 | 
			
		||||
        return {}
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -137,7 +175,8 @@ export default {
 | 
			
		|||
      }).then(res => res.data)
 | 
			
		||||
          .then(res => {
 | 
			
		||||
            if (res.code == 200) {
 | 
			
		||||
              this.tableData = res.data
 | 
			
		||||
              this.columns=res.data.columnList;
 | 
			
		||||
              this.tableData = res.data.tableList
 | 
			
		||||
              this.total = res.total
 | 
			
		||||
            } else {
 | 
			
		||||
              this.$message.error('获取数据失败');
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +207,7 @@ export default {
 | 
			
		|||
      },{responseType:'blob'}).then(res => {
 | 
			
		||||
        this.tableloding=false;
 | 
			
		||||
        //重命名文件
 | 
			
		||||
        this.downloadFile(res.data,'序列号库存清点'+ '数据', 'xlsx')
 | 
			
		||||
        this.downloadFile(res.data,'拣货表单'+ '数据', 'xlsx')
 | 
			
		||||
      });
 | 
			
		||||
      //列表数据加载
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -185,6 +224,23 @@ export default {
 | 
			
		|||
      link.click()
 | 
			
		||||
      document.body.removeChild(link)
 | 
			
		||||
    },
 | 
			
		||||
    KuS(){
 | 
			
		||||
      //库区下拉列表数据加载
 | 
			
		||||
      this.$axios.post(this.$httpUrl + '/Kucunhuizong/ku', {
 | 
			
		||||
 | 
			
		||||
      }).then(res => res.data)
 | 
			
		||||
          .then(res => {
 | 
			
		||||
            if (res.code == 200) {
 | 
			
		||||
              this.Ku = res.data;
 | 
			
		||||
            } else {
 | 
			
		||||
              this.$message.error('获取数据失败');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // eslint-disable-next-line no-unused-vars
 | 
			
		||||
          },err=>{
 | 
			
		||||
            this.tableloding=false;
 | 
			
		||||
          })
 | 
			
		||||
    },
 | 
			
		||||
    parseTime(time, cFormat) {
 | 
			
		||||
      //获取当前时间
 | 
			
		||||
      if (arguments.length === 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,8 +6,16 @@
 | 
			
		|||
      <el-form ref="form" :model="param" label-width="80px">
 | 
			
		||||
        <el-row :gutter="24">
 | 
			
		||||
          <el-col :span="4">
 | 
			
		||||
            <el-form-item label="出库类型:">
 | 
			
		||||
              <el-input type="text" v-model="param.出库类型" style="width: 105px"></el-input>
 | 
			
		||||
            <el-form-item label="出库类型">
 | 
			
		||||
              <el-select v-model="param.出库类型"  multiple filterable placeholder="请选择库区" style="width: 155px;">
 | 
			
		||||
                <el-option
 | 
			
		||||
                    v-for="item in Pt"
 | 
			
		||||
                    :key="item"
 | 
			
		||||
                    :label="item"
 | 
			
		||||
                    :value="item"
 | 
			
		||||
                >
 | 
			
		||||
                </el-option>
 | 
			
		||||
              </el-select>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="4">
 | 
			
		||||
| 
						 | 
				
			
			@ -21,8 +29,16 @@
 | 
			
		|||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="4">
 | 
			
		||||
            <el-form-item label="库区:">
 | 
			
		||||
              <el-input type="textarea" v-model="param.库区" :rows="1"></el-input>
 | 
			
		||||
            <el-form-item label="库区">
 | 
			
		||||
              <el-select v-model="param.库区"  multiple filterable placeholder="请选择库区" style="width: 100%;">
 | 
			
		||||
                <el-option
 | 
			
		||||
                    v-for="item in Ku"
 | 
			
		||||
                    :key="item.index"
 | 
			
		||||
                    :label="item.name"
 | 
			
		||||
                    :value="item.name"
 | 
			
		||||
                >
 | 
			
		||||
                </el-option>
 | 
			
		||||
              </el-select>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="4">
 | 
			
		||||
| 
						 | 
				
			
			@ -102,6 +118,10 @@ export default {
 | 
			
		|||
          }
 | 
			
		||||
        }]
 | 
			
		||||
      },
 | 
			
		||||
      /*多选下拉框-库区*/
 | 
			
		||||
      Ku: [],
 | 
			
		||||
      /*多选下拉框-出库类型*/
 | 
			
		||||
      Pt: [],
 | 
			
		||||
      // 表头配置
 | 
			
		||||
      columns: [
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -237,6 +257,8 @@ export default {
 | 
			
		|||
  },
 | 
			
		||||
  mounted: function () {
 | 
			
		||||
    this.queryUser();
 | 
			
		||||
    this.KuS();
 | 
			
		||||
    this.PtS();
 | 
			
		||||
  },
 | 
			
		||||
  updated() {
 | 
			
		||||
    // 每次更新会重新对 Table 进行重新布局
 | 
			
		||||
| 
						 | 
				
			
			@ -335,6 +357,40 @@ export default {
 | 
			
		|||
      link.click()
 | 
			
		||||
      document.body.removeChild(link)
 | 
			
		||||
    },
 | 
			
		||||
    KuS(){
 | 
			
		||||
      //库区下拉列表数据加载
 | 
			
		||||
      this.$axios.post(this.$httpUrl + '/Kucunhuizong/ku', {
 | 
			
		||||
 | 
			
		||||
      }).then(res => res.data)
 | 
			
		||||
          .then(res => {
 | 
			
		||||
            if (res.code == 200) {
 | 
			
		||||
              this.Ku = res.data;
 | 
			
		||||
            } else {
 | 
			
		||||
              this.$message.error('获取数据失败');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // eslint-disable-next-line no-unused-vars
 | 
			
		||||
          },err=>{
 | 
			
		||||
            this.tableloding=false;
 | 
			
		||||
          })
 | 
			
		||||
    },
 | 
			
		||||
    PtS(){
 | 
			
		||||
      //库区下拉列表数据加载
 | 
			
		||||
      this.$axios.post(this.$httpUrl + '/JianHuoXiaoLv/inputPt', {
 | 
			
		||||
 | 
			
		||||
      }).then(res => res.data)
 | 
			
		||||
          .then(res => {
 | 
			
		||||
            if (res.code == 200) {
 | 
			
		||||
              this.Pt = res.data;
 | 
			
		||||
            } else {
 | 
			
		||||
              this.$message.error('获取数据失败');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // eslint-disable-next-line no-unused-vars
 | 
			
		||||
          },err=>{
 | 
			
		||||
            this.tableloding=false;
 | 
			
		||||
          })
 | 
			
		||||
    },
 | 
			
		||||
    parseTime(time, cFormat) {
 | 
			
		||||
      //获取当前时间
 | 
			
		||||
      if (arguments.length === 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ import com.yc.wms.bean.Xuliehao;
 | 
			
		|||
import com.yc.wms.service.Xuliehaoqingdan;
 | 
			
		||||
import com.yc.wms.until.QueryPageUtil;
 | 
			
		||||
import com.yc.wms.until.Result;
 | 
			
		||||
import com.yc.wms.utils.StringUtils;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
| 
						 | 
				
			
			@ -42,6 +43,23 @@ public class JianHuoBiaoDanController {
 | 
			
		|||
        query.setPageSize((int)jsonObject.get("pageSize"));
 | 
			
		||||
        query.setPageNum((int)jsonObject.get("pageNum"));
 | 
			
		||||
        JSONObject param= (JSONObject)jsonObject.get("param");
 | 
			
		||||
        String querySql="";//查询条件
 | 
			
		||||
        JSONArray createDate=param.getJSONArray("创建日期");
 | 
			
		||||
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 | 
			
		||||
        Calendar c = Calendar.getInstance();
 | 
			
		||||
        /*获取7天前的日期*/
 | 
			
		||||
        c.add(Calendar.DATE, - 7);
 | 
			
		||||
        Date monday = c.getTime();
 | 
			
		||||
        String startDate = sdf.format(monday);
 | 
			
		||||
        String endDate = sdf.format(new Date());
 | 
			
		||||
        if (createDate!=null){
 | 
			
		||||
            startDate=sdf.format(createDate.getDate(0));
 | 
			
		||||
            endDate=sdf.format(createDate.getDate(1));
 | 
			
		||||
        }
 | 
			
		||||
        querySql=" and formatted_date>='"+startDate+"' AND formatted_date<='"+endDate+"'";
 | 
			
		||||
        if (param.getJSONArray("库区")!=null&¶m.getJSONArray("库区").size()>0){
 | 
			
		||||
            querySql=querySql+" and area_name in ("+ StringUtils.strInSql(JSONUtil.toList(param.getJSONArray("库区"), String.class))+")";
 | 
			
		||||
        }
 | 
			
		||||
        /* 基础sql数据查询*/
 | 
			
		||||
        String sql=" select  Row_number() OVER(order by pt.sourceType,z.NAME,CONVERT(VARCHAR, t.OPERATE_TIME, 23)) as id, z.NAME as 'area_name',count(t.id) as 'task_count',max(bt.NAME) as 'bt_name',pt.sourceType as 'sap_name', "
 | 
			
		||||
                +"  CONVERT(VARCHAR, t.OPERATE_TIME, 23) AS formatted_date "
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +71,9 @@ public class JianHuoBiaoDanController {
 | 
			
		|||
                +"  left join [ZONE] z on z.id=loc.ZONE_ID "
 | 
			
		||||
                +"  where t.PLAN_QUANTITY>0 "
 | 
			
		||||
                +"  group by pt.sourceType,z.NAME,CONVERT(VARCHAR, t.OPERATE_TIME, 23) ";
 | 
			
		||||
        String sqlCount = "select count(t.id) as nums from (" + sql+") t";
 | 
			
		||||
        String sqlCount = " select count(t.id) as nums from ( "
 | 
			
		||||
                +"  select max(id) id from ( " + sql+" ) t group by t.sap_name,t.area_name "
 | 
			
		||||
                +" ) t ";
 | 
			
		||||
        /* 总条数*/
 | 
			
		||||
        List<Integer> counts = entityManager.createNativeQuery(sqlCount).getResultList();
 | 
			
		||||
        /* 当前页数据*/
 | 
			
		||||
| 
						 | 
				
			
			@ -61,70 +81,145 @@ public class JianHuoBiaoDanController {
 | 
			
		|||
        int pageSize = query.getPageSize();//条数
 | 
			
		||||
        String sqlFy = "select t.* from(" + sql+") t";
 | 
			
		||||
        sqlFy+= " WHERE id BETWEEN " + (pageNum-1) * pageSize + " AND " + (pageNum) * pageSize;
 | 
			
		||||
        sqlFy+= querySql;
 | 
			
		||||
        List<SapDo> sapDos=new ArrayList<>();
 | 
			
		||||
        /* 返回的数据*/
 | 
			
		||||
        List<JSONObject> jhBdReturn=new ArrayList<>();
 | 
			
		||||
        /*返回时间列*/
 | 
			
		||||
        List<Column> columnList=new ArrayList<>();
 | 
			
		||||
        /* 初始化表格*/
 | 
			
		||||
        columnList.add(new Column("sapName", "150px", "SAP类型"));
 | 
			
		||||
        columnList.add(new Column("areaName", "150px", "库区"));
 | 
			
		||||
        /* 查询所有数据*/
 | 
			
		||||
        List<JhBd> jhBdList = entityManager.createNativeQuery(sqlFy,JhBd.class).getResultList();
 | 
			
		||||
        if (jhBdList.size()>0){
 | 
			
		||||
            /* 添加大汇总*/
 | 
			
		||||
            JSONObject jhBdDJson = new JSONObject();
 | 
			
		||||
 | 
			
		||||
            /*table 合并列行*/
 | 
			
		||||
            int m=0;//列
 | 
			
		||||
            int n=0;//行
 | 
			
		||||
            /* 获取动态时间列-按时间进行分组获取全部动态时间列*/
 | 
			
		||||
            /* 提取列表所有时间列并去重*/
 | 
			
		||||
            Set<String> uniqueNames = new HashSet<>();
 | 
			
		||||
            for (JhBd jhBd : jhBdList) {
 | 
			
		||||
                String formattedDate=jhBd.getFormattedDate();
 | 
			
		||||
                if (formattedDate!=null) {
 | 
			
		||||
                    uniqueNames.add(jhBd.getFormattedDate());
 | 
			
		||||
                }else {
 | 
			
		||||
                    uniqueNames.add("unknown");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            /* 去重后排序并转为List类型*/
 | 
			
		||||
            List<String> sortedUniqueNames = uniqueNames.stream()
 | 
			
		||||
                    .sorted()
 | 
			
		||||
                    .collect(Collectors.toList());
 | 
			
		||||
            /* 格式化数据*/
 | 
			
		||||
            for (String label:sortedUniqueNames){
 | 
			
		||||
                String prop=label;
 | 
			
		||||
                if (label==null){
 | 
			
		||||
                    prop=null;
 | 
			
		||||
                }
 | 
			
		||||
                Column column=new Column(prop,"150px",label);
 | 
			
		||||
                columnList.add(column);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* 按SAP类型分组*/
 | 
			
		||||
            Map<String, List<JhBd>> groupedMap = jhBdList.stream()
 | 
			
		||||
                    .collect(Collectors.groupingBy(jhBd -> Objects.toString(jhBd.getSapName(), "unknown")));
 | 
			
		||||
            /*遍历所有SAP类型*/
 | 
			
		||||
            List<String> sapKeys = panxu(groupedMap);
 | 
			
		||||
            for (int i = 0; i < sapKeys.size(); i++) {
 | 
			
		||||
                /* 添加汇总*/
 | 
			
		||||
                JSONObject jhBdXJson = new JSONObject();
 | 
			
		||||
 | 
			
		||||
                String sapName=sapKeys.get(i);
 | 
			
		||||
                List<JhBd> sapJhBdList=groupedMap.get(sapName);
 | 
			
		||||
                /*合并第一列*/
 | 
			
		||||
                int[] sapMn={sapJhBdList.size(),1};
 | 
			
		||||
                /* 按库区分组*/
 | 
			
		||||
                Map<String, List<JhBd>> sapJhBdMap = sapJhBdList.stream()
 | 
			
		||||
                        .collect(Collectors.groupingBy(jhBd -> Objects.toString(jhBd.getAreaName(), "unknown")));
 | 
			
		||||
                /*遍历所有库区*/
 | 
			
		||||
                List<AreaDo> areaDos=new ArrayList<>();// 返回AreaDos
 | 
			
		||||
                /*按库区合并第sap 行数+合计1行*/
 | 
			
		||||
                int[] sapMn={sapJhBdMap.size()+1,1};
 | 
			
		||||
                int[] areaMn={1,1};
 | 
			
		||||
                List<String> areaNames = panxu(sapJhBdMap);//按表的id进行排序
 | 
			
		||||
                for (int j = 0; j < areaNames.size(); j++) {
 | 
			
		||||
                    String areaName=areaNames.get(j);
 | 
			
		||||
                    List<JhBd> areaJhBdList=sapJhBdMap.get(areaName);
 | 
			
		||||
                    /*合并第二列*/
 | 
			
		||||
                    int[] areaMn={areaJhBdList.size(),1};
 | 
			
		||||
 | 
			
		||||
                    /*合并在第一条数据*/
 | 
			
		||||
                    JhBd jhBdHb = jhBdList.stream()
 | 
			
		||||
                            .filter(person -> person.getId() == areaJhBdList.get(0).getId())
 | 
			
		||||
                            .findFirst().get();
 | 
			
		||||
                    jhBdHb.setMergeData(sapMn, areaMn);
 | 
			
		||||
                    /* 合并后重置*/
 | 
			
		||||
                    sapMn = new int[2];
 | 
			
		||||
 | 
			
		||||
                    /*按时间FormattedDate进行分组*/
 | 
			
		||||
                    Map<String, List<JhBd>> dateJhBdMap = areaJhBdList.stream()
 | 
			
		||||
                            .collect(Collectors.groupingBy(jhBd -> Objects.toString(jhBd.getFormattedDate(), "unknown")));
 | 
			
		||||
                    /*遍历所有FormattedDate*/
 | 
			
		||||
                    List<FormattedDo> formattedDos=new ArrayList<>();// 返回FormattedDos
 | 
			
		||||
                    List<String> formattedDates=panxu(dateJhBdMap);
 | 
			
		||||
                    for (int k = 0; k < formattedDates.size(); k++) {
 | 
			
		||||
                        String formatted=formattedDates.get(k);
 | 
			
		||||
                        List<JhBd> jhBds =dateJhBdMap.get(formatted);
 | 
			
		||||
                        JhBd jhBd = jhBdList.stream()
 | 
			
		||||
                                .filter(person -> person.getId() == jhBds.get(0).getId())
 | 
			
		||||
                                .findFirst().get();
 | 
			
		||||
                        jhBd.setMergeData(sapMn, areaMn);
 | 
			
		||||
                        /* 合并后重置*/
 | 
			
		||||
                        sapMn=new int[2];
 | 
			
		||||
                        areaMn=new int[2];
 | 
			
		||||
 | 
			
		||||
                        FormattedDo formattedDo=new FormattedDo(formatted, jhBds);
 | 
			
		||||
                        formattedDos.add(formattedDo);
 | 
			
		||||
                    /* 转为JSONObject类型*/
 | 
			
		||||
                    JSONObject jhBdJson = JSONUtil.parseObj(jhBdHb);
 | 
			
		||||
                    if (jhBdXJson.size()<1){
 | 
			
		||||
                        jhBdXJson.accumulate("areaName", "汇总");
 | 
			
		||||
                        /* 隐藏SAP类型列*/
 | 
			
		||||
                        JSONObject sapMergeData=new JSONObject();
 | 
			
		||||
                        sapMergeData.accumulate("sapName",new int[]{0,0});
 | 
			
		||||
                        jhBdXJson.accumulate("mergeData",sapMergeData);
 | 
			
		||||
                    }
 | 
			
		||||
                    /*写入库区*/
 | 
			
		||||
                    AreaDo areaDo=new AreaDo();
 | 
			
		||||
                    areaDo.setAreaName(areaName);
 | 
			
		||||
                    areaDo.setFormatted(formattedDos);
 | 
			
		||||
                    areaDos.add(areaDo);
 | 
			
		||||
                    if (jhBdDJson.size()<1){
 | 
			
		||||
                        jhBdDJson.accumulate("areaName", "汇总");
 | 
			
		||||
                        /* 隐藏SAP类型列*/
 | 
			
		||||
                        JSONObject sapMergeData=new JSONObject();
 | 
			
		||||
                        sapMergeData.accumulate("sapName",new int[]{0,0});
 | 
			
		||||
                        sapMergeData.accumulate("areaName",new int[]{1,2});
 | 
			
		||||
                        jhBdDJson.accumulate("mergeData",sapMergeData);
 | 
			
		||||
                    }
 | 
			
		||||
                SapDo sapDo=new SapDo(sapName,areaDos);
 | 
			
		||||
                sapDos.add(sapDo);
 | 
			
		||||
                    for (int k = 0; k < formattedDates.size(); k++) {
 | 
			
		||||
                        //日期
 | 
			
		||||
                        String formatted=formattedDates.get(k);
 | 
			
		||||
                        //日期关联的数据
 | 
			
		||||
                        List<JhBd> jhBds =dateJhBdMap.get(formatted);
 | 
			
		||||
                        /* 写入返回数据*/
 | 
			
		||||
                        //任务数量
 | 
			
		||||
                        int taskCount= jhBds.get(0).getTaskCount();
 | 
			
		||||
                        //添加到返回类列
 | 
			
		||||
                        jhBdJson.accumulate(formatted,taskCount);
 | 
			
		||||
                        /*写入小汇总*/
 | 
			
		||||
                        if (jhBdXJson.getInt(formatted)==null){
 | 
			
		||||
                            jhBdXJson.set(formatted,taskCount);
 | 
			
		||||
                        }else {
 | 
			
		||||
                            jhBdXJson.set(formatted,Integer.valueOf(jhBdXJson.getStr(formatted))+taskCount);
 | 
			
		||||
                        }
 | 
			
		||||
            System.out.println("返回数据:"+sapDos);
 | 
			
		||||
                        /*写入大汇总*/
 | 
			
		||||
                        if (jhBdDJson.getInt(formatted)==null){
 | 
			
		||||
                            jhBdDJson.set(formatted,taskCount);
 | 
			
		||||
                        }else {
 | 
			
		||||
                            jhBdDJson.set(formatted,Integer.valueOf(jhBdDJson.getStr(formatted))+taskCount);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    jhBdReturn.add(jhBdJson);
 | 
			
		||||
                }
 | 
			
		||||
                /* 添加小汇总*/
 | 
			
		||||
                jhBdReturn.add(jhBdXJson);
 | 
			
		||||
            }
 | 
			
		||||
            /* 添加大汇总*/
 | 
			
		||||
            jhBdReturn.add(jhBdDJson);
 | 
			
		||||
            System.out.println("返回数据:"+jhBdReturn);
 | 
			
		||||
        }else {
 | 
			
		||||
            System.out.println("为查询到值");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        JSONObject returnBody=new JSONObject();
 | 
			
		||||
        returnBody.accumulate("tableList", jhBdReturn);
 | 
			
		||||
        returnBody.accumulate("columnList", columnList);
 | 
			
		||||
//        long total=counts.get(0);
 | 
			
		||||
        Result result=Result.result(200,"操作成功",Long.parseLong(counts.get(0).toString()), jhBdList);
 | 
			
		||||
        Result result=Result.result(200,"操作成功",Long.parseLong(counts.get(0).toString()), returnBody);
 | 
			
		||||
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -245,14 +340,20 @@ class JhBd implements Serializable {
 | 
			
		|||
    /* 库区名称*/
 | 
			
		||||
    private String areaName="";
 | 
			
		||||
    /* 任务数量*/
 | 
			
		||||
    private int taskCount;
 | 
			
		||||
    private int taskCount=0;
 | 
			
		||||
    /* sap类型*/
 | 
			
		||||
    private String sapName="";
 | 
			
		||||
    /* 其他出库*/
 | 
			
		||||
    private String btName="";
 | 
			
		||||
    private String formattedDate="";
 | 
			
		||||
    /* 合并行,列设置*/
 | 
			
		||||
    @Transient
 | 
			
		||||
    private Map<String,int[]> mergeData;
 | 
			
		||||
    private Map<String,int[]> mergeData = new HashMap() {{
 | 
			
		||||
        put("sapName", new int[]{0, 0});
 | 
			
		||||
        put("areaName", new int[]{0, 0});
 | 
			
		||||
        put("taskCount", new int[]{1, 1});
 | 
			
		||||
        put("formattedDate", new int[]{1, 1});
 | 
			
		||||
    }};
 | 
			
		||||
 | 
			
		||||
    public void setMergeData(int[] sap,int[] area){
 | 
			
		||||
        int[] mn={1,1};
 | 
			
		||||
| 
						 | 
				
			
			@ -264,14 +365,16 @@ class JhBd implements Serializable {
 | 
			
		|||
        map.put("formattedDate", mn);
 | 
			
		||||
        this.mergeData = map;
 | 
			
		||||
    }
 | 
			
		||||
    public JhBd(){
 | 
			
		||||
        int[] mn={1,1};
 | 
			
		||||
        int[] mnc={0,0};/*默认不显示*/
 | 
			
		||||
        Map<String,int[]> map=new HashMap<>();
 | 
			
		||||
        map.put("sapName", mnc);
 | 
			
		||||
        map.put("areaName", mnc);
 | 
			
		||||
        map.put("taskCount", mn);
 | 
			
		||||
        map.put("formattedDate", mn);
 | 
			
		||||
        this.mergeData = map;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Data
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
/*动态列*/
 | 
			
		||||
class Column {
 | 
			
		||||
    /*数据映射*/
 | 
			
		||||
    private String prop;
 | 
			
		||||
    /*宽度*/
 | 
			
		||||
    private String minWidth="150px";
 | 
			
		||||
    /*列明*/
 | 
			
		||||
    private String label;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ import com.yc.wms.bean.Xuliehao;
 | 
			
		|||
import com.yc.wms.service.Xuliehaoqingdan;
 | 
			
		||||
import com.yc.wms.until.QueryPageUtil;
 | 
			
		||||
import com.yc.wms.until.Result;
 | 
			
		||||
import com.yc.wms.utils.StringUtils;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
| 
						 | 
				
			
			@ -31,33 +32,7 @@ public class JianHuoXiaoLvController {
 | 
			
		|||
    @Autowired
 | 
			
		||||
    private Xuliehaoqingdan xuliehaoqingdan;
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/queryList")
 | 
			
		||||
    public Result queryList(@RequestBody String  json) {
 | 
			
		||||
        /* 返回data设置*/
 | 
			
		||||
        QueryPageUtil query =new QueryPageUtil();
 | 
			
		||||
        JSONObject jsonObject= JSONUtil.parseObj(json);
 | 
			
		||||
        query.setPageSize((int)jsonObject.get("pageSize"));
 | 
			
		||||
        query.setPageNum((int)jsonObject.get("pageNum"));
 | 
			
		||||
        String querySql="";//查询条件
 | 
			
		||||
        JSONObject param= (JSONObject)jsonObject.get("param");
 | 
			
		||||
        if (param.getStr("出库类型")!=null&¶m.getStr("出库类型").length()>0){
 | 
			
		||||
            querySql=querySql+" and 出库类型 like '%"+param.getStr("出库类型")+"%'";
 | 
			
		||||
        }
 | 
			
		||||
        if (param.getStr("任务号")!=null&¶m.getStr("任务号").length()>0){
 | 
			
		||||
            querySql=querySql+" and 任务号 like '%"+param.getStr("任务号")+"%'";
 | 
			
		||||
        }
 | 
			
		||||
        if (param.getStr("子任务号")!=null&¶m.getStr("子任务号").length()>0){
 | 
			
		||||
            querySql=querySql+" and 子任务号 like '%"+param.getStr("子任务号")+"%'";
 | 
			
		||||
        }
 | 
			
		||||
        if (param.getStr("库区")!=null&¶m.getStr("库区").length()>0){
 | 
			
		||||
            querySql=querySql+" and 库区 like '%"+param.getStr("库区")+"%'";
 | 
			
		||||
        }
 | 
			
		||||
        if (param.getStr("创建日期")!=null&¶m.getStr("创建日期").length()>0){
 | 
			
		||||
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 | 
			
		||||
            querySql=querySql+" and 创建时间 >= '"+sdf.format(param.getJSONArray("创建日期").getDate(0))+"'";
 | 
			
		||||
            querySql=querySql+" and 创建时间 <= '"+sdf.format(param.getJSONArray("创建日期").getDate(1))+"'";
 | 
			
		||||
        }
 | 
			
		||||
        /* 基础sql数据查询*/
 | 
			
		||||
    private static /* 基础sql数据查询*/
 | 
			
		||||
            String sql=" select t.id,bt.NAME as '单据类型',pt.sourceType as '出库类型',pt.id as '任务号',t.BILLCODE as '子任务号', "
 | 
			
		||||
            +"    z.NAME as '库区',ptd.LINE_NUMBER as '拣货行' ,pt.UPDATE_TIME as '创建时间',t.dateBill3 as '生成合单任务时间', "
 | 
			
		||||
            +"    t.dateBill1 as '下发时间',t.OPERATE_TIME as '拣货时间',t.ARRIVAL_TIME as '清点时间',t.operator_Date as '合单时间', "
 | 
			
		||||
| 
						 | 
				
			
			@ -76,6 +51,32 @@ public class JianHuoXiaoLvController {
 | 
			
		|||
            +"  left join LOCATION loc on loc.id=t.SRC_LOC_ID "
 | 
			
		||||
            +"  left join [ZONE] z on z.id=loc.ZONE_ID "
 | 
			
		||||
            +"  where t.PLAN_QUANTITY>0 ";
 | 
			
		||||
    @PostMapping("/queryList")
 | 
			
		||||
    public Result queryList(@RequestBody String  json) {
 | 
			
		||||
        /* 返回data设置*/
 | 
			
		||||
        QueryPageUtil query =new QueryPageUtil();
 | 
			
		||||
        JSONObject jsonObject= JSONUtil.parseObj(json);
 | 
			
		||||
        query.setPageSize((int)jsonObject.get("pageSize"));
 | 
			
		||||
        query.setPageNum((int)jsonObject.get("pageNum"));
 | 
			
		||||
        String querySql="";//查询条件
 | 
			
		||||
        JSONObject param= (JSONObject)jsonObject.get("param");
 | 
			
		||||
        if (param.getJSONArray("出库类型").size()>0){
 | 
			
		||||
            querySql=querySql+" and 出库类型 in ("+ StringUtils.strInSql(JSONUtil.toList(param.getJSONArray("出库类型"), String.class))+")";
 | 
			
		||||
        }
 | 
			
		||||
        if (param.getStr("任务号")!=null&¶m.getStr("任务号").length()>0){
 | 
			
		||||
            querySql=querySql+" and 任务号 like '%"+param.getStr("任务号")+"%'";
 | 
			
		||||
        }
 | 
			
		||||
        if (param.getStr("子任务号")!=null&¶m.getStr("子任务号").length()>0){
 | 
			
		||||
            querySql=querySql+" and 子任务号 like '%"+param.getStr("子任务号")+"%'";
 | 
			
		||||
        }
 | 
			
		||||
        if (param.getJSONArray("库区")!=null&¶m.getJSONArray("库区").size()>0){
 | 
			
		||||
            querySql=querySql+" and 库区 in ("+ StringUtils.strInSql(JSONUtil.toList(param.getJSONArray("库区"), String.class))+")";
 | 
			
		||||
        }
 | 
			
		||||
        if (param.getStr("创建日期")!=null&¶m.getStr("创建日期").length()>0){
 | 
			
		||||
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 | 
			
		||||
            querySql=querySql+" and 创建时间 >= '"+sdf.format(param.getJSONArray("创建日期").getDate(0))+"'";
 | 
			
		||||
            querySql=querySql+" and 创建时间 <= '"+sdf.format(param.getJSONArray("创建日期").getDate(1))+"'";
 | 
			
		||||
        }
 | 
			
		||||
        /* 当前页数据*/
 | 
			
		||||
        int pageNum = query.getPageNum();//当前页
 | 
			
		||||
        int pageSize = query.getPageSize();//条数
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +98,18 @@ public class JianHuoXiaoLvController {
 | 
			
		|||
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
    @PostMapping("/inputPt")
 | 
			
		||||
    public Result inputPt(@RequestBody String  json) {
 | 
			
		||||
        String sqlInput=" select 出库类型 as 'name' from ( "
 | 
			
		||||
                +sql
 | 
			
		||||
                +"  ) t "
 | 
			
		||||
                +" WHERE 出库类型 is not null group by 出库类型 ";
 | 
			
		||||
        List<String> ptList = entityManager.createNativeQuery(sqlInput).getResultList();
 | 
			
		||||
 | 
			
		||||
        Result result=Result.result(200,"操作成功",1, ptList);
 | 
			
		||||
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
    @PostMapping(value = "/download")
 | 
			
		||||
    public void exportCompany(HttpServletResponse response, @RequestBody String  json) throws Exception {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -137,7 +149,7 @@ class JhXl implements Serializable {
 | 
			
		|||
    @Transient
 | 
			
		||||
    private Map<String,int[]> mergeData=new HashMap() {{
 | 
			
		||||
        put("单据类型", new int[]{1, 1});
 | 
			
		||||
    }};;
 | 
			
		||||
    }};
 | 
			
		||||
 | 
			
		||||
    public void setMergeData(int[] sap,int[] area){
 | 
			
		||||
        int[] mn={1,1};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
package com.yc.wms.utils;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public class StringUtils {
 | 
			
		||||
    /*把list集合转为 in sql语句*/
 | 
			
		||||
    public static String strInSql(List<String> strList){
 | 
			
		||||
        StringBuffer sb = new StringBuffer();
 | 
			
		||||
        if (strList.size()<1){
 | 
			
		||||
            System.out.println("list集合为空");
 | 
			
		||||
        }
 | 
			
		||||
        for (int i = 0; i< strList.size(); i++){
 | 
			
		||||
            if(sb.length()<1){
 | 
			
		||||
                sb.append("'"+ strList.get(i)+"'");
 | 
			
		||||
            }else {
 | 
			
		||||
                sb.append(",'"+ strList.get(i)+"'");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return sb.toString();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue