no message

main
暴炳林 2024-09-30 14:04:56 +08:00
parent ad92e11877
commit 60a45927d7
7 changed files with 276 additions and 152 deletions

View File

@ -12119,7 +12119,7 @@
},
"node_modules/xlsx": {
"version": "0.18.5",
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
"resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz",
"integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
"dependencies": {
"adler-32": "~1.3.0",
@ -21202,7 +21202,7 @@
},
"xlsx": {
"version": "0.18.5",
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
"resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz",
"integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
"requires": {
"adler-32": "~1.3.0",

View File

@ -4,6 +4,22 @@
<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-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>&nbsp;&nbsp;
@ -57,9 +73,39 @@
</template>
<script>
import FileSaver from 'file-saver'
// eslint-disable-next-line no-unused-vars
import XLSX from "xlsx";
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]);
}
}]
},
//
columns: [
{
@ -78,7 +124,7 @@ export default {
label: '作业类型'
},
{
prop: '有效时',
prop: '有效时',
minWidth: '150px',
label: '有效时间'
},
@ -100,9 +146,10 @@ export default {
pageNum: 1,
total: 3,
param: {
日期:[]
},
loading: false,
checked: false,
checked: false
}
},
@ -127,7 +174,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 {}
}
@ -156,7 +203,7 @@ export default {
},
queryUser() {
//
this.$axios.post(this.$httpUrl + '/JianHuoXiaoLv/queryList', {
this.$axios.post(this.$httpUrl + '/GGZXiaoLv/queryList', {
pageSize: this.pageSize,
pageNum: this.pageNum,
param: this.param,
@ -180,36 +227,36 @@ export default {
this.queryUser();
},
down(){
this.downExcel();
this.exportToExcel();
},
downExcel() {
//
this.tableloding=true;
///Jianhuojiemian/downloadpost {responseType:'blob'}
//
this.$axios.post(this.$httpUrl + '/Xuliehaoqingdan/download', {
pageSize: this.pageSize,
pageNum: this.pageNum,
param: this.param,
},{responseType:'blob'}).then(res => {
this.tableloding=false;
//
this.downloadFile(res.data,'序列号库存清点'+ '数据', 'xlsx')
});
//
},
downloadFile(obj, name, suffix) {
//
const url = window.URL.createObjectURL(new Blob([obj]))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
const fileName = this.parseTime(new Date()) + '-' + name + '.' + suffix
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
// excelExcel
exportToExcel(){
/*const worksheet = XLSX.utils.json_to_sheet(this.tableData);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, 'table_data.xlsx');*/
const XLSX = require('xlsx')
console.log('XLSX',XLSX,FileSaver)
// 使 this.$nextTick dom
this.$nextTick(function () {
// false true:
const xlsxParam = { raw: true }
const wb = XLSX.utils.table_to_book(document.querySelector('#educe-table'), xlsxParam)
// excel
let fileName = '工作效率分析_' + new Date().getTime() + '.xlsx'
const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
//
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), fileName)
} catch (e) {
if (typeof console !== 'undefined') {
console.log(e, wbout)
}
}
return wbout
})
},
parseTime(time, cFormat) {
//

View File

@ -34,7 +34,7 @@
</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="exportToExcel"></el-button>
<el-button type="success" @click="rest"></el-button>&nbsp;&nbsp;
<el-checkbox v-model="checked" @change="Allquesr"></el-checkbox>
</el-form>
@ -65,6 +65,9 @@
</template>
<script>
// import * as XLSX from 'xlsx';
import FileSaver from 'file-saver'
import XLSX from 'xlsx'
export default {
data() {
return {
@ -192,37 +195,33 @@ export default {
this.pageNum=1;
this.queryUser();
},
down(){
this.downExcel();
},
downExcel() {
//
this.tableloding=true;
///Jianhuojiemian/downloadpost {responseType:'blob'}
//
this.$axios.post(this.$httpUrl + '/Xuliehaoqingdan/download', {
pageSize: this.pageSize,
pageNum: this.pageNum,
param: this.param,
},{responseType:'blob'}).then(res => {
this.tableloding=false;
//
this.downloadFile(res.data,'拣货表单'+ '数据', 'xlsx')
});
//
// excelExcel
exportToExcel(){
/*const worksheet = XLSX.utils.json_to_sheet(this.tableData);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, 'table_data.xlsx');*/
const XLSX = require('xlsx')
console.log('XLSX',XLSX,FileSaver)
// 使 this.$nextTick dom
this.$nextTick(function () {
// false true:
const xlsxParam = { raw: true }
const wb = XLSX.utils.table_to_book(document.querySelector('#educe-table'), xlsxParam)
// excel
let fileName = '拣货表单_' + new Date().getTime() + '.xlsx'
},
downloadFile(obj, name, suffix) {
//
const url = window.URL.createObjectURL(new Blob([obj]))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
const fileName = this.parseTime(new Date()) + '-' + name + '.' + suffix
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
//
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), fileName)
} catch (e) {
if (typeof console !== 'undefined') {
console.log(e, wbout)
}
}
return wbout
})
},
KuS(){
//

View File

@ -88,6 +88,9 @@
</template>
<script>
import FileSaver from 'file-saver'
// eslint-disable-next-line no-unused-vars
import XLSX from 'xlsx'
export default {
data() {
return {
@ -243,7 +246,7 @@ export default {
任务号:'',
子任务号:'',
库区:'',
创建日期:''
创建日期:[]
},
loading: false,
checked: false,
@ -326,36 +329,35 @@ export default {
this.queryUser();
},
down(){
this.downExcel();
this.exportToExcel();
},
downExcel() {
//
this.tableloding=true;
///Jianhuojiemian/downloadpost {responseType:'blob'}
//
this.$axios.post(this.$httpUrl + '/Xuliehaoqingdan/download', {
pageSize: this.pageSize,
pageNum: this.pageNum,
param: this.param,
},{responseType:'blob'}).then(res => {
this.tableloding=false;
//
this.downloadFile(res.data,'序列号库存清点'+ '数据', 'xlsx')
});
//
// excelExcel
exportToExcel(){
/*const worksheet = XLSX.utils.json_to_sheet(this.tableData);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, 'table_data.xlsx');*/
const XLSX = require('xlsx')
console.log('XLSX',XLSX,FileSaver)
// 使 this.$nextTick dom
this.$nextTick(function () {
// false true:
const xlsxParam = { raw: true }
const wb = XLSX.utils.table_to_book(document.querySelector('#educe-table'), xlsxParam)
// excel
let fileName = '拣货效率统计_' + new Date().getTime() + '.xlsx'
},
downloadFile(obj, name, suffix) {
//
const url = window.URL.createObjectURL(new Blob([obj]))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
const fileName = this.parseTime(new Date()) + '-' + name + '.' + suffix
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
//
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), fileName)
} catch (e) {
if (typeof console !== 'undefined') {
console.log(e, wbout)
}
}
return wbout
})
},
KuS(){
//

View File

@ -72,6 +72,9 @@
</template>
<script>
import FileSaver from 'file-saver'
// eslint-disable-next-line no-unused-vars
import XLSX from 'xlsx'
export default {
data() {
return {
@ -252,36 +255,35 @@ export default {
this.queryUser();
},
down(){
this.downExcel();
this.exportToExcel();
},
downExcel() {
//
this.tableloding=true;
///Jianhuojiemian/downloadpost {responseType:'blob'}
//
this.$axios.post(this.$httpUrl + '/Xuliehaoqingdan/download', {
pageSize: this.pageSize,
pageNum: this.pageNum,
param: this.param,
},{responseType:'blob'}).then(res => {
this.tableloding=false;
//
this.downloadFile(res.data,'序列号库存清点'+ '数据', 'xlsx')
});
//
// excelExcel
exportToExcel(){
/*const worksheet = XLSX.utils.json_to_sheet(this.tableData);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, 'table_data.xlsx');*/
const XLSX = require('xlsx')
console.log('XLSX',XLSX,FileSaver)
// 使 this.$nextTick dom
this.$nextTick(function () {
// false true:
const xlsxParam = { raw: true }
const wb = XLSX.utils.table_to_book(document.querySelector('#educe-table'), xlsxParam)
// excel
let fileName = '人效管理' + new Date().getTime() + '.xlsx'
},
downloadFile(obj, name, suffix) {
//
const url = window.URL.createObjectURL(new Blob([obj]))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
const fileName = this.parseTime(new Date()) + '-' + name + '.' + suffix
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
//
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), fileName)
} catch (e) {
if (typeof console !== 'undefined') {
console.log(e, wbout)
}
}
return wbout
})
},
parseTime(time, cFormat) {
//

View File

@ -2,6 +2,7 @@ package com.yc.wms.controller;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.sun.istack.NotNull;
import com.yc.wms.bean.Xuliehao;
import com.yc.wms.service.Xuliehaoqingdan;
import com.yc.wms.until.QueryPageUtil;
@ -17,10 +18,9 @@ import org.springframework.web.bind.annotation.RestController;
import javax.persistence.*;
import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@Slf4j
@ -39,11 +39,27 @@ public class GGZXiaoLvController {
query.setPageSize((int)jsonObject.get("pageSize"));
query.setPageNum((int)jsonObject.get("pageNum"));
JSONObject param= (JSONObject)jsonObject.get("param");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String startDate="2024-05-01";
String endDate=sdf.format(new Date());
if (param.getStr("日期")!=null&&param.getJSONArray("日期").size()>0){
startDate=sdf.format(param.getJSONArray("日期").getDate(0));
endDate=sdf.format(param.getJSONArray("日期").getDate(1));
}
/* 基础sql数据查询*/
String sql=" select agv.id,agv.robotJobId,agv.targetArea,agv.status,agv.createTime, "
+" agv.arrivalTime,agv.agvCode,agv.type,agv.classification,agv.founderName, "
+" agv.jobPriorityType "
+" from agvtask agv ";
String sql=" select Row_number() OVER(order by v.库区,v.工作站 asc) as id,v.库区, "
+" v.工作站,sum(v.有效时效) '有效时效', v.业务类型 ,sum(v.有效时效)/540 '有效时间占比' from ( "
+" select (case when left(agv.targetArea,1)='1' then '货架到人' when left(agv.targetArea,1)='2' then '料箱到人' end) as '库区', "
+" (agv.id) ID,(agv.robotJobId) as '任务号',left(agv.targetArea,3) as '工作站',(agv.status) as '状态', "
+" (CONVERT(VARCHAR,agv.createTime , 23)) as '创建时间', "
+" (agv.arrivalTime),(agv.agvCode) as '车子',(agv.type) as '类型',(agv.classification) as '业务类型', "
+" (agv.founderName) as '创建人', "
+" (agv.jobPriorityType) as '加急', (agv.leaveTime) as '到站时间',(agv.returnTime) as '返库时间', "
+" DATEDIFF(second,(agv.leaveTime), (agv.returnTime) )/60 as '有效时效' "
+" from agvtask agv "
+" where CONVERT(VARCHAR,agv.createTime , 23)>='"+startDate+"' "
+" and CONVERT(VARCHAR,agv.createTime , 23)<='"+endDate+"' ) v "
+" GROUP BY v.库区,v.工作站 ,v.业务类型 ";
String sqlCount = "select count(t.id) as nums from (" + sql+") t";
/* 总条数*/
List<Integer> counts = entityManager.createNativeQuery(sqlCount).getResultList();
@ -60,13 +76,73 @@ public class GGZXiaoLvController {
+" OFFSET "+ (pageNum-1) * pageSize +" ROWS "
+" FETCH NEXT "+pageSize+" ROWS ONLY; ";
/* 返回数据*/
List<GGZXl> returnList=new ArrayList<>();
/* 查询所有数据*/
List<GGZXl> jhXlList = entityManager.createNativeQuery(sqlFy, GGZXl.class).getResultList();
Result result=Result.result(200,"操作成功",Long.parseLong(counts.get(0).toString()), jhXlList);
List<GGZXl> ggzXlList = entityManager.createNativeQuery(sqlFy, GGZXl.class).getResultList();
/* 按SAP类型分组*/
Map<String, List<GGZXl>> groupedMap = ggzXlList.stream()
.collect(Collectors.groupingBy(ggzXl -> Objects.toString(ggzXl.get(), "unknown")));
/*排序获取建*/
List<String> sapKeys = panxu(groupedMap);
for (int i = 0; i < sapKeys.size(); i++) {
List<GGZXl> ggzXls=groupedMap.get(sapKeys.get(i));
GGZXl gz=ggzXls.get(0);
int l=1;//合并列
for (GGZXl ggzXl:ggzXls){
l=l+1;
}
Map<String,int[]> map=new HashMap<>();
map.put("库区", new int[]{l, 1});
gz.setMergeData(map);
returnList.addAll(ggzXls);
GGZXl xhz=new GGZXl();
xhz.set("汇总");
returnList.add(xhz);
}
GGZXl dhz=new GGZXl();
dhz.set("汇总");
dhz.setMergeData(new HashMap() {{
put("库区", new int[]{1, 2});
}});
returnList.add(dhz);
Result result=Result.result(200,"操作成功",Long.parseLong(counts.get(0).toString()), returnList);
return result;
}
public List<String> panxu( Map<String, List<GGZXl>> sapJhBdMap){
List<String> areaNames = new ArrayList<>(sapJhBdMap.keySet());
JSONObject jsonObject=new JSONObject();//排序建关联
int[] arr=new int[areaNames.size()];
for (int i = 0; i < areaNames.size(); i++) {
/* 获取类id*/
List<GGZXl> jhBdList=sapJhBdMap.get(areaNames.get(i));
GGZXl jhBd=jhBdList.get(0);
/* 添加id映射*/
jsonObject.accumulate(jhBd.getId()+"",areaNames.get(i));
/* 添加id排序*/
arr[i]=Integer.valueOf(jhBd.getId()+"");
}
int n=arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换 arr[j] 和 arr[j + 1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
List<String> keyList=new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
String keyName = jsonObject.get(arr[i]+"")+"";
keyList.add(keyName);
}
return keyList;
}
@PostMapping(value = "/download")
public void exportCompany(HttpServletResponse response, @RequestBody String json) throws Exception {
@ -92,25 +168,23 @@ class GGZXl implements Serializable {
/* 库区名称*/
private String ="";
private String ="";
private String ="";
private String ="";
private String ="";
@NotNull
@Transient
private Integer =0;
@NotNull
@Transient
private Integer =0;
@NotNull
@Transient
private Integer =0;
@NotNull
@Transient
private Integer =0;
private Date ;
private Date ;
private Integer ;
private Integer ;
@Transient
private Map<String,int[]> mergeData=new HashMap() {{
put("库区", new int[]{1, 1});
}};;
public void setMergeData(int[] sap,int[] area){
int[] mn={1,1};
Map<String,int[]> map=new HashMap<>();
map.put("sapName", sap);
map.put("areaName", area);
map.put("taskCount", mn);
map.put("formattedDate", mn);
this.mergeData = map;
}
put("库区", new int[]{0, 0});
}};
}

View File

@ -72,7 +72,7 @@ public class JianHuoXiaoLvController {
if (param.getJSONArray("库区")!=null&&param.getJSONArray("库区").size()>0){
querySql=querySql+" and 库区 in ("+ StringUtils.strInSql(JSONUtil.toList(param.getJSONArray("库区"), String.class))+")";
}
if (param.getStr("创建日期")!=null&&param.getStr("创建日期").length()>0){
if (param.getStr("创建日期")!=null&&param.getJSONArray("创建日期").size()>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))+"'";