Commit 7e1e2684 孙克

添加了一些注释

1 个父辈 416ab249
正在显示 37 个修改的文件 包含 764 行增加15 行删除
...@@ -40,6 +40,7 @@ SMF Core 采用经典的四层架构设计: ...@@ -40,6 +40,7 @@ SMF Core 采用经典的四层架构设计:
#### 2.2 api-gateway 层 #### 2.2 api-gateway 层
- REST API 接口定义 - REST API 接口定义
- 请求参数验证 - 请求参数验证
- 设备通信
- 响应格式化 - 响应格式化
- 权限控制 - 权限控制
......
...@@ -13,6 +13,12 @@ import org.springframework.context.annotation.Bean; ...@@ -13,6 +13,12 @@ import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
/**
* SMF Core 应用程序入口类
* 初始化Spring Boot应用并提供系统基础功能
* @author SMF Core Team
* @date 2022-02-25
*/
@RestController @RestController
@SpringBootApplication @SpringBootApplication
@Slf4j @Slf4j
......
...@@ -8,6 +8,12 @@ import io.swagger.annotations.ApiOperation; ...@@ -8,6 +8,12 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
/**
* 系统设置控制器
* 处理系统配置相关的REST API请求
* @author SMF Core Team
* @date 2022-03-04
*/
@Api("agv信息") @Api("agv信息")
@RequestMapping("/agv") @RequestMapping("/agv")
@RestController @RestController
......
package com.neotel.smfcore.apiGateway.device.common.rest; package com.neotel.smfcore.apiGateway.device.common.rest;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
...@@ -24,6 +23,13 @@ import com.neotel.smfcore.businessServices.barcode.service.manager.IBarcodeManag ...@@ -24,6 +23,13 @@ import com.neotel.smfcore.businessServices.barcode.service.manager.IBarcodeManag
import com.neotel.smfcore.businessServices.barcode.service.manager.IComponentManager; import com.neotel.smfcore.businessServices.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.businessServices.barcode.service.po.Barcode; import com.neotel.smfcore.businessServices.barcode.service.po.Barcode;
import com.neotel.smfcore.businessServices.barcode.service.po.Component; import com.neotel.smfcore.businessServices.barcode.service.po.Component;
/**
* 设备管理通用控制器
* 处理各类设备的通用REST API请求
* @author SMF Core Team
* @date 2022-02-28
*/
import com.neotel.smfcore.businessServices.barcode.utils.CodeResolve; import com.neotel.smfcore.businessServices.barcode.utils.CodeResolve;
import com.neotel.smfcore.apiGateway.device.common.enums.BOX_STATUS; import com.neotel.smfcore.apiGateway.device.common.enums.BOX_STATUS;
import com.neotel.smfcore.smfPlatform.language.util.MessageUtils; import com.neotel.smfcore.smfPlatform.language.util.MessageUtils;
...@@ -50,6 +56,12 @@ import javax.servlet.http.HttpServletRequest; ...@@ -50,6 +56,12 @@ import javax.servlet.http.HttpServletRequest;
import java.util.*; import java.util.*;
/**
* 设备管理通用控制器
* 处理各类设备的通用REST API请求
* @author SMF Core Team
* @date 2022-02-28
*/
@Slf4j @Slf4j
@RestController @RestController
@Api(tags = "设备通信(料仓)") @Api(tags = "设备通信(料仓)")
...@@ -1137,4 +1149,4 @@ public class DeviceController { ...@@ -1137,4 +1149,4 @@ public class DeviceController {
barcodeManager.save(barcode); barcodeManager.save(barcode);
return ResultBean.newOkResult(barcode); return ResultBean.newOkResult(barcode);
} }
} }
\ No newline at end of file \ No newline at end of file
...@@ -22,6 +22,13 @@ import com.neotel.smfcore.apiGateway.device.sp.dto.SpTaskDto; ...@@ -22,6 +22,13 @@ import com.neotel.smfcore.apiGateway.device.sp.dto.SpTaskDto;
import com.neotel.smfcore.businessServices.storage.enums.CHECKOUT_TYPE; import com.neotel.smfcore.businessServices.storage.enums.CHECKOUT_TYPE;
import com.neotel.smfcore.businessServices.storage.rest.dto.CheckOutDto; import com.neotel.smfcore.businessServices.storage.rest.dto.CheckOutDto;
import com.neotel.smfcore.businessServices.storage.rest.dto.InventoryItemDto; import com.neotel.smfcore.businessServices.storage.rest.dto.InventoryItemDto;
/**
* SP设备料盒控制器
* 处理SP设备料盒相关的REST API请求
* @author SMF Core Team
* @date 2022-03-07
*/
import com.neotel.smfcore.businessServices.storage.rest.dto.StoragePosDto; import com.neotel.smfcore.businessServices.storage.rest.dto.StoragePosDto;
import com.neotel.smfcore.businessServices.storage.rest.mapstruct.StoragePosMapper; import com.neotel.smfcore.businessServices.storage.rest.mapstruct.StoragePosMapper;
import com.neotel.smfcore.businessServices.storage.rest.query.StoragePosFindCriteria; import com.neotel.smfcore.businessServices.storage.rest.query.StoragePosFindCriteria;
......
...@@ -41,6 +41,13 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -41,6 +41,13 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**
* 虚拟操作控制器
* 处理虚拟仓库相关的操作请求
* @author SMF Core Team
* @date 2022-03-18
*/
@Api(tags = "虚拟仓操作") @Api(tags = "虚拟仓操作")
@Slf4j @Slf4j
@RequestMapping("/virtualOperate") @RequestMapping("/virtualOperate")
......
...@@ -25,6 +25,12 @@ import javax.servlet.http.HttpServletResponse; ...@@ -25,6 +25,12 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
/**
* 组件管理服务实现类,处理组件相关的业务逻辑
*
* @author SMF Core Team
* @date 2022-02-28
*/
@Slf4j @Slf4j
@Service @Service
public class ComponentManagerImpl implements IComponentManager { public class ComponentManagerImpl implements IComponentManager {
......
...@@ -46,6 +46,13 @@ import java.io.IOException; ...@@ -46,6 +46,13 @@ import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
/**
* 入库列表控制器
* 处理入库列表相关的REST API请求
* @author SMF Core Team
* @date 2022-02-28
*/
@Slf4j @Slf4j
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
......
...@@ -5,8 +5,18 @@ import com.neotel.smfcore.shared.base.AbstractBaseDao; ...@@ -5,8 +5,18 @@ import com.neotel.smfcore.shared.base.AbstractBaseDao;
import com.neotel.smfcore.businessServices.inList.service.dao.IInListItemDao; import com.neotel.smfcore.businessServices.inList.service.dao.IInListItemDao;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/**
* 入库列表项数据访问实现类,负责入库列表项的数据库操作
*
* @author SMF Core Team
* @date 2022-03-14
*/
@Service @Service
public class InListItemDaoImpl extends AbstractBaseDao implements IInListItemDao { public class InListItemDaoImpl extends AbstractBaseDao implements IInListItemDao {
/**
* 获取实体类类型
* @return 实体类Class对象
*/
@Override @Override
public Class getEntityClass() { public Class getEntityClass() {
return InListItem.class; return InListItem.class;
......
...@@ -3,8 +3,23 @@ package com.neotel.smfcore.businessServices.inList.service.manager; ...@@ -3,8 +3,23 @@ package com.neotel.smfcore.businessServices.inList.service.manager;
import com.neotel.smfcore.businessServices.inList.service.po.InList; import com.neotel.smfcore.businessServices.inList.service.po.InList;
import com.neotel.smfcore.shared.base.IBaseManager; import com.neotel.smfcore.shared.base.IBaseManager;
/**
* 入库列表管理接口
* @author SMF Core Team
* @date 2022-02-28
*/
public interface IInListManager extends IBaseManager<InList> { public interface IInListManager extends IBaseManager<InList> {
/**
* 根据名称查找入库列表
* @param name 列表名称
* @return 入库列表对象
*/
InList findByName(String name); InList findByName(String name);
/**
* 创建入库列表并关联列表项
* @param inList 入库列表对象
* @return 创建后的入库列表
*/
InList createWithItems(InList inList); InList createWithItems(InList inList);
} }
...@@ -14,6 +14,12 @@ import org.springframework.stereotype.Service; ...@@ -14,6 +14,12 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
/**
* 入库列表项管理实现类,实现入库列表项相关的业务逻辑
*
* @author SMF Core Team
* @date 2022-02-28
*/
@Slf4j @Slf4j
@Service @Service
public class InListItemManagerImpl implements IInListItemManager { public class InListItemManagerImpl implements IInListItemManager {
......
...@@ -17,6 +17,12 @@ import org.springframework.stereotype.Service; ...@@ -17,6 +17,12 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
/**
* 入库列表管理实现类,负责入库列表的增删改查等业务逻辑
*
* @author SMF Core Team
* @date 2022-03-14
*/
@Slf4j @Slf4j
@Service @Service
public class InListManagerImpl implements IInListManager { public class InListManagerImpl implements IInListManager {
...@@ -25,8 +31,13 @@ public class InListManagerImpl implements IInListManager { ...@@ -25,8 +31,13 @@ public class InListManagerImpl implements IInListManager {
private IInListDao inListDao; private IInListDao inListDao;
@Autowired @Autowired
private IInListItemManager inListItemManager; private IInListItemManager inListItemManager;
/**
* 根据ID获取入库列表及其包含的项
* @param id 入库列表ID
* @return 入库列表对象(包含列表项)
*/
@Override @Override
public InList get(String id) { public InList get(String id) {
InList list= inListDao.findOneById(id); InList list= inListDao.findOneById(id);
...@@ -37,16 +48,33 @@ private IInListItemManager inListItemManager; ...@@ -37,16 +48,33 @@ private IInListItemManager inListItemManager;
return list; return list;
} }
/**
* 保存入库列表
* @param object 入库列表对象
* @return 保存后的入库列表对象
* @throws ValidateException 验证异常
*/
@Override @Override
public InList save(InList object) throws ValidateException { public InList save(InList object) throws ValidateException {
return inListDao.save(object); return inListDao.save(object);
} }
/**
* 删除入库列表
* @param object 入库列表对象
* @throws ValidateException 验证异常
*/
@Override @Override
public void delete(InList object) throws ValidateException { public void delete(InList object) throws ValidateException {
inListDao.removeOne(object); inListDao.removeOne(object);
} }
/**
* 分页查询入库列表
* @param query 查询条件
* @param pageable 分页参数
* @return 分页数据
*/
@Override @Override
public PageData<InList> findByPage(Query query, Pageable pageable) { public PageData<InList> findByPage(Query query, Pageable pageable) {
int totalCount = inListDao.countByQuery(query); int totalCount = inListDao.countByQuery(query);
...@@ -54,11 +82,21 @@ private IInListItemManager inListItemManager; ...@@ -54,11 +82,21 @@ private IInListItemManager inListItemManager;
return new PageData(lists,totalCount); return new PageData(lists,totalCount);
} }
/**
* 根据查询条件获取入库列表
* @param query 查询条件
* @return 入库列表集合
*/
@Override @Override
public List<InList> findByQuery(Query query) { public List<InList> findByQuery(Query query) {
return inListDao.findByQuery(query); return inListDao.findByQuery(query);
} }
/**
* 根据名称查找入库列表及其包含的项
* @param name 入库列表名称
* @return 入库列表对象(包含列表项)
*/
@Override @Override
public InList findByName(String name) { public InList findByName(String name) {
Query query=new Query(Criteria.where("name").is(name)); Query query=new Query(Criteria.where("name").is(name));
...@@ -71,6 +109,11 @@ private IInListItemManager inListItemManager; ...@@ -71,6 +109,11 @@ private IInListItemManager inListItemManager;
return list; return list;
} }
/**
* 创建入库列表并保存其包含的项
* @param inList 入库列表对象
* @return 创建后的入库列表对象
*/
@Override @Override
public InList createWithItems(InList inList) { public InList createWithItems(InList inList) {
List<InListItem> items = Lists.newArrayList(); List<InListItem> items = Lists.newArrayList();
......
...@@ -22,6 +22,12 @@ import java.util.List; ...@@ -22,6 +22,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
/**
* 入库列表缓存工具
* 提供入库列表的缓存管理和快速访问功能
* @author SMF Core Team
* @date 2022-02-28
*/
@Service @Service
@Slf4j @Slf4j
public class InListCache { public class InListCache {
......
...@@ -5,6 +5,17 @@ import com.neotel.smfcore.businessServices.order.service.po.LiteOrderItem; ...@@ -5,6 +5,17 @@ import com.neotel.smfcore.businessServices.order.service.po.LiteOrderItem;
import java.util.List; import java.util.List;
/**
* 轻量级订单项数据访问接口,定义轻量级订单项的数据库操作方法
*
* @author SMF Core Team
* @date 2022-03-14
*/
public interface ILiteOrderItemDao extends IBaseDao { public interface ILiteOrderItemDao extends IBaseDao {
/**
* 根据订单号查询订单项列表
* @param orderNo 订单号
* @return 订单项集合
*/
List<LiteOrderItem> findByOrderNo(String orderNo); List<LiteOrderItem> findByOrderNo(String orderNo);
} }
...@@ -7,13 +7,28 @@ import org.springframework.stereotype.Service; ...@@ -7,13 +7,28 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
/**
* 轻量级订单项数据访问实现类,负责轻量级订单项的数据库操作
*
* @author SMF Core Team
* @date 2022-03-14
*/
@Service @Service
public class LiteOrderItemDaoImpl extends AbstractBaseDao implements ILiteOrderItemDao { public class LiteOrderItemDaoImpl extends AbstractBaseDao implements ILiteOrderItemDao {
/**
* 获取实体类类型
* @return 实体类Class对象
*/
@Override @Override
public Class getEntityClass() { public Class getEntityClass() {
return LiteOrderItem.class; return LiteOrderItem.class;
} }
/**
* 根据订单号查找订单项
* @param orderNo 订单号
* @return 订单项集合
*/
@Override @Override
public List<LiteOrderItem> findByOrderNo(String orderNo) { public List<LiteOrderItem> findByOrderNo(String orderNo) {
return findListByCondition(new String[]{"orderNo"}, new String[]{orderNo}); return findListByCondition(new String[]{"orderNo"}, new String[]{orderNo});
......
...@@ -5,6 +5,23 @@ import com.neotel.smfcore.businessServices.order.service.po.LiteOrderItem; ...@@ -5,6 +5,23 @@ import com.neotel.smfcore.businessServices.order.service.po.LiteOrderItem;
import java.util.List; import java.util.List;
/**
* 轻量级订单项管理接口
* 提供订单项相关的管理功能
* @author SMF Core Team
* @date 2022-02-28
*/
/**
* 轻量级订单项管理接口
* 提供订单项相关的管理功能
* @author SMF Core Team
* @date 2022-02-28
*/
public interface ILiteOrderItemManager extends IBaseManager<LiteOrderItem> { public interface ILiteOrderItemManager extends IBaseManager<LiteOrderItem> {
/**
* 根据订单ID查找订单项列表
* @param orderId 订单ID
* @return 订单项列表
*/
List<LiteOrderItem> findOrderItems(String orderId); List<LiteOrderItem> findOrderItems(String orderId);
} }
...@@ -54,10 +54,16 @@ import java.io.IOException; ...@@ -54,10 +54,16 @@ import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**
* 物料管理控制器
* 处理物料相关的REST API请求
* @author SMF Core Team
* @date 2022-03-14
*/
@Slf4j @Slf4j
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@Api(tags = "物料管理:策略出库") @Api(tags = "物料管理")
@RequestMapping("api/material") @RequestMapping("api/material")
public class MaterialController { public class MaterialController {
@Autowired @Autowired
......
...@@ -48,6 +48,12 @@ import java.io.File; ...@@ -48,6 +48,12 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
/**
* 料仓管理控制器
* 处理料仓相关的REST API请求
* @author SMF Core Team
* @date 2022-03-14
*/
@Slf4j @Slf4j
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
......
...@@ -13,17 +13,37 @@ import org.springframework.data.mongodb.core.query.Query; ...@@ -13,17 +13,37 @@ import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
/**
* 标签管理实现类,负责标签的增删改查等业务逻辑
*
* @author SMF Core Team
* @date 2022-03-14
*/
@Service @Service
@Slf4j @Slf4j
public class LabelManagerImpl implements ILabelManager { public class LabelManagerImpl implements ILabelManager {
@Autowired @Autowired
private ILabelDao labelDao; private ILabelDao labelDao;
/**
* 获取所有标签列表
*
* @return 标签列表
*/
@Override @Override
public List<Label> findAll() { public List<Label> findAll() {
return labelDao.findAll(); return labelDao.findAll();
} }
/**
* 保存标签信息(新增或修改)
*
* @param resources 标签资源对象
* @return 保存后的标签对象
* @throws ValidateException 验证异常
*/
@Override @Override
public Label saveLabel(Label resources) throws ValidateException { public Label saveLabel(Label resources) throws ValidateException {
...@@ -45,27 +65,59 @@ public class LabelManagerImpl implements ILabelManager { ...@@ -45,27 +65,59 @@ public class LabelManagerImpl implements ILabelManager {
return label; return label;
} }
/**
* 根据标签名称获取标签对象
*
* @param labelName 标签名称
* @return 标签对象
*/
@Override @Override
public Label getBylabelName(String labelName) { public Label getBylabelName(String labelName) {
Query query=new Query(Criteria.where("labelName").is(labelName)); Query query=new Query(Criteria.where("labelName").is(labelName));
return labelDao.findOne(query); return labelDao.findOne(query);
} }
/**
* 根据ID获取标签对象
*
* @param id 标签ID
* @return 标签对象
*/
@Override @Override
public Label get(String id) { public Label get(String id) {
return labelDao.findOneById(id); return labelDao.findOneById(id);
} }
/**
* 保存标签对象
*
* @param object 标签对象
* @return 保存后的标签对象
* @throws ValidateException 验证异常
*/
@Override @Override
public Label save(Label object) throws ValidateException { public Label save(Label object) throws ValidateException {
return labelDao.save(object); return labelDao.save(object);
} }
/**
* 删除标签对象
*
* @param object 标签对象
* @throws ValidateException 验证异常
*/
@Override @Override
public void delete(Label object) throws ValidateException { public void delete(Label object) throws ValidateException {
labelDao.removeOneById(object.getId()); labelDao.removeOneById(object.getId());
} }
/**
* 分页查询标签列表
*
* @param query 查询条件
* @param pageable 分页参数
* @return 分页数据对象
*/
@Override @Override
public PageData<Label> findByPage(Query query, Pageable pageable) { public PageData<Label> findByPage(Query query, Pageable pageable) {
int totalCount = labelDao.countByQuery(query); int totalCount = labelDao.countByQuery(query);
...@@ -73,6 +125,12 @@ public class LabelManagerImpl implements ILabelManager { ...@@ -73,6 +125,12 @@ public class LabelManagerImpl implements ILabelManager {
return new PageData<Label>(list,totalCount); return new PageData<Label>(list,totalCount);
} }
/**
* 根据查询条件获取标签列表
*
* @param query 查询条件
* @return 标签列表
*/
@Override @Override
public List<Label> findByQuery(Query query) { public List<Label> findByQuery(Query query) {
return labelDao.findByQuery(query); return labelDao.findByQuery(query);
......
...@@ -24,6 +24,13 @@ import org.springframework.data.domain.Pageable; ...@@ -24,6 +24,13 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.geo.Point; import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.Aggregation;
/**
* 存储位置管理实现类,负责存储位置的管理和操作业务逻辑
*
* @author SMF Core Team
* @date 2022-02-28
*/
import org.springframework.data.mongodb.core.aggregation.AggregationResults; import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
......
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.apiGateway.device.common.util.DataCache;
import com.neotel.smfcore.businessServices.storage.enums.DeviceType;
import com.neotel.smfcore.businessServices.storage.service.po.Storage;
import com.neotel.smfcore.shared.bean.ResultBean;
import com.neotel.smfcore.shared.csv.CsvReader;
import com.neotel.smfcore.shared.excel.ExcelReader;
import com.neotel.smfcore.shared.exception.ValidateException;
import com.neotel.smfcore.shared.utils.Constants;
import com.neotel.smfcore.shared.utils.DateUtil;
import com.neotel.smfcore.shared.utils.FileUtil;
import com.neotel.smfcore.shared.utils.StringUtils;
import com.neotel.smfcore.smfPlatform.security.annotation.AnonymousAccess;
import com.neotel.smfcore.smfPlatform.security.bean.FileProperties;
import com.neotel.smfcore.smfPlatform.system.bean.OrderSetting;
import com.neotel.smfcore.smfPlatform.system.rest.bean.dto.SysSettingsDto;
import com.neotel.smfcore.smfPlatform.system.service.po.Settings;
import com.neotel.smfcore.smfPlatform.system.util.DbBackupService;
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.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.aggregation.BooleanOperators;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.*;
/**
* 系统设置控制器
* 处理系统配置相关的REST API请求
* @author SMF Core Team
* @date 2022-03-04
*/
@Slf4j
@Api(tags = "系统:设置")
@RestController
@RequestMapping("/api/settings")
@RequiredArgsConstructor
public class SettingsController {
@Autowired
private DataCache dataCache;
@Autowired
private final FileProperties properties;
@Autowired
private DbBackupService dbBackupService;
/**
* 当前版本
*/
@Value("${app.version}")
private String version;
@ApiOperation("获取系统设置信息")
@GetMapping("/sysSettings")
@PreAuthorize("@el.check('sysSetting')")
public SysSettingsDto getSysSettings() {
Settings settings = dataCache.getSettings();
boolean stopOut = dataCache.getCache(Constants.CACHE_StopOut);
boolean startJob = dataCache.getCache(Constants.CACHE_StartJob);
Integer sluggishDay=dataCache.getCache(Constants.CACHE_SluggishDay);
Integer expiresDay=dataCache.getCache(Constants.CACHE_ExpiresDay);
Integer caWarn=dataCache.getCache(Constants.CACHE_CapacityWarn);
Integer backUpMonth = dataCache.getCache(Constants.BACKUP_MONTH_KEY);
Boolean closeWorkOrder = dataCache.getCache(Constants.CACHE_closeWorkOrder);
SysSettingsDto dto = new SysSettingsDto();
dto.setStartJob(startJob);
dto.setStopOut(stopOut);
dto.setSluggishDay(sluggishDay);
dto.setExpiresDay(expiresDay);
dto.setCapacityWarn(caWarn);
dto.setBackUpMonth(backUpMonth);
if (closeWorkOrder != null) {
dto.setCloseWorkOrder(closeWorkOrder);
}
String defLanguage = dataCache.getCache(Constants.Cache_DefLanguage);
if (StringUtils.isEmpty(defLanguage)){
defLanguage = "zh";
}
dto.setDefLanguage(defLanguage);
Boolean QRCodeLogin = dataCache.getCache(Constants.Cache_QRCodeLogin);
if (QRCodeLogin == null){
QRCodeLogin = false;
}
dto.setQRCodeLogin(QRCodeLogin);
return dto;
}
@ApiOperation("修改系统设置信息")
@PutMapping("/sysSettings")
@PreAuthorize("@el.check('sysSetting')")
public ResultBean updateSysSettings(@Validated @RequestBody SysSettingsDto sysSettingsDto) {
dataCache.updateCache(Constants.CACHE_StopOut, sysSettingsDto.isStopOut());
dataCache.updateCache(Constants.CACHE_StartJob, sysSettingsDto.isStartJob());
dataCache.updateCache(Constants.CACHE_SluggishDay,sysSettingsDto.getSluggishDay());
dataCache.updateCache(Constants.CACHE_ExpiresDay,sysSettingsDto.getExpiresDay());
dataCache.updateCache(Constants.CACHE_CapacityWarn,sysSettingsDto.getCapacityWarn());
dataCache.updateCache(Constants.BACKUP_MONTH_KEY,sysSettingsDto.getBackUpMonth());
dataCache.updateCache(Constants.CACHE_closeWorkOrder,sysSettingsDto.isCloseWorkOrder());
dataCache.updateCache(Constants.Cache_DefLanguage,sysSettingsDto.getDefLanguage());
dataCache.updateCache(Constants.Cache_QRCodeLogin,sysSettingsDto.isQRCodeLogin());
log.info("更改系统设置:stopout=" + sysSettingsDto.isStopOut() + ",stopjob=" + sysSettingsDto.isStartJob()+",sluggishDay="+sysSettingsDto.getSluggishDay()
+",expiresDay="+sysSettingsDto.getExpiresDay()+",capacityWarn="+sysSettingsDto.getCapacityWarn()+",backUpMonth="+sysSettingsDto.getBackUpMonth()
+",缺料不自动关闭工单="+sysSettingsDto.isCloseWorkOrder()
+"默认语言为:"+sysSettingsDto.getDefLanguage()
+"是否扫码登录:"+sysSettingsDto.isQRCodeLogin());
return ResultBean.newOkResult("保存成功");
}
@ApiOperation("获取出库策略信息")
@GetMapping("/checkoutSettings")
@PreAuthorize("@el.check('outSetting')")
public Map<String,String> getCheckOutSettings() {
String outSet = dataCache.getCheckOutType().name();
Map<String, String> map = new HashMap<>();
map.put("checkOutType", outSet);
return map;
}
@ApiOperation("修改出库策略")
@PutMapping("/checkoutSettings")
@PreAuthorize("@el.check('outSetting')")
public ResultBean update(@Validated @RequestBody String type) {
// String type=map.get("checkOutType");
dataCache.updateCache(Constants.CACHE_CheckOutType, type);
log.info("更改出库策略:checkOutType=" + type);
return ResultBean.newOkResult("ok");
}
@ApiOperation("获取工单设置")
@GetMapping("/order")
@PreAuthorize("@el.check('orderSetting')")
public OrderSetting getOrderSetting() {
OrderSetting orderSetting = dataCache.getOrderSetting();
orderSetting.setShowLightType(false);
//判断是否有料架
List<Storage> storages = new ArrayList<>(dataCache.getAllStorage().values());
for (Storage storage : storages
) {
if (storage.isType(new DeviceType[]{DeviceType.NLP,DeviceType.NL,DeviceType.NLS})) {
orderSetting.setShowLightType(true);
break;
}
}
Boolean closeWorkOrder = dataCache.getCache(Constants.CACHE_closeWorkOrder);
if(closeWorkOrder!=null){
orderSetting.setCloseWorkOrder(closeWorkOrder);
}
return orderSetting;
}
@ApiOperation("修改工单设置")
@PutMapping("/order")
@PreAuthorize("@el.check('orderSetting')")
public ResultBean updateOrderSetting( @RequestBody OrderSetting orderSetting) {
// String type=map.get("checkOutType");
if(orderSetting.getPn()==null){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"PN"});
}
if(orderSetting.getFeeder()==null){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"FEEDER"});
}
if(orderSetting.getQty()==null){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"QTY"});
}
if(orderSetting.getRi()==null){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"RI"});
}
if(orderSetting.getSo()==null){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"SO"});
}
//判断文件夹是否正确
if(ObjectUtil.isNotEmpty(orderSetting.getOrderDir())){
File file = new File(orderSetting.getOrderDir());
if(file.exists()&& file.isDirectory()){
}else{
//判断是不是远程文件夹
if(orderSetting.getOrderDir().toLowerCase().startsWith("smb")){
}else{
return ResultBean.newErrorResult(-1,"smfcore.enterCorrectFolder","请输入正确的文件夹");
// throw new ValidateException("smfcore.enterCorrectFolder", "请输入正确的文件夹" );
}
}
}
if(orderSetting.getAppendData()!=null&&orderSetting.getAppendData().size()>0) {
Map<String, String> appendData = new HashMap<>();
for (String key :
orderSetting.getAppendData().keySet()) {
String value = orderSetting.getAppendData().get(key);
if (ObjectUtil.isNotEmpty(key) && ObjectUtil.isNotEmpty(value)) {
String nKey = key.replace(".", "#");
appendData.put(nKey, value);
}
}
orderSetting.setAppendData(appendData);
}
dataCache.updateCache(Constants.CACHE_OrderSetting, orderSetting);
dataCache.updateCache(Constants.CACHE_closeWorkOrder,orderSetting.isCloseWorkOrder());
log.info("更改工单设置:"+Constants.CACHE_OrderSetting+"=" + orderSetting.toString());
return ResultBean.newOkResult("保存成功");
}
@ApiOperation("下载工单模板")
@GetMapping(value = "/downloadOrderModel")
@PreAuthorize("@el.check('user:list')")
public void download(HttpServletResponse response) throws IOException {
downloadOrderModel(response);
}
public void downloadOrderModel( HttpServletResponse response) throws IOException {
try {
List<Map<String, Object>> maps = new ArrayList<>();
List<String> titles = new ArrayList<>();
OrderSetting orderSetting = dataCache.getOrderSetting();
titles.add(orderSetting.getPn() );
titles.add(orderSetting.getFeeder());
titles.add((orderSetting.getQty()));
titles.add(orderSetting.getRi());
titles.add(orderSetting.getSo());
titles.add(orderSetting.getNum());
titles.add(orderSetting.getMpn());
for(int i=1;i<=10;i++) {
Map<String, Object> map = new LinkedHashMap<>();
if(i<=4){
map.put(orderSetting.getPn(),"PN"+i);
map.put(orderSetting.getFeeder(),"Feeder1"+i);
map.put(orderSetting.getQty(),"100"+i);
map.put(orderSetting.getRi(),"");
map.put(orderSetting.getSo(),"WO1001" );
map.put(orderSetting.getNum(),i);
map.put(orderSetting.getMpn(),"MPN"+i);
}
else{
map.put(orderSetting.getPn(),"PN2"+i);
map.put(orderSetting.getFeeder(),"Feeder2"+i);
map.put(orderSetting.getQty(),"200"+i);
map.put(orderSetting.getRi(),"");
map.put(orderSetting.getSo(),"WO1002" );
map.put(orderSetting.getNum(),i);
map.put(orderSetting.getMpn(),"MPN"+i);
}
maps.add(map);
}
FileUtil.downloadCSV(maps, titles, response);
} catch (Exception e) {
log.error("导出失败" + e.getMessage(), e);
}
}
@ApiOperation("上传工单模板")
@PostMapping(value = "/uploadOrderModel")
@AnonymousAccess
public ResultBean uploadOrderModel(@RequestParam MultipartFile orderFile) {
String csv = "csv";
String excel = "xlsx";
String fileType = FileUtil.getExtensionName(orderFile.getOriginalFilename());
String fileName = FileUtil.getFileNameNoEx(orderFile.getOriginalFilename());
if (fileType != null && (!csv.contains(fileType)) && (!excel.contains(fileType))) {
throw new ValidateException("smfcore.feleFormatError", "文件格式错误!, 仅支持{0}格式", new String[]{csv + "," + excel});
}
File folder = new File(properties.getPath(), "pos");
File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath());
try {
if (fileType.equals(csv)) {
CsvReader csvRead = CsvReader.newReader(localFile.getAbsolutePath(), "", "");
String[] headers = csvRead.getHeaders();
return ResultBean.newOkResult(headers);
} else if (fileType.equals(excel)) {
//读取所有excel表头
Map<String, Integer> headerData = ExcelReader.readHeaderMap(localFile.getAbsolutePath(), 1);
String[] headerArray = new String[headerData.size()];
headerData.keySet().toArray(headerArray);
return ResultBean.newOkResult(headerArray);
}
} catch (IOException e) {
e.printStackTrace();
return ResultBean.newOkResult("");
}
return ResultBean.newOkResult("");
}
@ApiOperation("获取版本号")
@GetMapping("/version")
public String version() {
log.info("获取版本号:"+version);
return "V"+version;
}
@ApiOperation("修改授权日期")
@GetMapping("/updateAuthDate")
@AnonymousAccess
public ResultBean updateAuthDate(Long currentTime, int day) {
if (currentTime == null){
return ResultBean.newErrorResult(1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"currentTime"});
}
//log.info(System.currentTimeMillis()+"");
String dateStr = DateUtil.toDateString(currentTime, "yyyy-MM-dd");
String currentDateStr = DateUtil.toDateString(System.currentTimeMillis(), "yyyy-MM-dd");
if (!currentDateStr.equals(dateStr)) {
//smfcore.valueInvalid=[{0}]並非有效的參數
return ResultBean.newErrorResult(-1, "smfcore.valueInvalid", "[{0}]不是有效的参数", new String[]{"currentTime"});
}
//如果传入的时间小于0,则置为空,长时间有效
if (day < 0){
dataCache.updateCache(Constants.Cache_AuthDate,null);
} else {
Date newDate = DateUtil.addDays(new Date(), day);
dataCache.updateCache(Constants.Cache_AuthDate,newDate);
}
return ResultBean.newOkResult("");
}
@ApiOperation("判断是否扫码登录")
@GetMapping("/QRCodeLogin")
@AnonymousAccess
public ResultBean QRCodeLogin() {
Boolean QRCodeLogin = dataCache.getCache(Constants.Cache_QRCodeLogin);
if (QRCodeLogin == null){
QRCodeLogin = false;
}
return ResultBean.newOkResult(QRCodeLogin);
}
}
\ No newline at end of file \ No newline at end of file
...@@ -19,6 +19,12 @@ import org.springframework.stereotype.Service; ...@@ -19,6 +19,12 @@ import org.springframework.stereotype.Service;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* Aptiv1077系统集成API,处理与Aptiv外部系统的接口调用
*
* @author SMF Core Team
* @date 2022-03-14
*/
@Service @Service
@Slf4j @Slf4j
public class AptivApi extends NeotelApi { public class AptivApi extends NeotelApi {
......
...@@ -13,6 +13,12 @@ import org.springframework.stereotype.Service; ...@@ -13,6 +13,12 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
/**
* Haman存储位置数据访问实现类,负责Haman系统存储位置的数据库操作
*
* @author SMF Core Team
* @date 2022-03-14
*/
@Service @Service
public class HamanBinPosDaoImpl extends AbstractBaseDao implements IHamanBinPosDao { public class HamanBinPosDaoImpl extends AbstractBaseDao implements IHamanBinPosDao {
@Override @Override
......
...@@ -20,6 +20,13 @@ import com.neotel.smfcore.apiGateway.device.common.enums.BOX_STATUS; ...@@ -20,6 +20,13 @@ import com.neotel.smfcore.apiGateway.device.common.enums.BOX_STATUS;
import com.neotel.smfcore.apiGateway.device.common.util.DataCache; import com.neotel.smfcore.apiGateway.device.common.util.DataCache;
import com.neotel.smfcore.businessServices.order.LiteOrderCache; import com.neotel.smfcore.businessServices.order.LiteOrderCache;
import com.neotel.smfcore.businessServices.order.enums.LITEORDER_STYPE; import com.neotel.smfcore.businessServices.order.enums.LITEORDER_STYPE;
/**
* Hella系统服务处理器,负责与Hella外部系统进行集成交互
*
* @author SMF Core Team
* @date 2022-03-14
*/
import com.neotel.smfcore.businessServices.order.service.manager.ILiteOrderManager; import com.neotel.smfcore.businessServices.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.businessServices.order.service.po.LiteOrder; import com.neotel.smfcore.businessServices.order.service.po.LiteOrder;
import com.neotel.smfcore.businessServices.order.service.po.LiteOrderItem; import com.neotel.smfcore.businessServices.order.service.po.LiteOrderItem;
......
...@@ -26,6 +26,12 @@ import java.util.concurrent.ScheduledExecutorService; ...@@ -26,6 +26,12 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**
* Nexim订单处理器
* 负责处理从Nexim系统接收到的订单文件
* @author SMF Core Team
* @date 2022-03-14
*/
@Slf4j @Slf4j
@Component @Component
public class JobHandler { public class JobHandler {
......
...@@ -34,6 +34,12 @@ import java.util.ArrayList; ...@@ -34,6 +34,12 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
/**
* Nexim订单服务
* 处理Nexim系统订单的核心业务逻辑
* @author SMF Core Team
* @date 2022-03-14
*/
@Slf4j @Slf4j
@Service @Service
public class JobService { public class JobService {
......
...@@ -8,17 +8,53 @@ import org.springframework.data.mongodb.core.query.Query; ...@@ -8,17 +8,53 @@ import org.springframework.data.mongodb.core.query.Query;
import java.util.List; import java.util.List;
/** /**
* Created by kangmor on 2015/10/15. * 基础管理接口,提供通用的增删改查操作方法
*
* @author SMF Core Team
* @date 2022-02-28
* @param <T> 实体类型泛型
*/ */
public interface IBaseManager<T> { public interface IBaseManager<T> {
/**
* 根据ID获取实体对象
*
* @param id 实体ID
* @return 实体对象
*/
T get(String id); T get(String id);
/**
* 保存实体对象
*
* @param object 实体对象
* @return 保存后的实体对象
* @throws ValidateException 验证异常
*/
T save(T object) throws ValidateException; T save(T object) throws ValidateException;
/**
* 删除实体对象
*
* @param object 实体对象
* @throws ValidateException 验证异常
*/
void delete(T object) throws ValidateException; void delete(T object) throws ValidateException;
/**
* 分页查询实体列表
*
* @param query 查询条件
* @param pageable 分页参数
* @return 分页数据对象
*/
PageData<T> findByPage(Query query, Pageable pageable); PageData<T> findByPage(Query query, Pageable pageable);
/**
* 根据查询条件获取实体列表
*
* @param query 查询条件
* @return 实体列表
*/
List<T> findByQuery(Query query); List<T> findByQuery(Query query);
} }
...@@ -15,6 +15,13 @@ import java.util.List; ...@@ -15,6 +15,13 @@ import java.util.List;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/**
* 主定时器服务
* 负责定时执行系统任务和数据同步
* @author SMF Core Team
* @date 2022-03-04
*/
@Service @Service
public class MainTimer { public class MainTimer {
protected final transient Logger log = LogManager.getLogger(getClass()); protected final transient Logger log = LogManager.getLogger(getClass());
......
...@@ -16,6 +16,12 @@ import java.util.Collection; ...@@ -16,6 +16,12 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/**
* 查询帮助工具类,用于构建MongoDB查询条件
*
* @author SMF Core Team
* @date 2022-02-28
*/
@Slf4j @Slf4j
public class QueryHelp { public class QueryHelp {
public static <C> Query getQuery(C c){ public static <C> Query getQuery(C c){
......
...@@ -29,6 +29,12 @@ import org.springframework.web.bind.annotation.*; ...@@ -29,6 +29,12 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.*; import java.util.*;
/**
* 组管理控制器
* 处理用户组相关的REST API请求
* @author SMF Core Team
* @date 2022-02-28
*/
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@Api(tags = "系统:组管理") @Api(tags = "系统:组管理")
......
...@@ -134,7 +134,8 @@ public class MenuController { ...@@ -134,7 +134,8 @@ public class MenuController {
public ResponseEntity<Object> child(@RequestParam String id) { public ResponseEntity<Object> child(@RequestParam String id) {
Set<Menu> menuSet = new HashSet<>(); Set<Menu> menuSet = new HashSet<>();
List<Menu> menuList = menuManager.getMenusByPid(id); List<Menu> menuList = menuManager.getMenusByPid(id);
menuSet.add(menuManager.get(id)); Menu menu = (Menu) menuManager.get(id);
menuSet.add(menu);
menuSet = menuManager.getChildMenus(menuList, menuSet); menuSet = menuManager.getChildMenus(menuList, menuSet);
Set<String> ids = menuSet.stream().map(Menu::getId).collect(Collectors.toSet()); Set<String> ids = menuSet.stream().map(Menu::getId).collect(Collectors.toSet());
return new ResponseEntity<>(ids, HttpStatus.OK); return new ResponseEntity<>(ids, HttpStatus.OK);
...@@ -166,7 +167,7 @@ public class MenuController { ...@@ -166,7 +167,7 @@ public class MenuController {
Set<Menu> menus = new LinkedHashSet<>(); Set<Menu> menus = new LinkedHashSet<>();
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(ids)) {
for (String id : ids) { for (String id : ids) {
Menu menu = menuManager.get(id); Menu menu = (Menu) menuManager.get(id);
menus.addAll(menuManager.getSuperior(menu, new ArrayList<>())); menus.addAll(menuManager.getSuperior(menu, new ArrayList<>()));
} }
return new ResponseEntity<>(menuManager.buildTree(new ArrayList<>(menus)), HttpStatus.OK); return new ResponseEntity<>(menuManager.buildTree(new ArrayList<>(menus)), HttpStatus.OK);
......
...@@ -39,6 +39,12 @@ import java.util.stream.Collectors; ...@@ -39,6 +39,12 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
@Service("userDetailsService") @Service("userDetailsService")
/**
* 用户详情服务实现类
* 实现Spring Security的UserDetailsService接口,提供用户认证功能
* @author SMF Core Team
* @date 2022-02-28
*/
public class UserDetailsServiceImpl implements UserDetailsService { public class UserDetailsServiceImpl implements UserDetailsService {
private final IUserManager userManager; private final IUserManager userManager;
private final IMenuManager menuManager; private final IMenuManager menuManager;
......
...@@ -13,7 +13,13 @@ import java.util.Locale; ...@@ -13,7 +13,13 @@ import java.util.Locale;
import java.util.Set; import java.util.Set;
public interface IMenuManager extends IBaseManager<Menu> { /**
* 菜单管理接口
* 提供菜单相关的管理功能
* @author SMF Core Team
* @date 2022-02-28
*/
public interface IMenuManager extends IBaseManager {
List<Menu> findAll(); List<Menu> findAll();
/** /**
* 根据角色ID获取菜单 * 根据角色ID获取菜单
......
...@@ -46,12 +46,12 @@ public class MenuManagerImpl implements IMenuManager { ...@@ -46,12 +46,12 @@ public class MenuManagerImpl implements IMenuManager {
} }
@Override @Override
public Menu save(Menu menu) throws ValidateException { public Menu save(Object menu) throws ValidateException {
return menuDao.save(menu); return menuDao.save((Menu) menu);
} }
@Override @Override
public void delete(Menu object) throws ValidateException { public void delete(Object object) throws ValidateException {
menuDao.removeOne(object); menuDao.removeOne(object);
} }
......
...@@ -48,6 +48,12 @@ import java.text.SimpleDateFormat; ...@@ -48,6 +48,12 @@ import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
/**
* 任务管理控制器
* 处理系统任务相关的REST API请求
* @author SMF Core Team
* @date 2022-03-07
*/
@Slf4j @Slf4j
@Api(tags = "任务管理") @Api(tags = "任务管理")
@RestController @RestController
......
...@@ -31,6 +31,12 @@ import java.util.concurrent.TimeUnit; ...@@ -31,6 +31,12 @@ import java.util.concurrent.TimeUnit;
* @author sunke * @author sunke
* @date 2023/1/31 10:02 AM * @date 2023/1/31 10:02 AM
*/ */
/**
* 数据库备份服务
* 负责系统数据的自动备份和管理
* @author SMF Core Team
* @date 2022-03-04
*/
@Slf4j @Slf4j
@Service @Service
public class DbBackupService { public class DbBackupService {
......
...@@ -37,7 +37,10 @@ import java.util.*; ...@@ -37,7 +37,10 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* Created by sunke on 2021/7/13. * 任务服务类,负责管理系统中的各类任务队列和任务状态
*
* @author SMF Core Team
* @date 2022-03-14
*/ */
@Service @Service
@Slf4j @Slf4j
...@@ -338,12 +341,33 @@ public class TaskService { ...@@ -338,12 +341,33 @@ public class TaskService {
} }
return resultTasks; return resultTasks;
} }
/**
* 查找已完成的入库任务
* @param cid 设备ID
* @param posName 位置名称
* @return 任务对象
*/
public DataLog findFinishedPutInTask(String cid, String posName){ public DataLog findFinishedPutInTask(String cid, String posName){
return findFinishedTask(cid,posName,"",true); return findFinishedTask(cid,posName,"",true);
} }
/**
* 查找已完成的出库任务
* @param cid 设备ID
* @param posName 位置名称
* @return 任务对象
*/
public DataLog findFinishedOutTask(String cid, String posName){ public DataLog findFinishedOutTask(String cid, String posName){
return findFinishedTask(cid,posName,"",false); return findFinishedTask(cid,posName,"",false);
} }
/**
* 根据条码查找已完成的入库任务
* @param cid 设备ID
* @param posName 位置名称
* @param barcode 条码
* @return 任务对象
*/
public DataLog findFinishedPutInTask(String cid, String posName,String barcode){ public DataLog findFinishedPutInTask(String cid, String posName,String barcode){
return findFinishedTask(cid,posName,barcode,true); return findFinishedTask(cid,posName,barcode,true);
} }
...@@ -435,13 +459,21 @@ public class TaskService { ...@@ -435,13 +459,21 @@ public class TaskService {
} }
return null; return null;
} }
/**
* 查找正在执行的任务
* @param cid 设备ID
* @param posName 位置名称
* @return 任务对象
*/
public DataLog findExecutingTask(String cid, String posName ) { public DataLog findExecutingTask(String cid, String posName ) {
return findExecutingTask(cid,posName,""); return findExecutingTask(cid,posName,"");
} }
/** /**
* 是否有正在执行的任务 * 判断指定设备是否有指定类型的正在执行的任务
* * @param cid 设备ID
* @return * @param type 任务类型
* @return 是否有执行中的任务
*/ */
public boolean hasExecutingTask(String cid, int type) { public boolean hasExecutingTask(String cid, int type) {
for (DataLog task : taskMap.values()) { for (DataLog task : taskMap.values()) {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!