Commit ff1e87ab sunke

Merge remote-tracking branch 'origin/master'

2 个父辈 2154b3a0 5a7c164e
......@@ -59,7 +59,7 @@ public class StatusBean {
* 0=离线,1=正常运行中, 2=急停,
* 3=故障(气压检测不到等,用msg发送详细故障说明)
* ,4=警告(用msg发送提醒,如出库到达工位但是没有工人操作)
* 5=调试中,6入库执行中,7入仓位完成,8入库失败, 9出库执行中,10出仓位完成,11出库失败,12移栽出库,13 重置中,14 扫码入库失败
* 5=调试中,6入库执行中,7入仓位完成,8入库失败, 9出库执行中,10出仓位完成,11出库完成,12移栽出库,13 重置中,14 扫码入库失败
*/
private int status;
/// <summary>
......
......@@ -327,6 +327,8 @@ public class BaseDeviceHandler implements IDeviceHandler {
storagePos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds);
} else {
log.info("料仓" + storageCid + "有出库任务未完成,不允许入库");
throw new ValidateException("error.storage.outNotEnd", "料仓{0}有出库任务未完成,不允许入库", new String[]{storageCid});
}
}
if (storagePos == null) {
......
......@@ -353,6 +353,7 @@ public class NLShelfHandler extends BaseDeviceHandler {
String orderNo = liteOrder.getOrderNo();
String orderFinishedTxt = MessageUtils.getText("smfcore.order.finished", new String[]{orderNo}, request.getLocale(), "工单["+orderNo+"]的任务已全部完成");
dataMap.put("orderFinishedTxt",orderFinishedTxt);
log.info("工单完成,返回 orderFinishedTxt, "+orderFinishedTxt);
}
}
return ResultBean.newOkResult( "smfcore.shelf.msg.outConfirm", "出库完成, 库位[{0}]灭灯", new String[]{inPos.getPosName()} ,dataMap);
......
......@@ -12,6 +12,7 @@ import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.enums.ORDER_COLOR;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.rest.dto.StorageDto;
import com.neotel.smfcore.core.storage.rest.dto.StorageSearchDto;
......@@ -202,6 +203,30 @@ public class StorageController {
}
return storageDtos;
}
@ApiOperation("料架设置页面:一键亮灯")
@PostMapping(value = "/shelfLight")
public ResultBean shelfLight( @RequestBody Map<String,String> params) {
String storageId=params.get("storageId");
Storage storage = dataCache.getStorageById(storageId);
if (storage == null) {
log.error("Storage id is not exist");
throw new ValidateException("smfcore.storage.error.notExist", "未找到料仓{0}", new String[]{storageId});
}
//获取料架的所有库位号
List<StoragePos> usePos = storagePosManager.findNotEmptyByStorageId(storage.getId());
for (StoragePos pos :
usePos) {
String colorStr = ORDER_COLOR.BLUE.name();
String opStr = pos.getPosName() + "=" + colorStr;
DevicesStatusUtil.appendOp(storage.getCid(), "open", opStr);
log.info("操作库位[" + pos.getPosName() + "]" + "open" + " : " + opStr);
}
return ResultBean.newOkResult("");
}
@ApiOperation("返回所有料仓类型")
@GetMapping(value = "/typeList")
public List<String> typeList() {
......
......@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.system.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
import com.neotel.smfcore.core.report.bean.ChartItem;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.micron20031.bean.SpDailyLog;
import java.util.Date;
import java.util.List;
......@@ -13,4 +14,6 @@ public interface IDataLogDao extends IBaseDao {
List<ChartItem> checkOutChart(Date startDay, Date endDay, String partNumber);
List<DataLog> findHistory(String bid, int num);
List<SpDailyLog> getSpDailyLogs(Date start,Date end, String inoutType);
}
package com.neotel.smfcore.core.system.service.dao.impl;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.core.device.enums.OP;
......@@ -7,6 +8,7 @@ import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.report.bean.ChartItem;
import com.neotel.smfcore.core.system.service.dao.IDataLogDao;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.micron20031.bean.SpDailyLog;
import org.apache.logging.log4j.util.Strings;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
......@@ -65,5 +67,23 @@ public class DataLogDaoImpl extends AbstractBaseDao implements IDataLogDao {
return findByQuery(q);
}
@Override
public List<SpDailyLog> getSpDailyLogs(Date start,Date end, String inoutType) {
Criteria criteria = Criteria.where("updateDate").gte(start).lte(end);
if (ObjectUtil.isNotEmpty(inoutType)) {
criteria = criteria.and("inOutType").is(inoutType);
}
//过去一月
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(criteria),
Aggregation.project().and("updateDate").extractDayOfYear().as("label"),
Aggregation.group("label").count().as("value"),
Aggregation.project("value").and("searchType").previousOperation()
);
AggregationResults<SpDailyLog> results = getMongoTemplate().aggregate(agg, getEntityClass(), SpDailyLog.class);
return results.getMappedResults();
}
}
......@@ -2,9 +2,13 @@ package com.neotel.smfcore.core.system.service.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.micron20031.bean.SpDailyLog;
import java.util.Date;
import java.util.List;
public interface IDataLogManager extends IBaseManager<DataLog> {
List<DataLog> findUnFinishedTasks();
List<SpDailyLog> getSpDailyLogs(Date start, Date end, String inoutType);
}
......@@ -6,6 +6,7 @@ import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.system.service.dao.IDataLogDao;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.micron20031.bean.SpDailyLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
......@@ -14,6 +15,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@Service
......@@ -63,4 +65,10 @@ public class DataLogManagerImpl implements IDataLogManager {
}
return unFinishedTasks;
}
@Override
public List<SpDailyLog> getSpDailyLogs(Date start, Date end, String inoutType){
return dataLogDao.getSpDailyLogs(start,end,inoutType);
}
}
......@@ -32,7 +32,8 @@ public class Micron20031Menu {
Menu report = Menu.CreatePMenu("报表", 1, "report","inOutData",null);
//Report菜单
MenuInit.addMenu(menuLabel,report, 121, "Material Movement", "movementReport", "system/movementReport/index","movementReport");
MenuInit.addMenu(menuLabel,report, 120, "AllReport", "allReport", "micron/allReport/index","allReport");
MenuInit.addMenu(menuLabel,report, 121, "Material Movement", "movementReport", "micron/movementReport/index","movementReport");
MenuInit.addMenu(menuLabel,report, 122, "Inventory", "inventoryReport", "system/inventoryReport/index","inventoryReport");
MenuInit.addMenu(menuLabel,report, 123, "Abnormality", "abnormReport", "system/abnormReport/index","abnormReport");
MenuInit.addMenu(menuLabel,report, 124, "Performance", "performanceReport", "system/performanceReport/index","performanceReport");
......
package com.neotel.smfcore.custom.micron20031;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.system.rest.bean.dto.TaskDto;
import com.neotel.smfcore.core.system.rest.bean.mapstruct.TaskMapper;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.micron20031.bean.MInOutType;
import com.neotel.smfcore.custom.micron20031.bean.SpDailyLog;
import com.neotel.smfcore.custom.micron20031.bean.dto.SpDailyLogDto;
import com.neotel.smfcore.custom.micron20031.bean.dto.SpUnloadDto;
import com.neotel.smfcore.custom.micron20031.bean.query.SpReportQueryCondition;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.service.manager.IUserManager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
@Slf4j
@Api(tags = "20031:Report 报表")
@RestController
@RequestMapping("/rest/micron/sp")
@RequiredArgsConstructor
public class MicronReportController {
@Autowired
private TaskService taskService;
@Autowired
private IDataLogManager dataLogManager;
@Autowired
private final TaskMapper taskMapper;
@Autowired
private DataCache dataCache;
@Autowired
private IUserManager userManager;
private Query getQuery(SpReportQueryCondition criteria){
String un_End = "UN_END";
boolean unEnd = false;
boolean finished=false;
if (criteria.getStatus()!=null&& criteria.getStatus().equals(un_End)) {
criteria.setStatus(null);
unEnd = true;
}else if(criteria.getStatus()!=null&&criteria.getStatus().equals(OP_STATUS.FINISHED.name())){
criteria.setStatus(null);
finished=true;
}
Query query = QueryHelp.getQuery(criteria);
if (unEnd) {
query.addCriteria(Criteria.where("status").nin(OP_STATUS.END.name(), OP_STATUS.FINISHED.name()));
}else if(finished){
query.addCriteria(Criteria.where("status").in(OP_STATUS.END.name(), OP_STATUS.FINISHED.name()));
}
return query;
}
@ApiOperation("Material Movement 查询")
@GetMapping("/movement")
@AnonymousAccess
public PageData<TaskDto> queryMovement(SpReportQueryCondition criteria, Pageable pageable) {
Query query = getQuery(criteria);
PageData<DataLog> taskList = dataLogManager.findByPage(query, pageable);
PageData<TaskDto> result= taskMapper.toDto(taskList);
return result;
}
@ApiOperation("Material count 每天的出入库数量统计")
@GetMapping("/dailyLog")
@AnonymousAccess
public List<SpDailyLogDto> queryDailyLog(SpReportQueryCondition criteria ) {
Criteria c = null;
Date start=null;
Date end=new Date();
if (criteria.getUpdateDate().getFrom() != null && criteria.getUpdateDate().getTo() != null) {
c = Criteria.where("createDate").gte(criteria.getUpdateDate().getFrom()).lte(criteria.getUpdateDate().getTo());
start=criteria.getUpdateDate().getFrom() ;
end=criteria.getUpdateDate().getTo();
} else {
//过去一月
Calendar time = Calendar.getInstance();
time.setTime(new Date());
time.add(Calendar.MONTH, -1);
start = time.getTime();
c = Criteria.where("createDate").gte(time.getTime()).lte(new Date());
}
List<SpDailyLog> results = dataLogManager.getSpDailyLogs(start,end,"");
HashMap<String,SpDailyLogDto> dailyLogDtos=new HashMap<String,SpDailyLogDto>();
List<String> types=new ArrayList<>();
types.add(MInOutType.OFFLINE);
types.add(MInOutType.DESPOSIT);
types.add(MInOutType.REMOVED);
types.add(MInOutType.RETURNED);
types.add(MInOutType.WITHDRAWN);
for (String type :types) {
List<SpDailyLog> logs=dataLogManager.getSpDailyLogs(start,end,type );
for (SpDailyLog log :
logs) {
SpDailyLogDto dto= dailyLogDtos.getOrDefault(log.getLabel(),new SpDailyLogDto());
if(dto.getTypeCounts()==null){
dto.setTypeCounts(new HashMap<>());
}
dto.getTypeCounts().put(type,log.getValue());
dailyLogDtos.put(log.getLabel(),dto);
}
}
return new ArrayList<>(dailyLogDtos.values());
}
}
package com.neotel.smfcore.custom.micron20031.bean;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 每天的出入库数量统计
*/
@Data
public class SpDailyLog implements Serializable {
@ApiModelProperty("日期")
private String label;
private String inoutType;
private String storageName;
private int value;
}
package com.neotel.smfcore.custom.micron20031.bean.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.lang.reflect.MalformedParameterizedTypeException;
import java.util.HashMap;
@Data
public class SpDailyLogDto implements Serializable {
@ApiModelProperty("日期")
private String time;
private HashMap<String,Integer> typeCounts;
}
package com.neotel.smfcore.custom.micron20031.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
@ApiModel("查询条件")
public class SpReportQueryCondition {
@QueryCondition(blurry = "barcode,partNumber,posName,sourceName,subSourceInfo,memo")
@ApiModelProperty("模糊搜索")
private String blurry;
@QueryCondition
@ApiModelProperty("条码编号")
private String barcode;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> updateDate;
@QueryCondition
@ApiModelProperty("來源ID")
private String sourceId;
@QueryCondition
@ApiModelProperty("任务状态")
private String status;
@QueryCondition(isDBId =true)
@ApiModelProperty("料仓Id")
private String storageId;
@QueryCondition
@ApiModelProperty("出入库类型")
private Integer type;
@ApiModelProperty("分组ID")
private String groupId;
@ApiModelProperty("CID数组")
private String[] cids;
@QueryCondition
@ApiModelProperty("来源名称")
private String sourceName;
@QueryCondition
@ApiModelProperty("出入库类型")
private String inOutType;
@QueryCondition
@ApiModelProperty("操作人")
private String operator;
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!