@ -12,6 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.* ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
import java.io.File ;
import java.io.IOException ;
import java.text.SimpleDateFormat ;
import java.util.* ;
@ -42,6 +44,10 @@ public class DepositoryController {
@Autowired
StockTakingService stockTakingService ;
@Autowired
PlaceService placeService ;
/ * *
* 获取本月之前的月份
*
@ -310,6 +316,7 @@ public class DepositoryController {
/ * *
* 获取当前仓库下的库存
*
* @param dname
* @param list
* @return
@ -949,8 +956,7 @@ public class DepositoryController {
drCountbyDrName . add ( depositoryRecordByDate1 ) ;
show_data . put ( key . toString ( ) , ( ( ArrayList < Integer > ) drCountbyDrName ) . clone ( ) ) ;
}
}
else {
} else {
Future < Object > future = completionService . submit ( new distributeTasks ( type , 1 , userByPort , yesterdayData , depositoryName ) ) ;
futureList . add ( future ) ;
taskNum + = 1 ;
@ -1039,8 +1045,7 @@ public class DepositoryController {
depository_data . put ( "sourceListByMonth" , beforeInventoryByMonth ) ;
depository_data . put ( "ThisWeekInventory" , thisWeekInventoryByDName ) ;
depository_data . put ( "MapInventory" , beforeInventoryOnMap ) ;
}
else {
} else {
// 如果不是
depository_data . put ( "yesterdayData" , yesterdayData ) ;
depository_data . put ( "mapData" , mapData ) ;
@ -1058,60 +1063,6 @@ public class DepositoryController {
return resMap ;
}
// 用于分发任务
@Data
class distributeTasks implements Callable < Object > {
String type ; //请求类型
int taskType ; // 任务类型
UserByPort userByPort ; // 登录用户
Map < String , Integer > yesterdayData ; // 昨天的数据
List < String > depositoryName ; // 仓库名称
DepositoryService depositoryService ; // 操作depository的service
DepositoryRecordService depositoryRecordService ; // 操作订单的service
Map < String , Object > todayInventory ; // 当前仓库的额度
distributeTasks ( String type , int taskType , UserByPort userByPort , Map < String , Integer > yesterdayData , List < String > depositoryName ) {
this . taskType = taskType ; // 任务类型
this . type = type ; // 请求类型
this . userByPort = userByPort ; // 登录用户
this . yesterdayData = yesterdayData ; // 昨天的数据
this . depositoryName = depositoryName ; // 仓库名称
}
@Override
public Object call ( ) throws Exception {
// taskType 1为折线图2为饼图3为柱状图4为中国地图5为库存可视化中的折线图6为库存可视化中中国地图7为库存可视化中柱状图
Map < String , Object > result = new HashMap < > ( ) ;
if ( 1 = = taskType ) {
Map < String , Object > showData = getShowData ( type , userByPort , yesterdayData , depositoryName ) ;
result . put ( "show_data" , showData ) ;
} else if ( 2 = = taskType ) {
} else if ( 3 = = taskType ) {
List < Object > sourceList = getSourceList ( type ) ;
result . put ( "sourceList" , sourceList ) ;
} else if ( 4 = = taskType ) {
Map < String , Object > mapData = getMapData ( type ) ;
result . put ( "mapData" , mapData ) ;
} else if ( 5 = = taskType ) {
List < Object > beforeInventoryByMonth = getBeforeInventoryByMonth ( depositoryService , todayInventory , depositoryRecordService , userByPort ) ;
result . put ( "sourceListByMonth" , beforeInventoryByMonth ) ;
} else if ( 6 = = taskType ) {
Map < String , Object > thisWeekInventoryByDName = getThisWeekInventoryByDName ( depositoryService , depositoryRecordService , userByPort ) ;
result . put ( "ThisWeekInventory" , thisWeekInventoryByDName ) ;
} else if ( 7 = = taskType ) {
Map < String , Object > beforeInventoryOnMap = getBeforeInventoryOnMap ( depositoryService , depositoryRecordService , userByPort ) ;
result . put ( "MapInventory" , beforeInventoryOnMap ) ;
}
return result ;
}
}
// 用于获取折线图
public Map < String , Object > getShowData ( String type , UserByPort userByPort , Map < String , Integer > yesterdayData , List < String > depositoryName ) {
// 获取各仓库名称以及id
Map < String , Integer > depositoryAllNameAndId = depositoryService . findDepositoryAllNameAndId ( userByPort ) ;
@ -1166,43 +1117,9 @@ public class DepositoryController {
return show_data ;
}
@Data
class getApplicationRecordByDate implements Callable < Object > {
Object key ;
List < Long > days ;
Map < String , Integer > depositoryAllNameAndId ;
List < String > depositoryName ;
Map < String , Integer > yesterdayData ;
String type ;
Map < String , Object > show_data ;
getApplicationRecordByDate ( String type , Object key , List < Long > days , Map < String , Integer > depositoryAllNameAndId ) {
this . key = key ;
this . depositoryAllNameAndId = depositoryAllNameAndId ;
this . days = days ;
this . type = type ;
}
@Override
public Object call ( ) throws Exception {
int i ;
List < Integer > drCountbyDrName = new ArrayList < > ( ) ;
for ( i = days . size ( ) - 1 ; i > 0 ; i - - ) {
// 遍历 Map并计算各仓库的入库数
if ( i = = days . size ( ) - 1 ) {
depositoryName . add ( key . toString ( ) ) ;
}
Integer val = ( Integer ) depositoryAllNameAndId . get ( key ) ;
// 获取一段时间内的库存额度
Integer depositoryRecordByDate1 = depositoryRecordService . findApplicationRecordByDate ( days . get ( i - 1 ) , days . get ( i ) , Integer . parseInt ( type ) , val ) ;
drCountbyDrName . add ( depositoryRecordByDate1 ) ;
if ( i = = 2 ) {
yesterdayData . put ( key . toString ( ) , depositoryRecordByDate1 ) ;
}
}
show_data . put ( key . toString ( ) , drCountbyDrName ) ;
return null ;
}
}
// 用于获取折线图
//获取本月及之前月份各种类别入/出库总量
public List < Object > getSourceList ( String type ) {
@ -1237,82 +1154,6 @@ public class DepositoryController {
return sourceList ;
}
// 具体执行getSourceList逻辑
class getSourceListTask implements Callable < Object > {
String type ;
String start ;
String end ;
Map < String , Object > map ;
getSourceListTask ( Map < String , Object > map , String type , String start , String end ) {
this . map = map ;
this . type = type ;
this . start = start ;
this . end = end ;
}
@Override
public Object call ( ) throws Exception {
List < MaterialType > materialTypeAll = materialTypeService . findMaterialTypeNoParent ( ) ;
ExecutorService exs = Executors . newFixedThreadPool ( materialTypeAll . size ( ) ) ;
// 结果集
List < Future < Object > > futureList = new ArrayList < Future < Object > > ( ) ;
// 1.定义CompletionService
CompletionService < Object > completionService = new ExecutorCompletionService < Object > ( exs ) ;
for ( int j = 0 ; j < materialTypeAll . size ( ) ; j + + ) {
Map < String , Object > parm = new HashMap < > ( ) ;
parm . put ( "type" , Integer . parseInt ( type ) ) ;
if ( Integer . parseInt ( type ) = = 1 ) {
parm . put ( "state" , "已入库" ) ;
} else if ( Integer . parseInt ( type ) = = 2 ) {
parm . put ( "state" , "已出库" ) ;
}
parm . put ( "start" , start ) ;
parm . put ( "end" , end ) ;
parm . put ( "oldId" , materialTypeAll . get ( j ) . getOldId ( ) ) ;
//根据条件获取月份中物料的总额
// 测试
Future < Object > future = completionService . submit ( new findMaterialCountTaskForSourceList ( parm ) ) ;
futureList . add ( future ) ;
}
for ( int i = 0 ; i < materialTypeAll . size ( ) ; i + + ) {
Object result = null ;
try {
result = completionService . take ( ) . get ( ) ;
} catch ( InterruptedException e ) {
e . printStackTrace ( ) ;
} catch ( ExecutionException e ) {
e . printStackTrace ( ) ;
}
map . putAll ( ( Map < ? extends String , ? > ) result ) ;
}
return map ;
}
}
// 根据条件获取月份中物料的总额用于sourcelist
class findMaterialCountTaskForSourceList implements Callable < Object > {
Map < String , Object > map ;
findMaterialCountTaskForSourceList ( Map < String , Object > map ) {
this . map = map ;
}
@Override
public Object call ( ) throws Exception {
Map < String , Object > result = new HashMap < > ( ) ;
Integer materialCountByMonth1 = depositoryRecordService . findMaterialCountByMonth2 ( map ) ;
Long oldId = Long . valueOf ( map . get ( "oldId" ) . toString ( ) ) ;
MaterialType materialTypeByOldId = materialTypeService . findMaterialTypeByOldId ( oldId ) ;
result . put ( materialTypeByOldId . getTname ( ) , materialCountByMonth1 ) ;
return result ;
}
}
// 中国地图数据
public Map < String , Object > getMapData ( String type ) {
List < Object > mapDataList = new ArrayList < > ( ) ;
@ -1353,42 +1194,6 @@ public class DepositoryController {
return mapData ;
}
class findMapData implements Callable < Object > {
String type ;
MaterialType mt ;
Map < String , Object > previousMonth1 ;
findMapData ( Map < String , Object > previousMonth1 , String type , MaterialType mt ) {
this . previousMonth1 = previousMonth1 ;
this . type = type ;
this . mt = mt ;
}
@Override
public Object call ( ) throws Exception {
List < Object > productData = new ArrayList < > ( ) ;
List < Object > months1 = ( List < Object > ) previousMonth1 . get ( "months" ) ;
productData . add ( mt . getTname ( ) ) ;
for ( int j = months1 . size ( ) - 1 ; j > 0 ; j - - ) {
Map < String , Object > parm = new HashMap < > ( ) ;
parm . put ( "type" , Integer . parseInt ( type ) ) ;
if ( Integer . parseInt ( type ) = = 1 ) {
parm . put ( "state" , "已入库" ) ;
} else if ( Integer . parseInt ( type ) = = 2 ) {
parm . put ( "state" , "已出库" ) ;
}
parm . put ( "start" , months1 . get ( j ) ) ;
parm . put ( "end" , months1 . get ( j - 1 ) ) ;
parm . put ( "oldId" , mt . getOldId ( ) ) ;
//根据条件获取月份中物料的总额
// 测试
Integer materialCountByMonth1 = depositoryRecordService . findMaterialCountByMonth2 ( parm ) ;
productData . add ( materialCountByMonth1 ) ;
}
return productData ;
}
}
/ * *
* 根据物料编号查询所在仓库
*
@ -1420,7 +1225,6 @@ public class DepositoryController {
return null ;
}
/ * *
* 查找仓库内是否有物品
*
@ -1487,6 +1291,7 @@ public class DepositoryController {
/ * *
* 根据父级编号查询所有关联信息
*
* @param did 待查询仓库
* @return
* /
@ -1529,6 +1334,7 @@ public class DepositoryController {
/ * *
* 根据仓库编号查询与其有关的订单信息
*
* @param depositoryId 待查询仓库id
* @return
* /
@ -1543,6 +1349,7 @@ public class DepositoryController {
/ * *
* 查询当前仓库子仓库
*
* @param parentId
* @return
* /
@ -1561,6 +1368,7 @@ public class DepositoryController {
/ * *
* 查询当前仓库的管理员
*
* @param did 待查询仓库
* @param request
* @return
@ -1583,7 +1391,6 @@ public class DepositoryController {
return new RestResponse ( list , size , 200 ) ;
}
@GetMapping ( "/findPostByCompany" )
public RestResponse findPostByCompany ( @RequestParam ( "company" ) String company , HttpServletRequest request ) {
String token = request . getHeader ( "user-token" ) ;
@ -1630,7 +1437,6 @@ public class DepositoryController {
return new RestResponse ( depositoryRecordById ) ;
}
@GetMapping ( "/findDepositoryCountInfo" )
public RestResponse findDepositoryCountInfo ( HttpServletRequest request ) {
// 获取当前登录的用户
@ -1664,26 +1470,14 @@ public class DepositoryController {
return new RestResponse ( result ) ;
}
// 构造仓库二维码
@PostMapping ( "/createQrCode" )
public RestResponse createQrCode ( @RequestBody Map < String , Object > map ) {
// 通过雪花算法计算随机数
Snowflake snowflake = new Snowflake ( 10 , 10 , true ) ;
String qrCode = snowflake . nextIdStr ( ) ;
Integer depositoryId = ObjectFormatUtil . toInteger ( map . get ( "depositoryId" ) ) ;
Depository depository = depositoryService . findDepositoryById ( depositoryId ) ;
String qrCodeByDepository = depositoryService . findQrCodeByDepository ( depository . getId ( ) ) ;
if ( qrCodeByDepository = = null ) {
Map < String , Object > param = new HashMap < > ( ) ;
param . put ( "depositoryId" , depository . getId ( ) ) ;
param . put ( "qrCode" , qrCode ) ;
depositoryService . addQrCodeByDepository ( param ) ;
} else {
qrCode = qrCodeByDepository ;
}
String qrCode = depositoryService . findQrCodeByDepository ( depository . getId ( ) ) ;
try {
// 二维码保存信息
return RestResponse . CreateBarCode ( qrCode , depository . getDname ( ) ) ;
@ -1692,9 +1486,41 @@ public class DepositoryController {
}
}
@GetMapping ( "/allBarCodeImgForDepository" )
public void allBarCodeImgForDepository ( @RequestParam Map < String , Object > map , HttpServletRequest request , HttpServletResponse response ) {
// 获取当前仓库id
Integer id = ObjectFormatUtil . toInteger ( map . get ( "id" ) ) ;
// 获取当前仓库
Depository depository = depositoryService . findDepositoryById ( id ) ;
List < Place > placeByDid = placeService . findPlaceByDid ( depository . getId ( ) ) ;
List < File > qrCodeListForPlaces = new ArrayList < > ( ) ;
for ( Place place : placeByDid
) {
String qrCodeByDepository = placeService . findQrCodeByPlace ( place . getId ( ) ) ;
String qrCode = CreateQrCodeUtil . CreateBarCode128 ( qrCodeByDepository , depository . getDname ( ) + "-" + place . getCode ( ) , 60 , 200 ) ;
try {
File file = RestResponse . base64ToFile ( qrCode ) ;
qrCodeListForPlaces . add ( file ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
}
// 将其暂存到本地
String qrCodeByDepository = depositoryService . findQrCodeByDepository ( depository . getId ( ) ) ;
String qrCode = CreateQrCodeUtil . CreateBarCode128 ( qrCodeByDepository , depository . getDname ( ) , 60 , 200 ) ;
try {
File file = RestResponse . base64ToFile ( qrCode ) ;
qrCodeListForPlaces . add ( file ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
ZipMultiFileUtil . zipDownload ( response , depository . getDname ( ) + "图片.zip" , qrCodeListForPlaces ) ;
}
/ * *
* 用于获取当前仓库的所有子类
*
* @param d 待查询仓库
* @return
* /
@ -1731,4 +1557,207 @@ public class DepositoryController {
}
return false ;
}
// 用于分发任务
@Data
class distributeTasks implements Callable < Object > {
String type ; //请求类型
int taskType ; // 任务类型
UserByPort userByPort ; // 登录用户
Map < String , Integer > yesterdayData ; // 昨天的数据
List < String > depositoryName ; // 仓库名称
DepositoryService depositoryService ; // 操作depository的service
DepositoryRecordService depositoryRecordService ; // 操作订单的service
Map < String , Object > todayInventory ; // 当前仓库的额度
distributeTasks ( String type , int taskType , UserByPort userByPort , Map < String , Integer > yesterdayData , List < String > depositoryName ) {
this . taskType = taskType ; // 任务类型
this . type = type ; // 请求类型
this . userByPort = userByPort ; // 登录用户
this . yesterdayData = yesterdayData ; // 昨天的数据
this . depositoryName = depositoryName ; // 仓库名称
}
@Override
public Object call ( ) throws Exception {
// taskType 1为折线图2为饼图3为柱状图4为中国地图5为库存可视化中的折线图6为库存可视化中中国地图7为库存可视化中柱状图
Map < String , Object > result = new HashMap < > ( ) ;
if ( 1 = = taskType ) {
Map < String , Object > showData = getShowData ( type , userByPort , yesterdayData , depositoryName ) ;
result . put ( "show_data" , showData ) ;
} else if ( 2 = = taskType ) {
} else if ( 3 = = taskType ) {
List < Object > sourceList = getSourceList ( type ) ;
result . put ( "sourceList" , sourceList ) ;
} else if ( 4 = = taskType ) {
Map < String , Object > mapData = getMapData ( type ) ;
result . put ( "mapData" , mapData ) ;
} else if ( 5 = = taskType ) {
List < Object > beforeInventoryByMonth = getBeforeInventoryByMonth ( depositoryService , todayInventory , depositoryRecordService , userByPort ) ;
result . put ( "sourceListByMonth" , beforeInventoryByMonth ) ;
} else if ( 6 = = taskType ) {
Map < String , Object > thisWeekInventoryByDName = getThisWeekInventoryByDName ( depositoryService , depositoryRecordService , userByPort ) ;
result . put ( "ThisWeekInventory" , thisWeekInventoryByDName ) ;
} else if ( 7 = = taskType ) {
Map < String , Object > beforeInventoryOnMap = getBeforeInventoryOnMap ( depositoryService , depositoryRecordService , userByPort ) ;
result . put ( "MapInventory" , beforeInventoryOnMap ) ;
}
return result ;
}
}
@Data
class getApplicationRecordByDate implements Callable < Object > {
Object key ;
List < Long > days ;
Map < String , Integer > depositoryAllNameAndId ;
List < String > depositoryName ;
Map < String , Integer > yesterdayData ;
String type ;
Map < String , Object > show_data ;
getApplicationRecordByDate ( String type , Object key , List < Long > days , Map < String , Integer > depositoryAllNameAndId ) {
this . key = key ;
this . depositoryAllNameAndId = depositoryAllNameAndId ;
this . days = days ;
this . type = type ;
}
@Override
public Object call ( ) throws Exception {
int i ;
List < Integer > drCountbyDrName = new ArrayList < > ( ) ;
for ( i = days . size ( ) - 1 ; i > 0 ; i - - ) {
// 遍历 Map并计算各仓库的入库数
if ( i = = days . size ( ) - 1 ) {
depositoryName . add ( key . toString ( ) ) ;
}
Integer val = ( Integer ) depositoryAllNameAndId . get ( key ) ;
// 获取一段时间内的库存额度
Integer depositoryRecordByDate1 = depositoryRecordService . findApplicationRecordByDate ( days . get ( i - 1 ) , days . get ( i ) , Integer . parseInt ( type ) , val ) ;
drCountbyDrName . add ( depositoryRecordByDate1 ) ;
if ( i = = 2 ) {
yesterdayData . put ( key . toString ( ) , depositoryRecordByDate1 ) ;
}
}
show_data . put ( key . toString ( ) , drCountbyDrName ) ;
return null ;
}
}
// 具体执行getSourceList逻辑
class getSourceListTask implements Callable < Object > {
String type ;
String start ;
String end ;
Map < String , Object > map ;
getSourceListTask ( Map < String , Object > map , String type , String start , String end ) {
this . map = map ;
this . type = type ;
this . start = start ;
this . end = end ;
}
@Override
public Object call ( ) throws Exception {
List < MaterialType > materialTypeAll = materialTypeService . findMaterialTypeNoParent ( ) ;
ExecutorService exs = Executors . newFixedThreadPool ( materialTypeAll . size ( ) ) ;
// 结果集
List < Future < Object > > futureList = new ArrayList < Future < Object > > ( ) ;
// 1.定义CompletionService
CompletionService < Object > completionService = new ExecutorCompletionService < Object > ( exs ) ;
for ( int j = 0 ; j < materialTypeAll . size ( ) ; j + + ) {
Map < String , Object > parm = new HashMap < > ( ) ;
parm . put ( "type" , Integer . parseInt ( type ) ) ;
if ( Integer . parseInt ( type ) = = 1 ) {
parm . put ( "state" , "已入库" ) ;
} else if ( Integer . parseInt ( type ) = = 2 ) {
parm . put ( "state" , "已出库" ) ;
}
parm . put ( "start" , start ) ;
parm . put ( "end" , end ) ;
parm . put ( "oldId" , materialTypeAll . get ( j ) . getOldId ( ) ) ;
//根据条件获取月份中物料的总额
// 测试
Future < Object > future = completionService . submit ( new findMaterialCountTaskForSourceList ( parm ) ) ;
futureList . add ( future ) ;
}
for ( int i = 0 ; i < materialTypeAll . size ( ) ; i + + ) {
Object result = null ;
try {
result = completionService . take ( ) . get ( ) ;
} catch ( InterruptedException e ) {
e . printStackTrace ( ) ;
} catch ( ExecutionException e ) {
e . printStackTrace ( ) ;
}
map . putAll ( ( Map < ? extends String , ? > ) result ) ;
}
return map ;
}
}
// 根据条件获取月份中物料的总额用于sourcelist
class findMaterialCountTaskForSourceList implements Callable < Object > {
Map < String , Object > map ;
findMaterialCountTaskForSourceList ( Map < String , Object > map ) {
this . map = map ;
}
@Override
public Object call ( ) throws Exception {
Map < String , Object > result = new HashMap < > ( ) ;
Integer materialCountByMonth1 = depositoryRecordService . findMaterialCountByMonth2 ( map ) ;
Long oldId = Long . valueOf ( map . get ( "oldId" ) . toString ( ) ) ;
MaterialType materialTypeByOldId = materialTypeService . findMaterialTypeByOldId ( oldId ) ;
result . put ( materialTypeByOldId . getTname ( ) , materialCountByMonth1 ) ;
return result ;
}
}
class findMapData implements Callable < Object > {
String type ;
MaterialType mt ;
Map < String , Object > previousMonth1 ;
findMapData ( Map < String , Object > previousMonth1 , String type , MaterialType mt ) {
this . previousMonth1 = previousMonth1 ;
this . type = type ;
this . mt = mt ;
}
@Override
public Object call ( ) throws Exception {
List < Object > productData = new ArrayList < > ( ) ;
List < Object > months1 = ( List < Object > ) previousMonth1 . get ( "months" ) ;
productData . add ( mt . getTname ( ) ) ;
for ( int j = months1 . size ( ) - 1 ; j > 0 ; j - - ) {
Map < String , Object > parm = new HashMap < > ( ) ;
parm . put ( "type" , Integer . parseInt ( type ) ) ;
if ( Integer . parseInt ( type ) = = 1 ) {
parm . put ( "state" , "已入库" ) ;
} else if ( Integer . parseInt ( type ) = = 2 ) {
parm . put ( "state" , "已出库" ) ;
}
parm . put ( "start" , months1 . get ( j ) ) ;
parm . put ( "end" , months1 . get ( j - 1 ) ) ;
parm . put ( "oldId" , mt . getOldId ( ) ) ;
//根据条件获取月份中物料的总额
// 测试
Integer materialCountByMonth1 = depositoryRecordService . findMaterialCountByMonth2 ( parm ) ;
productData . add ( materialCountByMonth1 ) ;
}
return productData ;
}
}
}