7.3号现场代码提交

main
Comair 1 year ago
parent 4a71c21c9b
commit 20031f309c
  1. 11
      shkj-wms/src/main/java/com/shkj/wms/controller/busin/TaskController.java
  2. 4
      shkj-wms/src/main/java/com/shkj/wms/controller/business/BaseBarcodesController.java
  3. 1
      shkj-wms/src/main/java/com/shkj/wms/controller/report/SysReportStockController.java
  4. 8
      shkj-wms/src/main/java/com/shkj/wms/plc/PlcEventTask.java
  5. 91
      shkj-wms/src/main/java/com/shkj/wms/scheduled/ScheduledTasks.java
  6. 2
      shkj-wms/src/main/java/com/shkj/wms/service/IBusinDataTaskService.java
  7. 6
      shkj-wms/src/main/java/com/shkj/wms/service/impl/BaseLocationServiceImpl.java
  8. 18
      shkj-wms/src/main/java/com/shkj/wms/service/impl/BusinDataTaskServiceImpl.java
  9. 11
      shkj-wms/src/main/java/com/shkj/wms/service/impl/WcsDeviceServiceImpl.java
  10. 2
      shkj-wms/src/main/java/com/shkj/wms/third/rcs/RCSUtil.java
  11. 5
      shkj-wms/src/main/java/com/shkj/wms/utils/PdfConvertHtmlUtil.java
  12. 1
      shkj-wms/src/main/resources/mapper/wms/SysStockMapper.xml

@ -9,6 +9,7 @@ import com.shkj.wms.plc.PlcEventTask;
import com.shkj.wms.plc.PlcEventTmpTask;
import com.shkj.wms.scheduled.ScheduledTasks;
import com.shkj.wms.service.IBusinEnptyContainerService;
import com.sun.org.apache.xpath.internal.operations.Bool;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@ -38,7 +39,7 @@ public class TaskController extends BaseController {
@Log(title = "手动调度任务流程",businessType = BusinessType.UPDATE)
@PostMapping("/exeTask")
@RepeatSubmit
public Result<Boolean> exeTask(){
public Result<Bool> exeTask(){
scheduledTasks.task();
return Result.ok();
}
@ -49,7 +50,7 @@ public class TaskController extends BaseController {
@Log(title = "执行PLC相关任务",businessType = BusinessType.UPDATE)
@PostMapping("/exePlcTmpTask")
@RepeatSubmit
public Result<Boolean> exePlcTmpTask(){
public Result<Bool> exePlcTmpTask(){
plcEventTmpTask.init();
return Result.ok();
}
@ -60,7 +61,7 @@ public class TaskController extends BaseController {
@Log(title = "执行PLC相关任务",businessType = BusinessType.UPDATE)
@PostMapping("/exePlcTask")
@RepeatSubmit
public Result<Boolean> exePlcTask(){
public Result<Bool> exePlcTask(){
plcEventTask.init();
return Result.ok();
}
@ -71,7 +72,7 @@ public class TaskController extends BaseController {
@Log(title = "空治具出库流程",businessType = BusinessType.UPDATE)
@PostMapping("/exeEmptyContainerFromWare")
@RepeatSubmit
public Result<Boolean> exeEmptyContainerFromWare(){
public Result<Bool> exeEmptyContainerFromWare(){
iBusinEnptyContainerService.emptyContainerFromWare();
return Result.ok();
}
@ -82,7 +83,7 @@ public class TaskController extends BaseController {
@Log(title = "空治具出库流程",businessType = BusinessType.UPDATE)
@PostMapping("/intask")
@RepeatSubmit
public Result<Boolean> intask(Long taskId,Long containerId){
public Result<Bool> intask(Long taskId,Long containerId){
scheduledTasks.inTask(taskId,containerId);
return Result.ok();
}

@ -13,8 +13,12 @@ import com.shkj.wms.service.IBaseBarcodesOutService;
import com.shkj.wms.service.IBaseGoodsDataService;
import com.shkj.wms.vo.BaseBarcodesOutTaskVo;
import com.shkj.wms.vo.BaseBarcodesOutVo;
import com.shkj.wms.vo.BaseContainerVo;
import com.shkj.wms.vo.BaseInOutQtyVo;
import com.sun.org.apache.xpath.internal.operations.Bool;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;

@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

@ -339,7 +339,7 @@ public class PlcEventTask {
String thirdBarcode = pointMap.get(thirdBarAddress).toString().trim();
String containerCode = pointMap.get(containerCodeAddress).toString().trim();
// containerCode=containerCode.substring(0,containerCode.length()-1);
log.info("治具编号"+containerCode);
log.info("治具编号"+containerCode +"first:"+firstBarcode+"second:"+secondBarcode+"third:"+thirdBarcode);
//连续读到相同治具编号时不生成新任务
String redisContainerCode = redisTemplate.opsForValue().get("autoTask").toString();
if (redisContainerCode.equals(containerCode)){
@ -758,7 +758,7 @@ public class PlcEventTask {
if(redisTask != null){
return;
}
log.error("立库输送线读取的任务号:"+taskId);
log.info("立库输送线读取的任务号:"+taskId);
if (taskId!=null&&taskId !=0) {
//获取任务信息
BusinDataTask businDataTask = iBusinDataTaskService.getById(taskId);
@ -968,7 +968,7 @@ public class PlcEventTask {
//组装线前杠正常放行
if(pointMap.containsKey(frontPoint) && Boolean.valueOf(String.valueOf(pointMap.get(frontPoint)))){
log.error("组装线前杠正常放行");
log.info("组装线前杠正常放行");
PlcOperate plcOperate= plcInit.getPlcOperateByIp(baseDevicePlcVo.getPlcIp());
TaskwriteMap.put(frontPointValueType, "False");
taskidMap.put(frontPoint, TaskwriteMap);
@ -980,7 +980,7 @@ public class PlcEventTask {
//组装线后杠正常放行
//组装线现分为一个点位,暂时注释,后续打开
if(pointMap.containsKey(afterPoint) && Boolean.valueOf(String.valueOf(pointMap.get(afterPoint)))){
log.error("组装线后杠正常放行");
log.info("组装线后杠正常放行");
PlcOperate plcOperate = plcInit.getPlcOperateByIp(baseDevicePlcVo.getPlcIp());
TaskwriteMap.put(afterPointValueType, "False");
taskidMap.put(afterPoint, TaskwriteMap);

@ -175,7 +175,7 @@ public class ScheduledTasks {
}
// @PostConstruct
// @Scheduled(cron = "0/3 * * * * ? ")
@Scheduled(cron = "0/3 * * * * ? ")
@Transactional(rollbackFor = Exception.class)
public void task() {
log.info("开始获取需要执行的任务");
@ -225,6 +225,9 @@ public class ScheduledTasks {
taskQueryBo.setTaskType("19");
List<BusinDataTaskVo> businDataTaskVo19 = iBusinDataTaskService.selectBusinDataTask1(taskQueryBo);
businDataTaskVos.addAll(businDataTaskVo19);
taskQueryBo.setTaskType("21");
List<BusinDataTaskVo> businDataTaskVo21 = iBusinDataTaskService.selectBusinDataTask1(taskQueryBo);
businDataTaskVos.addAll(businDataTaskVo21);
for (BusinDataTaskVo businDataTaskVo : businDataTaskVos) {
String taskType = businDataTaskVo.getTaskType();
@ -917,18 +920,7 @@ public class ScheduledTasks {
basePointDeviceVo = baseLocationPlcMapper.selectBasePointByGroupno(pointQueryBo).get(1);
}
} else {
Result<BaseLocationVo> baseLocationVoResult = iBaseLocationService.queryById(businDataTaskVo.getLocationId());
List<BusinDataTaskGoodsVo> businDataTaskGoodsVos = iBusinDataTaskGoodsService.selectBusinTaskGoodsByTaskCode(businDataTaskVo.getId());
BusinTaskExeBo exeBo = new BusinTaskExeBo();
exeBo.setTaskCode(taskId);
exeBo.setBusinDataTaskGoodsVo(businDataTaskGoodsVos);
exeBo.setContainerId(containerId);
exeBo.setBaseLocationVo(baseLocationVoResult.getData());
exeBo.setTransNo("1");
exeBo.setTransQual("1");
iPutInOutStorageService.exeTaskPutinStorage(exeBo);
NUMBER = false;
//先入待冲孔区
@ -944,6 +936,16 @@ public class ScheduledTasks {
//获取货位及巷道;
String tunnel = locationVo.getTunnel();
businDataTaskVo.setTunnel(tunnel);
// Result<BaseLocationVo> baseLocationVoResult = iBaseLocationService.queryById(locationVo.getId());
List<BusinDataTaskGoodsVo> businDataTaskGoodsVos = iBusinDataTaskGoodsService.selectBusinTaskGoodsByTaskCode(businDataTaskVo.getId());
BusinTaskExeBo exeBo = new BusinTaskExeBo();
exeBo.setTaskCode(taskId);
exeBo.setBusinDataTaskGoodsVo(businDataTaskGoodsVos);
exeBo.setContainerId(containerId);
exeBo.setBaseLocationVo(locationVo);
exeBo.setTransNo("1");
exeBo.setTransQual("1");
iPutInOutStorageService.exeTaskPutinStorage(exeBo);
//获取巷道对应的立库输送线接驳口
pointQueryBo.setTunnel(tunnel);
pointQueryBo.setDirection("0");
@ -1076,6 +1078,7 @@ public class ScheduledTasks {
List<SysStockDetail> list = iSysStockDetailService.list(new LambdaQueryWrapper<SysStockDetail>()
.in(SysStockDetail::getGoodsNo, goodsno)
.eq(SysStockDetail::getQty, "1")
.ne(SysStockDetail::getOutQty ,"1" )
.isNotNull(SysStockDetail::getLocationId));
//查询库存并返回库位信息
BusinTaskExeBo businTaskExeBo = iBusinDataTaskService.outboundInfo(businDataTaskGoodsVos, String.valueOf(businDataTaskVo.getId()));
@ -1083,9 +1086,11 @@ public class ScheduledTasks {
if (ObjectUtils.isNotEmpty(list)) {
BusinDataTask businDataTask = iBusinDataTaskService.getById(businDataTaskVo.getId());
if (ObjectUtils.isNotEmpty(businDataTask) && ObjectUtils.isNotEmpty(businDataTask.getFromLayer())) {
if (ObjectUtils.isNotEmpty(businTaskExeBo)){
////生成出库单
Result<String> billResult = iPutInOutStorageService.exeTaskPutinStorage(businTaskExeBo);
businDataTask.setTransId(billResult.getData());
}
//添加货位预占和库存预占
//获取货位信息
BaseLocation location = iBaseLocationService.getById(businDataTask.getLocationId());
@ -1133,6 +1138,9 @@ public class ScheduledTasks {
businDataTask.setDistinction(businDataTaskVo.getDistinction());
iBusinDataTaskService.saveOrUpdate(businDataTask);
businDataTaskVo = BeanUtil.toBean(businDataTask, BusinDataTaskVo.class);
}else {
businDataTaskVo.setExceptionMsg("当前开放的货位已无当前库存");
businDataTaskVo.setTaskStatus("-3");
}
}else {
@ -1384,6 +1392,36 @@ public class ScheduledTasks {
}
else if(taskType.equals(TaskTypeEnum.punching_delivery.getValue())){
}
else if(taskType.equals(TaskTypeEnum.replenished_in.getValue())){
String agvno = null;
if (businDataTaskVo.getTaskPath().contains("manMade")) {
List agvtaskType=new ArrayList();
agvtaskType.add("15");
agvtaskType.add("12");
BusinDataTask manMade01 = iBusinDataTaskService.getOne(new LambdaQueryWrapper<BusinDataTask>()
.in(BusinDataTask::getTaskType, agvtaskType)
.eq(BusinDataTask::getContainerId, businDataTaskVo.getContainerId())
.eq(BusinDataTask::getTaskStatus, "2")
.orderByDesc(BusinDataTask::getId)
.last("limit 1"));
if (ObjectUtils.isNotEmpty(manMade01)) {
agvno = manMade01.getAgvNo();
}
} else if (businDataTaskVo.getTaskPath().contains("Artificial")) {
String idArr = redisTemplate.opsForValue().get(RedisConstant.Replenishment).toString();
String[] idArrs = idArr.split("_");
agvno = idArrs[1];
}
List<BusinDataTaskGoodsVo> goodsVos = iBusinDataTaskGoodsService.selectBusinTaskGoodsByTaskCode(taskId);
List<String> goodsNoStr = goodsVos.stream().map(e -> e.getGoodsNo()).collect(Collectors.toList());
iBusinDataTaskService.runReplenishIn(businDataTaskVo,agvno);
Result<Boolean> booleanResult = iPutInOutStorageService.reduceInventory(taskId,goodsNoStr);
}
else if (taskType.equals("21")){
// 冲孔出库
//待冲孔区货位
Long abnormalArea =Long.valueOf(sysParameterService.selectConfigByKey(ParameterConstants.ParameterSystem.punching_area));
@ -1507,33 +1545,6 @@ public class ScheduledTasks {
businDataTaskVo.setTaskStatus("-3");
}
}
else if(taskType.equals(TaskTypeEnum.replenished_in.getValue())){
String agvno = null;
if (businDataTaskVo.getTaskPath().contains("manMade")) {
List agvtaskType=new ArrayList();
agvtaskType.add("15");
agvtaskType.add("12");
BusinDataTask manMade01 = iBusinDataTaskService.getOne(new LambdaQueryWrapper<BusinDataTask>()
.in(BusinDataTask::getTaskType, agvtaskType)
.eq(BusinDataTask::getContainerId, businDataTaskVo.getContainerId())
.eq(BusinDataTask::getTaskStatus, "2")
.orderByDesc(BusinDataTask::getId)
.last("limit 1"));
if (ObjectUtils.isNotEmpty(manMade01)) {
agvno = manMade01.getAgvNo();
}
} else if (businDataTaskVo.getTaskPath().contains("Artificial")) {
String idArr = redisTemplate.opsForValue().get(RedisConstant.Replenishment).toString();
String[] idArrs = idArr.split("_");
agvno = idArrs[1];
}
List<BusinDataTaskGoodsVo> goodsVos = iBusinDataTaskGoodsService.selectBusinTaskGoodsByTaskCode(taskId);
List<String> goodsNoStr = goodsVos.stream().map(e -> e.getGoodsNo()).collect(Collectors.toList());
iBusinDataTaskService.runReplenishIn(businDataTaskVo,agvno);
Result<Boolean> booleanResult = iPutInOutStorageService.reduceInventory(taskId,goodsNoStr);
}
//统一提交任务数据
iBusinDataTaskService.saveOrUpdate(BeanUtil.toBean(businDataTaskVo, BusinDataTask.class));
}
@ -1823,7 +1834,7 @@ public class ScheduledTasks {
int randomoperands = (int) Math.round(Math.random() * 1000);
String taskCode = "T_" + DateUtils.dateTimeNow() + randomoperands;
task.setTaskCode(taskCode);
task.setTaskType("4");
task.setTaskType("21");
task.setBatch(DateUtils.getDate());
task.setPriority("2");
task.setIsTop("0");

@ -155,7 +155,7 @@ public interface IBusinDataTaskService extends IService<BusinDataTask> {
/**
* 可视化大屏统计出入任务数量
* @param
* @param bo
* @return
*/
List<DataScreeTaskqtyVo> getCurDateTaskQty();

@ -719,7 +719,7 @@ public class BaseLocationServiceImpl extends ServiceImpl<BaseLocationMapper, Bas
}
//获取巷道内库存数量最少并且空货位数最多的
log.info("保险杠分配之前----当前巷道:" + tunnel + " 目前任务数:" + taskNum + " 当前空货位数量:" + curEmptyNum + " 最小任务数:" + minTaskNum + " 最大空货位数:" + maxEmptyLocationNum);
log.info("保险杠分配之前----当前巷道:" + tunnel + " 目前任务数:" + taskNum + " 当前空货位数量:" + curEmptyNum + " 最小任务数:" + minTaskNum + " 最大空货位数:" + maxEmptyLocationNum+" 当前库存量:"+currGoodsQty);
if (minTaskNum == 0 && taskNum.equals(minTaskNum)) {
if (i != 0) {
if (currGoodsQty < minGoodsQty) {
@ -760,11 +760,9 @@ public class BaseLocationServiceImpl extends ServiceImpl<BaseLocationMapper, Bas
maxEmptyLocationNum = curEmptyNum;
}
log.info("保险杠分配之后----当前巷道:" + tunnel + " 目前任务数:" + taskNum + " 当前空货位数量:" + curEmptyNum + " 最小任务数:" + minTaskNum + " 最大空货位数:" + maxEmptyLocationNum);
log.info("保险杠分配之后----当前巷道:" + tunnel + " 目前任务数:" + taskNum + " 当前空货位数量:" + curEmptyNum + " 最小任务数:" + minTaskNum + " 最大空货位数:" + maxEmptyLocationNum+" 当前库存量:"+currGoodsQty);
}
//查找任务量最小并且库存量最少的巷道
log.info("巷道的任务数量:" + JsonUtil.toJSONString(tunnelResult));
//从选取的巷道中选择库位
if (tunnelResult.size() > 0) {

@ -217,8 +217,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
boolean numberAdd = false;
boolean proportionStatus = true;
if (ObjectUtils.isNotEmpty(redisTemplate.opsForValue().get(RedisConstant.out_plan_type))
&& redisTemplate.opsForValue().get(RedisConstant.out_plan_type).toString().contains("比例")) {
if (ObjectUtils.isNotEmpty(redisTemplate.opsForValue().get(RedisConstant.out_plan_type)) && redisTemplate.opsForValue().get(RedisConstant.out_plan_type).toString().contains("比例")) {
numberAdd = true;
//查询获取每个货区的比例
BaseStorageQueryListBo baseStorageQueryListBo = new BaseStorageQueryListBo();
@ -283,7 +282,8 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
List<String> dbTableColumnNames = pointDeviceout.stream().map(BasePointDeviceVo::getPointNo).collect(Collectors.toList());
String urgencyBefore = null;
String urgencyAfter = null;
for (String str : dbTableColumnNames) {
for (String str : dbTableColumnNames
) {
// TODO 中科 测试 需要还原
if (str.equals(ParameterConstants.ParameterSystem.assemble_point_after)) {
urgencyAfter = str;
@ -731,12 +731,12 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
List<BaseLocationVo> tunnelVo = baseLocationService.getTUunnel(good.getGoodsNo());
//log.info("查询到的保险杠所在的货位信息:"+JsonUtil.toJSONString(tunnelVo));
List<String> tunnelall = tunnelVo.stream().map(e -> e.getTunnel()).collect(Collectors.toList());
log.info("查询到保险杠所在的巷道:"+JsonUtil.toJSONString(tunnelall));
// log.info("查询到保险杠所在的巷道:"+JsonUtil.toJSONString(tunnelall));
//拿到任务数最少的巷道
String tunnelone=this.quickSort(tunnelall);
log.info("任务数最少的巷道:"+tunnelone);
List<BaseLocationVo> tunnelLocation = tunnelVo.stream().filter(e -> e.getTunnel().equals(tunnelone)).collect(Collectors.toList());
log.info("当前巷道的有库存的货位信息:"+JsonUtil.toJSONString(tunnelLocation));
// log.info("当前巷道的有库存的货位信息:"+JsonUtil.toJSONString(tunnelLocation));
List<Long> listlocationId=new ArrayList<>();
//生成出库明细
BusinTaskExeBo exeBo = new BusinTaskExeBo();
@ -935,18 +935,22 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
// TODO: 2024/6/27 出库时查询巷道任务数最少及库存量最多的
List<BaseLocationVo> tunnelVo = baseLocationService.getTUunnel(good.getGoodsNo());
if (tunnelVo !=null && tunnelVo.size()==0){
log.info("要出库的保险杠编号:"+good.getGoodsNo());
return null;
}
Map<String, Long> tunnelLocQtyDic = tunnelVo.stream().collect(Collectors.groupingBy(BaseLocationVo::getTunnel, Collectors.counting()));
//排序后的巷道货位数(降序)
Map<String, Integer> tunnelLocQtyDicSort = new LinkedHashMap<>();
tunnelLocQtyDic.entrySet().stream().sorted(Map.Entry.<String, Long>comparingByValue().reversed()).forEachOrdered(e -> tunnelLocQtyDicSort.put(e.getKey(), e.getValue().intValue()));
//log.info("查询到的保险杠所在的货位信息:"+JsonUtil.toJSONString(tunnelVo));
List<String> tunnelall = tunnelVo.stream().map(e -> e.getTunnel()).collect(Collectors.toList());
log.info("查询到保险杠所在的巷道:"+JsonUtil.toJSONString(tunnelall));
// log.info("查询到保险杠所在的巷道:"+JsonUtil.toJSONString(tunnelall));
//拿到任务数最少的巷道并且库存量是最大的
String tunnelone=this.quickSortTaskQty(tunnelLocQtyDicSort);
log.info("任务数最少的巷道:"+tunnelone);
List<BaseLocationVo> tunnelLocation = tunnelVo.stream().filter(e -> e.getTunnel().equals(tunnelone)).collect(Collectors.toList());
log.info("当前巷道的有库存的货位信息:"+JsonUtil.toJSONString(tunnelLocation));
//log.info("当前巷道的有库存的货位信息:"+JsonUtil.toJSONString(tunnelLocation));
List<Long> listlocationId=new ArrayList<>();
//生成出库明细
BusinTaskExeBo exeBo = new BusinTaskExeBo();

@ -21,7 +21,7 @@ import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
import java.util.stream.Collectors;
/**
* 设备管理Service业务层处理
@ -133,16 +133,17 @@ public class WcsDeviceServiceImpl extends ServiceImpl<WcsDeviceMapper, WcsDevice
BusinPlcStatus businStkStatus =(BusinPlcStatus)redisTemplate.opsForValue().get(redisStkKey);
businPlcStatuses.add(businStkStatus);
}
businPlcStatuses.stream().sorted(Comparator.comparing(BusinPlcStatus::getTunnel));
return businPlcStatuses;
List<BusinPlcStatus> collect = businPlcStatuses.stream().sorted(Comparator.comparing(BusinPlcStatus::getTunnel)).collect(Collectors.toList());
return collect;
}
@Override
public List<BusinAgvRealRedisInfo> getAGVRealStatesInfo() {
List<BusinAgvRealRedisInfo> list =(List<BusinAgvRealRedisInfo>)redisTemplate.opsForValue().get(RedisConstant.redisAgvRealInfo );
list.stream().sorted(Comparator.comparing(BusinAgvRealRedisInfo::getId));
return list;
List<BusinAgvRealRedisInfo> collect = list.stream().sorted(Comparator.comparing(BusinAgvRealRedisInfo::getId)).collect(Collectors.toList());
return collect;
}
}

@ -569,7 +569,7 @@ public class RCSUtil {
if(StringUtils.isNotEmpty(points)){
agvMap = JsonUtil.JsonStrToMap(points);
}
log.error("AGV的点位信息:"+agvMap.toString());
log.info("AGV的点位信息:"+agvMap.toString());
WcsPlcConnect conn = iWcsPlcConnectService.selectWcsPlcConnectById(plcId);

@ -4,6 +4,7 @@ import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.*;
@ -148,7 +149,7 @@ public class PdfConvertHtmlUtil {
public static String bufferedImageToBase64(BufferedImage bufferedImage) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
String png_base64 = "";
/* try {
try {
ImageIO.write(bufferedImage, "png", byteArrayOutputStream);// 写入流中
byte[] bytes = byteArrayOutputStream.toByteArray();// 转换成字节
BASE64Encoder encoder = new BASE64Encoder();
@ -158,7 +159,7 @@ public class PdfConvertHtmlUtil {
.replaceAll("\r", "");
} catch (IOException e) {
e.printStackTrace();
}*/
}
return png_base64;
}

@ -131,7 +131,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="vehicheColorLocationList" resultType="com.shkj.wms.vo.SysStockVCLocationVo" parameterType="com.shkj.wms.bo.SysReportStockQueryBo">
select count(distinct loc.id) as locQty, alltmp.stockqty as stockqty,
g.color, IFNULL(g.vehiche_model,'empty') as vehiche_model
,loc.tunnel ,sum(distinct emptyLoc.emptyLocQty) emptyLocQty

Loading…
Cancel
Save