Commit 460e1125 sunke

Merge remote-tracking branch 'origin/master'

2 个父辈 02c8513d a42ddc86
正在显示 21 个修改的文件 包含 893 行增加17 行删除
...@@ -13,7 +13,9 @@ import org.springframework.security.authentication.BadCredentialsException; ...@@ -13,7 +13,9 @@ import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.support.HttpRequestHandlerServlet;
import javax.servlet.http.HttpServletRequest;
import java.util.Objects; import java.util.Objects;
import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.BAD_REQUEST;
...@@ -36,7 +38,7 @@ public class GlobalExceptionHandler { ...@@ -36,7 +38,7 @@ public class GlobalExceptionHandler {
* BadCredentialsException * BadCredentialsException
*/ */
@ExceptionHandler(BadCredentialsException.class) @ExceptionHandler(BadCredentialsException.class)
public ResponseEntity<ApiError> badCredentialsException(BadCredentialsException e){ public ResponseEntity<ApiError> badCredentialsException( BadCredentialsException e){
// 打印堆栈信息 // 打印堆栈信息
String message = "坏的凭证".equals(e.getMessage()) ? "用户名或密码不正确" : e.getMessage(); String message = "坏的凭证".equals(e.getMessage()) ? "用户名或密码不正确" : e.getMessage();
log.error(message); log.error(message);
...@@ -47,10 +49,11 @@ public class GlobalExceptionHandler { ...@@ -47,10 +49,11 @@ public class GlobalExceptionHandler {
* 处理自定义异常 * 处理自定义异常
*/ */
@ExceptionHandler(value = BadRequestException.class) @ExceptionHandler(value = BadRequestException.class)
public ResponseEntity<ApiError> badRequestException(BadRequestException e) { public ResponseEntity<ApiError> badRequestException(HttpServletRequest servlet, BadRequestException e) {
String language= servlet.getLocale().getLanguage();
// 打印堆栈信息 // 打印堆栈信息
log.error(ThrowableUtil.getStackTrace(e)); log.error(ThrowableUtil.getStackTrace(e));
return buildResponseEntity(ApiError.error(e.getStatus(),e.getMessage())); return buildResponseEntity(ApiError.error(e.getStatus(),e.getMessage()+servlet.toString()));
} }
/** /**
......
package com.neotel.smfcore.core.barcode.rest;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.BadRequestException;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto;
import com.neotel.smfcore.core.barcode.rest.bean.mapstruct.BarcodeMapper;
import com.neotel.smfcore.core.barcode.rest.bean.query.BarcodeQueryCriteria;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.security.rest.bean.dto.RoleDto;
import com.neotel.smfcore.security.rest.bean.dto.UserDto;
import com.neotel.smfcore.security.rest.bean.query.RoleQueryCriteria;
import com.neotel.smfcore.security.service.po.Role;
import com.neotel.smfcore.security.service.po.User;
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.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 javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "条码管理")
@RequestMapping("api/barcode")
public class BacodeController {
@Autowired
private final IBarcodeManager barcodeManager;
@Autowired
private final BarcodeMapper barcodeMapper;
@ApiOperation("导出条码数据")
@GetMapping(value = "/download")
public void download(HttpServletResponse response, BarcodeQueryCriteria criteria) throws Exception {
Query query=QueryHelp.getQuery(criteria);
List<Barcode> list=barcodeManager.findByQuery(query);
barcodeManager.download(list,response);
}
@ApiOperation("查询条码")
@GetMapping
@PreAuthorize("@el.check('barcode:list')")
public PageData<BarcodeDto> query(BarcodeQueryCriteria criteria, Pageable pageable){
Query query= QueryHelp.getQuery(criteria);
PageData<Barcode> barcodes=barcodeManager.findByPage(query,pageable);
List<BarcodeDto> barcodeDtos=barcodeMapper.toDto(barcodes.getContent());
return new PageData(barcodeDtos,barcodes.getTotalElements());
}
@ApiOperation("新增条码")
@PostMapping
@PreAuthorize("@el.check('barcode:add')")
public ResponseEntity<Object> create(@Validated @RequestBody BarcodeDto resources) {
Barcode barcode=barcodeMapper.toEntity(resources);
barcodeManager.saveBarcode(barcode);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@ApiOperation("修改条码")
@PutMapping
@PreAuthorize("@el.check('barcode:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody BarcodeDto resources) {
Barcode barcode=barcodeMapper.toEntity(resources);
if (barcode.getId() == null) {
throw new BadRequestException("修改条码:ID不能为空");
}
barcodeManager.saveBarcode(barcode);
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("删除条码")
@DeleteMapping
@PreAuthorize("@el.check('barcode:del')")
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
List<Barcode> barcodes = new ArrayList<Barcode>();
for (String id : ids) {
if (id == null) {
throw new BadRequestException("删除条码:ID不能为空");
}else{
throw new BadRequestException("删除条码:暂未开放");
}
}
return new ResponseEntity<>(HttpStatus.OK);
}
}
package com.neotel.smfcore.core.barcode.rest;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.BadRequestException;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.barcode.rest.bean.dto.ComponentDto;
import com.neotel.smfcore.core.barcode.rest.bean.mapstruct.ComponentMapper;
import com.neotel.smfcore.core.barcode.rest.bean.query.ComponentQueryCriteria;
import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component;
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.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 javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "元器件管理")
@RequestMapping("api/component")
public class ComponentController {
@Autowired
private final IComponentManager componentManager;
@Autowired
private final ComponentMapper componentMapper;
@ApiOperation("导出元器件信息")
@GetMapping(value = "/download")
public void download(HttpServletResponse response, ComponentQueryCriteria criteria) throws Exception {
Query query=QueryHelp.getQuery(criteria);
List<Component> list=componentManager.findByQuery(query);
componentManager.download(list,response);
}
@ApiOperation("查询元器件")
@GetMapping
@PreAuthorize("@el.check('component:list')")
public PageData<ComponentDto> query(ComponentQueryCriteria criteria, Pageable pageable){
Query query= QueryHelp.getQuery(criteria);
PageData<Component> pages=componentManager.findByPage(query,pageable);
List<ComponentDto> componentDtos=componentMapper.toDto(pages.getContent());
return new PageData(componentDtos,pages.getTotalElements());
}
@ApiOperation("新增元器件")
@PostMapping
@PreAuthorize("@el.check('component:add')")
public ResponseEntity<Object> create(@Validated @RequestBody ComponentDto resources) {
Component component=componentMapper.toEntity(resources);
componentManager.saveComponent(component);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@ApiOperation("修改元器件")
@PutMapping
@PreAuthorize("@el.check('component:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody ComponentDto resources) {
Component component=componentMapper.toEntity(resources);
if (component.getId() == null) {
throw new BadRequestException("修改条码:ID不能为空");
}
componentManager.saveComponent(component);
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("删除元器件")
@DeleteMapping
@PreAuthorize("@el.check('component:del')")
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
List<Component> Components = new ArrayList<Component>();
for (String id : ids) {
if (id == null) {
throw new BadRequestException("删除元器件:ID不能为空");
}else{
throw new BadRequestException("删除元器件:暂未开放");
}
}
return new ResponseEntity<>(HttpStatus.OK);
}
}
package com.neotel.smfcore.core.barcode.rest.bean.dto;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
import com.neotel.smfcore.core.barcode.enums.SOLDER_STATUS;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Transient;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Getter
@Setter
public class BarcodeDto implements Serializable {
/**
* 条码编号
*/
@ApiModelProperty("条码编号")
private String barcode;
/**
* 物料类型:PCB,锡膏,或其他
*/
@ApiModelProperty("物料类型:PCB,锡膏,或其他")
private int type = COMPONENT_TYPE.COMPONENT;
//锡膏回温时间,小于回温时间不可出库
@ApiModelProperty("锡膏回温时间,小于回温时间不可出库")
private int warmTime = 0;
/**
* 搅拌时间(分钟)
*/
@ApiModelProperty("搅拌时间(分钟)")
private int mixTime = 0;
private float maxStorageTime = 0;
/**
* 过期时间(入库时间+最大存储时间)
*/
@ApiModelProperty("过期时间(入库时间+最大存储时间)")
private Date expTime;
/**
* 过期状态,-1未入库0在库,1已出库正常,2已出库且已过期
*/
@ApiModelProperty("过期状态,-1未入库0在库,1已出库正常,2已出库且已过期")
private int status = BARCODE_STATUS.NEW;
/**
* 锡膏状态
*/
@ApiModelProperty("锡膏状态")
private int solderStatus = SOLDER_STATUS.NONE;
/**
* 锡膏指定时间出库
*/
@ApiModelProperty("锡膏指定时间出库")
private Date needOutDate;
//private int componentType = 0;
/**
* 料件编号
*/
@ApiModelProperty("料件编号")
private String partNumber;
/**
* 供应商编号
*/
@ApiModelProperty("供应商编号")
private String providerNumber;
private int initialAmount;
@ApiModelProperty("数量")
private int amount;
/**
* 标签解析出来的数量,用于判断条码是否是重新打印的,重新打印的条码需要重新设置数量
*/
private int labelAmount = 0;
private int plateSize=0;
private int height=0;
private String provider;
/**
* 批次
*/
private String batch;
private String msl;
//备用字段1(配套单号))或 family
private String otherField1;
//备用字段2 (产品型号)
private String otherField2;
//备用字段3 (组件型号)
private String otherField3;
//备用字段4 (元器件型号)
private String otherField4;
//备用字段5 (检验编号)
private String otherField5;
//备用字段5 (备注)
private String otherField6;
/**
* 包装上带的过期时间
*/
private Date expireDate;
private boolean used = false;
//备注信息
private String memo;
/**
* 库位信息
*/
private String posName;
/**
* 只能单盘出库
*/
private boolean onlySingleOut = false;
/**
* 贴片机补料信息
*/
private String nextBarcode;
/**
* 第一次入库时间戳
*/
private long putInTime = -1;
/**
* 开始回温时间
*/
private long startWarmTime = -1;
/**
* 入库时间
*/
private Date putInDate;
/**
* 入库操作人
*/
private String inOpor;
/**
* 出库操作人
*/
private String outOpor;
/**
* 最后一次出库的时间
*/
private Date checkOutDate;
/**
* 关联条码,夹具时关联相关的物料,用于入库完成时插入相关物料
*/
@Transient
private List<String> relationCodes;
/**
* 是否是锡膏
*/
public boolean isSolder(){
return type == COMPONENT_TYPE.SOLDERPASTE;
}
public List<String> getRelationCodes() {
if (relationCodes == null) {
return Lists.newArrayList();
}
return relationCodes;
}
/**
* 上次使用时间(出入库时更改)
*/
private Date usedDate;
/**
* 使用次数(入库后+1)
*/
private int usedCount = 0;
/**
* 生产日期
*/
private Date produceDate;
/**
* 锁定ID(目前只有指定批次会锁定)
*/
private String lockId;
/**
* 锁定名
*/
private String lockName;
/**
* 原始条码
*/
private String fullCode;
}
package com.neotel.smfcore.core.barcode.rest.bean.dto;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
public class ComponentDto implements Serializable {
/**
* 产品类型:0元器件,1锡膏2PCB3其他4夹具
*/
@ApiModelProperty("产品类型:0元器件,1锡膏2PCB3其他4夹具")
private int type = COMPONENT_TYPE.COMPONENT;
/**
* 产品型号
*/
@ApiModelProperty("产品型号")
private String model;
//元器件型号
@ApiModelProperty("元器件型号")
private String productionType;
//"封装"/组件型号
@ApiModelProperty("组件型号")
private String encapsulation;
/**
* 冰箱存储条件
*/
@ApiModelProperty("冰箱存储条件")
private int storageCondition;
/**
* 室温最多存储时间
*/
@ApiModelProperty("室温最多存储时间")
private int maxStorageTime;
/**
* 回温时间
*/
@ApiModelProperty("回温时间")
private int warmTime;
/**
* 搅拌时间(分钟)
*/
@ApiModelProperty("搅拌时间(分钟)")
private int mixTime;
/**
* 夹具编号
*/
@ApiModelProperty("夹具编号")
private String fixtureNumber;
/**
* 名称 用户输入文本
锡膏类型(productionType) 有铅/无铅 选择
型号 文本输入
包装方式(encapsulation) 罐装/管装 选择
冰箱存储条件 默认单位是摄氏度,仅作输入显示
室温最多存储时间 用户输入数字,单位为小时,此时间为锡膏在料仓内最大存储时间,报警提示
回温时间 用户输入数字,单位为小时,达到回温时间按才能出库
开封后可以保存时间 室温最多存储时间-回温时间,第一次出库,就认为是开封
*/
//名称
private String name;
//料号
//@NotEmpty(message = "{component.partNumber.empty}")
// @NotEmpty(message = "{component.partNumber.empty}")
// @NotNull
private String partNumber;
/**
* 供应商PN,用于扫码贴标机转换PN
*/
// private String supplierPn;
//uid
private String uid;
//物料描述
private String description;
//单耗
private String unitCost;
//"MSL等级"
private String msl;
//"单位"
private String unit;
//"厂商"
private String producer;
//"厂商编号"
private String producerNumber;
//"供应商"
private String provider;
//"供应商编号"
private String providerNumber;
private int amount;
/**
* 报警值,与贴片机连机时使用,值小于1时为初始数量amount百分比,大于等于1时为数量,小于此值时会根据贴片机信息自动出料
*/
private float alarmValue = 0.5f;
private int plateSize;
private int height;
/**
* 单台料仓可存储此种物料的最大数量
*/
private int maxStoreNum = 999999999;
/**
* 单台料仓存储此种物料的最小数量
*/
private int minStoreNum = 0;
/**
* 出库时是否需要授权
*/
private boolean needAuth = false;
/**
* 展示的图片
*/
private String showImg = "";
/**
* 有效时长(生产日期+此天数为过期日期),设置默认有效期为2年
*/
private int validDay = 0;
public String getPSize(){
if(plateSize == 0 || height == 0){
return "";
}
if(type == COMPONENT_TYPE.FIXTURE){
return plateSize + "x" +height+"x" + partNumber;
}
return plateSize + "x" +height;
}
public int getAlarmAmount(){
if(alarmValue < 1){
return Float.valueOf(getAmount() * alarmValue).intValue();
}else{
return Float.valueOf(alarmValue).intValue();
}
}
/**
* 是否是锡膏
*/
public boolean isSolder(){
return type == COMPONENT_TYPE.SOLDERPASTE;
}
}
package com.neotel.smfcore.core.barcode.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.barcode.rest.bean.dto.BarcodeDto;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
import org.springframework.web.bind.annotation.RequestMapping;
@Mapper(componentModel = "spring" ,unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface BarcodeMapper extends BaseMapper<BarcodeDto, Barcode> {
}
package com.neotel.smfcore.core.barcode.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.barcode.rest.bean.dto.ComponentDto;
import com.neotel.smfcore.core.barcode.service.po.Component;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ComponentMapper extends BaseMapper<ComponentDto, Component> {
}
package com.neotel.smfcore.core.barcode.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
@Data
public class BarcodeQueryCriteria {
@QueryCondition(blurry = "partNumber,barcode,batch")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN)
private List<Timestamp> createTime;
@QueryCondition
private String partNumber;
@QueryCondition
private String barcode;
@QueryCondition
private String batch;
}
package com.neotel.smfcore.core.barcode.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
@Data
public class ComponentQueryCriteria {
@QueryCondition(blurry = "name,partNumber,model,uid,productionType,encapsulation,description")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN)
private List<Timestamp> createTime;
@QueryCondition
private String name;
@QueryCondition
private String partNumber;
@QueryCondition
private String model;
@QueryCondition
private String uid;
@QueryCondition
private String productionType;
@QueryCondition
private String encapsulation;
@QueryCondition
private String description;
}
...@@ -3,8 +3,15 @@ package com.neotel.smfcore.core.barcode.service.manager; ...@@ -3,8 +3,15 @@ package com.neotel.smfcore.core.barcode.service.manager;
import com.neotel.smfcore.common.base.IBaseManager; import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public interface IBarcodeManager extends IBaseManager<Barcode> { public interface IBarcodeManager extends IBaseManager<Barcode> {
Barcode findByBarcode(String reelId); Barcode findByBarcode(String reelId);
Barcode saveBarcode(Barcode resources);
void download(List<Barcode> list, HttpServletResponse response) throws IOException;
} }
...@@ -3,6 +3,16 @@ package com.neotel.smfcore.core.barcode.service.manager; ...@@ -3,6 +3,16 @@ package com.neotel.smfcore.core.barcode.service.manager;
import com.neotel.smfcore.common.base.IBaseManager; import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.core.barcode.service.po.Component; import com.neotel.smfcore.core.barcode.service.po.Component;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public interface IComponentManager extends IBaseManager<Component> { public interface IComponentManager extends IBaseManager<Component> {
Component findByPartNumberAndProvider(String partNumber, String provider); Component findByPartNumberAndProvider(String partNumber, String provider);
Component findOneByPN(String partNumber);
void saveComponent(Component resources);
void download(List<Component> queryAll, HttpServletResponse response) throws IOException;
} }
package com.neotel.smfcore.core.barcode.service.manager.impl; package com.neotel.smfcore.core.barcode.service.manager.impl;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.BadRequestException;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.core.barcode.service.dao.IBarcodeDao; import com.neotel.smfcore.core.barcode.service.dao.IBarcodeDao;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager; import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; 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.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Slf4j
@Service @Service
public class BarcodeManagerImpl implements IBarcodeManager { public class BarcodeManagerImpl implements IBarcodeManager {
@Autowired @Autowired
private IBarcodeDao barcodeDao; private IBarcodeDao barcodeDao;
@Autowired
private IComponentManager componentManager;
@Override @Override
public Barcode get(String id) { public Barcode get(String id) {
return null; return barcodeDao.findOneById(id);
} }
@Override @Override
public Barcode save(Barcode object) throws ValidateException { public Barcode save(Barcode object) throws ValidateException {
return null; return barcodeDao.save(object);
} }
@Override @Override
public void delete(Barcode object) throws ValidateException { public void delete(Barcode object) throws ValidateException {
barcodeDao.removeOne(object);
} }
@Override @Override
public PageData<Barcode> findByPage(Query query, Pageable pageable) { public PageData<Barcode> findByPage(Query query, Pageable pageable) {
return null; List<Barcode> barcodes= barcodeDao.findByQuery(query,pageable);
return new PageData(barcodes,barcodes.size());
} }
@Override @Override
public List<Barcode> findByQuery(Query query) { public List<Barcode> findByQuery(Query query) {
return null; return barcodeDao.findByQuery(query);
} }
@Override @Override
public Barcode findByBarcode(String reelId) { public Barcode findByBarcode(String reelId) {
return barcodeDao.findOneByCondition(new String[]{"barcode"}, new String[]{reelId}); return barcodeDao.findOneByCondition(new String[]{"barcode"}, new String[]{reelId});
} }
@Override
public void download(List<Barcode> barcodes, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (Barcode barcode : barcodes) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("条码编号", barcode.getBarcode());
map.put("物料编号", barcode.getPartNumber());
map.put("批次", barcode.getBatch());
map.put("供应商编码", barcode.getProviderNumber());
map.put("料盘尺寸", barcode.getPlateSize()+"X"+barcode.getHeight());
map.put("封装数量", barcode.getAmount());
map.put("创建日期", barcode.getCreateDate());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
public Barcode saveBarcode(Barcode resources) {
validateSave(resources);
Criteria c= Criteria.where("barcode").is(resources.getBarcode());
String logName="新增条码:";
if(resources.getId()!=null){
logName="修改条码:";
c.and("id").ne(resources.getId());
}
Query query=new Query(c);
//readID不能重复
Barcode data= barcodeDao.findOne(query);
if(data!=null){
throw new BadRequestException("条码["+resources.getBarcode()+"]已存在");
}
if(resources.getProvider()==null){
resources.setProvider("");
}
Component component = componentManager.findByPartNumberAndProvider(resources.getPartNumber(), resources.getProvider());
if(component == null){
//未找到对应供应商的物料,如果有无供应商的物料,更改并使用
log.info("找到供应商信息为空的档案,修改档案的供应商信息"+resources.getProvider());
component = componentManager.findByPartNumberAndProvider(resources.getPartNumber(), null);
}
if(component == null){
//查找其他供应商的物料档案,复制一个
component = componentManager.findOneByPN(resources.getPartNumber());
if(component != null){
log.info("未找到["+resources.getPartNumber()+"]供应商["+resources.getProvider()+"]对应的档案信息,从其他供应商["+component.getProvider()+"]档案复制一个");
//找到了,复制一个
Component newComponent = new Component();
newComponent.setProvider(resources.getProvider());
newComponent.setPlateSize(component.getPlateSize());
newComponent.setHeight(component.getHeight());
newComponent.setPartNumber(component.getPartNumber());
newComponent.setAmount(resources.getAmount());
newComponent.setName(component.getPartNumber());
component = componentManager.save(component);
}
}
if(component != null){
if(Strings.isNullOrEmpty(component.getProvider())){
//无供应商信息,更新供应商信息
log.info("设置["+component.getPartNumber()+"]的供应商信息:"+ resources.getProvider());
component.setProvider(resources.getProvider());
componentManager.save(component);
}
if(resources.getMaxStorageTime() <= 0){
resources.setMaxStorageTime(component.getMaxStorageTime());
}
// if(barcode.getAmount() == 1){
// barcode.setAmount(component.getAmount());
// }
resources.setType(component.getType());
resources.setWarmTime(component.getWarmTime());
resources.setMixTime(component.getMixTime());
resources.setOtherField1(component.getProductionType());
if(resources.getPlateSize() <= 0){
log.info("设置置["+resources.getBarcode()+"]的尺寸信息");
resources.setPlateSize(component.getPlateSize());
resources.setHeight(component.getHeight());
}
}else{
log.error("未找到物料["+resources.getPartNumber()+"]的档案");
}
return barcodeDao.save(resources);
}
protected boolean validateComponent(Barcode barcode) {
return componentManager.findOneByPN(barcode.getPartNumber()) != null;
}
protected void validateSave(Barcode barcode) throws BadRequestException {
if (barcode.getBarcode()==null) {
throw new ValidateException("barcode.error.empty");
}
if (barcode.getPartNumber()==null) {
throw new BadRequestException("["+barcode.getBarcode()+"]barcode.error.partNumber.empty");
}
if (barcode.getBatch() == null) {
throw new BadRequestException("批次不能为空");
}
if (barcode.getAmount() < 0) {
throw new BadRequestException("["+barcode.getBarcode()+"]barcode.error.amount.negative" );
}
if (!validateUnique(barcode)) {
throw new BadRequestException("["+barcode.getBarcode()+"]barcode.error.unique" );
}
if (!validateComponent(barcode)) {
throw new BadRequestException("["+barcode.getBarcode()+"]barcode.error.component.notExist" );
}
}
protected boolean validateUnique(Barcode barcode) {
boolean unique = true;
if (Strings.isNullOrEmpty(barcode.getId())){
Barcode anotherBarcode = findByBarcode(barcode.getBarcode());
if(anotherBarcode != null){
log.info("ID:"+barcode.getId()+"[barcode:"+barcode.getBarcode() +"] another ID:" + anotherBarcode.getId() +" With the same barcode:"+anotherBarcode.getBarcode());
unique = false;
}
}
return unique;
}
} }
...@@ -2,16 +2,23 @@ package com.neotel.smfcore.core.barcode.service.manager.impl; ...@@ -2,16 +2,23 @@ package com.neotel.smfcore.core.barcode.service.manager.impl;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.core.barcode.service.dao.IComponentDao; import com.neotel.smfcore.core.barcode.service.dao.IComponentDao;
import com.neotel.smfcore.core.barcode.service.manager.IComponentManager; import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Component; import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.security.service.po.User;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Service @Service
public class ComponentManagerImpl implements IComponentManager { public class ComponentManagerImpl implements IComponentManager {
...@@ -62,4 +69,34 @@ public class ComponentManagerImpl implements IComponentManager { ...@@ -62,4 +69,34 @@ public class ComponentManagerImpl implements IComponentManager {
return component; return component;
} }
} }
@Override
public Component findOneByPN(String partNumber) {
if (StringUtils.isEmpty(partNumber)) {
return null;
} else {
return componentDao.findOneByCondition(new String[]{"partNumber"}, new String[]{partNumber});
}
}
@Override
public void download(List<Component> queryAll, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (Component component : queryAll) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("名称", component.getName());
map.put("物料编号", component.getPartNumber());
map.put("供应商编码", component.getProviderNumber());
map.put("料盘尺寸", component.getPlateSize()+"X"+component.getHeight());
map.put("封装数量", component.getAmount());
map.put("创建日期", component.getCreateDate());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
public void saveComponent(Component resources) {
}
} }
...@@ -19,6 +19,9 @@ import java.util.List; ...@@ -19,6 +19,9 @@ import java.util.List;
@Data @Data
@Document @Document
public class Barcode extends BasePo implements Serializable { public class Barcode extends BasePo implements Serializable {
/**
* 条码编号
*/
private String barcode; private String barcode;
/** /**
* 物料类型:PCB,锡膏,或其他 * 物料类型:PCB,锡膏,或其他
...@@ -53,8 +56,13 @@ public class Barcode extends BasePo implements Serializable { ...@@ -53,8 +56,13 @@ public class Barcode extends BasePo implements Serializable {
*/ */
private Date needOutDate; private Date needOutDate;
//private int componentType = 0; //private int componentType = 0;
/**
* 料件编号
*/
private String partNumber; private String partNumber;
//"供应商编号" /**
* 供应商编号
*/
private String providerNumber; private String providerNumber;
private int initialAmount; private int initialAmount;
private int amount; private int amount;
...@@ -62,9 +70,12 @@ public class Barcode extends BasePo implements Serializable { ...@@ -62,9 +70,12 @@ public class Barcode extends BasePo implements Serializable {
* 标签解析出来的数量,用于判断条码是否是重新打印的,重新打印的条码需要重新设置数量 * 标签解析出来的数量,用于判断条码是否是重新打印的,重新打印的条码需要重新设置数量
*/ */
private int labelAmount = 0; private int labelAmount = 0;
private int plateSize; private int plateSize=0;
private int height; private int height=0;
private String provider; private String provider;
/**
* 批次
*/
private String batch; private String batch;
private String msl; private String msl;
......
...@@ -8,7 +8,6 @@ import com.neotel.smfcore.common.bean.ResultBean; ...@@ -8,7 +8,6 @@ import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.BadRequestException; import com.neotel.smfcore.common.exception.BadRequestException;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants; import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.PageUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
......
...@@ -4,7 +4,6 @@ package com.neotel.smfcore.core.system.rest; ...@@ -4,7 +4,6 @@ package com.neotel.smfcore.core.system.rest;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.PageUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
......
...@@ -3,7 +3,6 @@ package com.neotel.smfcore.security.rest; ...@@ -3,7 +3,6 @@ package com.neotel.smfcore.security.rest;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.BadRequestException; import com.neotel.smfcore.common.exception.BadRequestException;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.PageUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.storage.service.manager.IStorageManager; import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
......
...@@ -63,6 +63,8 @@ public class UserController { ...@@ -63,6 +63,8 @@ public class UserController {
@Autowired @Autowired
private IUserManager userManager; private IUserManager userManager;
@Autowired @Autowired
private UserMapper userMapper;
@Autowired
private IRoleManager roleManager; private IRoleManager roleManager;
...@@ -89,7 +91,8 @@ public class UserController { ...@@ -89,7 +91,8 @@ public class UserController {
@ApiOperation("新增用户") @ApiOperation("新增用户")
@PostMapping @PostMapping
@PreAuthorize("@el.check('user:add')") @PreAuthorize("@el.check('user:add')")
public ResponseEntity<Object> create(@Validated @RequestBody User resources) { public ResponseEntity<Object> create(@Validated @RequestBody UserDto userDto) {
User resources=userMapper.toEntity(userDto);
if (resources.getId() != null) { if (resources.getId() != null) {
throw new BadRequestException("新增用户:ID已存在"); throw new BadRequestException("新增用户:ID已存在");
} }
...@@ -116,7 +119,8 @@ public class UserController { ...@@ -116,7 +119,8 @@ public class UserController {
@PutMapping @PutMapping
@PreAuthorize("@el.check('user:edit')") @PreAuthorize("@el.check('user:edit')")
// public ResponseEntity<Object> update(@Validated(User.Update.class) @RequestBody User resources) throws Exception { // public ResponseEntity<Object> update(@Validated(User.Update.class) @RequestBody User resources) throws Exception {
public ResponseEntity<Object> update(@Validated @RequestBody User resources) { public ResponseEntity<Object> update(@Validated @RequestBody UserDto userDto) {
User resources=userMapper.toEntity(userDto);
if (resources.getId() == null) { if (resources.getId() == null) {
throw new BadRequestException("修改用户:ID不能为空"); throw new BadRequestException("修改用户:ID不能为空");
} }
......
package com.neotel.smfcore.security.rest.bean.dto; package com.neotel.smfcore.security.rest.bean.dto;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
...@@ -11,27 +13,36 @@ import java.util.Set; ...@@ -11,27 +13,36 @@ import java.util.Set;
@Setter @Setter
public class UserDto implements Serializable { public class UserDto implements Serializable {
@ApiModelProperty(value = "ID")
private String id; private String id;
@ApiModelProperty(value ="角色ID")
private String roleId; private String roleId;
@ApiModelProperty(value ="用户名")
private String username; private String username;
@ApiModelProperty(value ="邮箱")
private String email; private String email;
@ApiModelProperty(value ="语言")
private String language=""; private String language="";
@JSONField(serialize = false) @JSONField(serialize = false)
private String password; private String password;
@ApiModelProperty(value ="是否启用")
private Boolean enabled; private Boolean enabled;
@JSONField(serialize = false) @JSONField(serialize = false)
private Boolean isAdmin = false; private Boolean isAdmin = false;
@ApiModelProperty(value ="重置密码时间")
private Date pwdResetTime; private Date pwdResetTime;
@ApiModelProperty(value ="组ID列表")
private Set<String> groups; private Set<String> groups;
@ApiModelProperty(value ="角色名称")
private String roleName; private String roleName;
} }
package com.neotel.smfcore.security.rest.bean.vo; package com.neotel.smfcore.security.rest.bean.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -8,7 +9,9 @@ import org.springframework.stereotype.Service; ...@@ -8,7 +9,9 @@ import org.springframework.stereotype.Service;
@Getter @Getter
public class UserPassVo { public class UserPassVo {
@ApiModelProperty ("旧密码")
private String oldPass; private String oldPass;
@ApiModelProperty ("新密码")
private String newPass; private String newPass;
} }
...@@ -21,7 +21,6 @@ import com.neotel.smfcore.security.rest.bean.dto.JwtUserDto; ...@@ -21,7 +21,6 @@ import com.neotel.smfcore.security.rest.bean.dto.JwtUserDto;
import com.neotel.smfcore.security.rest.bean.dto.OnlineUserDto; import com.neotel.smfcore.security.rest.bean.dto.OnlineUserDto;
import com.neotel.smfcore.common.utils.EncryptUtils; import com.neotel.smfcore.common.utils.EncryptUtils;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.PageUtil;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!