Commit a216d74e LN

1.工单增加数量修改,套料出库,尾料出库,关闭工单接口

2.库位查询增加是否启用搜索
2.个人资料修改,密码修改,密码重置功能
1 个父辈 97a874f1
......@@ -206,9 +206,11 @@ public class DataInitManager {
Menu menuOut = new Menu(new ArrayList<Menu>(), 1, "checkOut", "查找出库", 1, "singleOuput", "neolight/singleOuput/index", "", 0, "export1");
Menu celueOut = new Menu(new ArrayList<Menu>(), 1, "tacticsOuput", "策略出库", 1, "tacticsOuput", "neolight/tacticsOuput/index", "", 0, "workOrder");
Menu groupOut = new Menu(new ArrayList<Menu>(), 1, "labelOuput", "物料分组", 1, "labelOuput", "neolight/labelOuput/index", "", 0, "export1");
Menu manualOut = new Menu(new ArrayList<Menu>(), 1, "manualOut", "手动出库", 1, "manualOut", "neolight/manualOut/index", "", 0, "export1");
celueOut.setHidden(true);
groupOut.setHidden(true);
menus.addAll(createMenus(poutOut, menuOrder, menuOut,celueOut,groupOut));
manualOut.setHidden(true);
menus.addAll(createMenus(poutOut, menuOrder, menuOut,celueOut,groupOut,manualOut));
//设置:料仓管理,菜单管理
Menu poutSet = Menu.CreatePMenu("设置", 30, "system", 2, "system");
......
......@@ -10,6 +10,8 @@ public class Constants {
* 超级管理员用户名
*/
public static final String SUPER_USERNAME= "admin";
public static final String USER_DEFAULTP_PWD="123456";
/**
* Assets Version constant
*/
......
......@@ -23,6 +23,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.listener.ITaskListener;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import javafx.concurrent.Task;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -60,9 +61,13 @@ public class LiteOrderCache implements ITaskListener {
@Override
public void onTaskStatusChange(DataLog task) {
try {
//只有任务完成或取消时才处理,任务未完成直接返回
if (task.isFinished() || task.isCancel()) {
finishedOrderTask(task);
}
} catch (Exception e) {
log.error("更新工单状态出错",e);
log.error("更新工单状态出错", e);
}
}
......@@ -102,6 +107,7 @@ public class LiteOrderCache implements ITaskListener {
}
liteOrder.setTaskReelCount(taskReelCount);
liteOrder.setTotalTaskReelCount(liteOrder.getTotalTaskReelCount()+taskReelCount);
log.info("工单[" + liteOrder.getOrderNo() + "]任务分配结束,任务数[" + taskReelCount + "]");
//有需要出库的
if (taskReelCount <= 0) {
......@@ -120,6 +126,7 @@ public class LiteOrderCache implements ITaskListener {
*/
private synchronized void finishedOrderTask(DataLog task) throws ValidateException {
if (OP.CHECKOUT == task.getType()) {
//更新工单状态
String orderNo = task.getSourceName();
if (!Strings.isNullOrEmpty(orderNo)) {
......@@ -136,9 +143,12 @@ public class LiteOrderCache implements ITaskListener {
//任务是取消的,需要将总待出库数量-1
if (task.isCancel()) {
order.setTaskReelCount(order.getTaskReelCount() - 1);
order.setTotalTaskReelCount(order.getTotalTaskReelCount()-1);
log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]已取消,任务数-1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount());
} else if (task.isFinished()) {
}
else if (task.isFinished()) {
order.setFinishedReelCount(order.getFinishedReelCount() + 1);
order.setTotalFinishedReelCount(order.getTotalFinishedReelCount()+1);
String orderItemId = task.getSubSourceId();
List<LiteOrderItem> items = new ArrayList<>();
for (LiteOrderItem liteOrderItem : order.getOrderItems()) {
......@@ -147,6 +157,8 @@ public class LiteOrderCache implements ITaskListener {
//更新对应条目的已出库数量和出库盘数
liteOrderItem.setOutNum(liteOrderItem.getOutNum() + task.getNum());
liteOrderItem.setOutReelCount(liteOrderItem.getOutReelCount() + 1);
liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum()+task.getNum());
liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount()+1);
liteOrderItem = liteOrderItemManager.save(liteOrderItem);
// Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
// if (barcode != null) {
......@@ -202,14 +214,14 @@ public class LiteOrderCache implements ITaskListener {
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder != null && !cacheOrder.isTaskFinished() && !cacheOrder.isNew()) {
log.info("工单[" + orderNo + "]正在执行");
return "order.out.executing";
return "smfcode.order.out.executing";
}
if (cacheOrder == null) {
cacheOrder = liteOrderManager.findByOrderNo(orderNo);
}
if (cacheOrder == null) {
return "order.out.notFound";
return "smfcode.order.out.notFound";
}
......@@ -222,7 +234,7 @@ public class LiteOrderCache implements ITaskListener {
ORDER_COLOR nextColor = ORDER_COLOR.nextColor(currentColors);
if (nextColor == null) {
log.info("执行工单[" + orderNo + "] outBom=" + outBom + "时,已达最大可执行工单数");
return "order.out.maxOrder";
return "smfcode.order.out.maxOrder";
}
log.info("开始执行工单[" + orderNo + "] outBom=" + outBom);
......@@ -250,9 +262,14 @@ public class LiteOrderCache implements ITaskListener {
//其他出库模式一次性全部生成任务
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
orderItem.setOutNum(0);
orderItem.setOutReelCount(0);
liteOrderItemManager.save(orderItem);
//剩余未出数量
Float totalNum = orderItem.getNeedNum() * cacheOrder.getOrderTimes();
int remainNum = totalNum.intValue() - orderItem.getOutNum();
//此PN未完成
if (remainNum > 0) {
if (outBom) {
......@@ -265,7 +282,7 @@ public class LiteOrderCache implements ITaskListener {
String partNumber = orderItem.getPn();
StoragePos pos = storagePosManager.findPartNumberInStorages(availableStorageIds, partNumber, excludePosIds, checkoutType);
if (pos == null) {
log.error("未找到可以出库的物料[" + partNumber + "]");
// log.error("未找到可以出库的物料[" + partNumber + "]");
break;
} else {
assignNum = assignNum + pos.getBarcode().getAmount();
......@@ -282,12 +299,16 @@ public class LiteOrderCache implements ITaskListener {
task.setStatus(OP_STATUS.WAIT.name());
// task = dataLogDao.save(task);
taskService.addTaskToExecute(task);
}
}
}
}
cacheOrder.setTaskReelCount(taskReelCount);
cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount);
log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]");
//有需要出库的
if (taskReelCount <= 0) {
......@@ -295,10 +316,11 @@ public class LiteOrderCache implements ITaskListener {
}
liteOrderManager.save(cacheOrder);
liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
if (taskReelCount <= 0) {
//return "工单无可执行的任务";
return "order.out.noTask";
return "smfcode.order.out.noTask";
}
return "";
}
......@@ -339,4 +361,38 @@ public class LiteOrderCache implements ITaskListener {
return task;
}
/**
* 关闭工单
* @param orderNo
*/
public String closeOrder(String orderNo) {
LiteOrder liteOrder = liteOrderMap.get(orderNo);
if (liteOrder == null) {
liteOrder=liteOrderManager.findByOrderNo(orderNo);
if(liteOrder==null){
return "smfcode.order.out.notFound";
}
}
//有任务的工单不能关闭
List<DataLog> allTask=taskService.getAllTasks();
for (DataLog task:allTask
) {
if (OP.CHECKOUT == task.getType()&&(!task.isEnd())) {
//更新工单状态
String taskSourceName = task.getSourceName();
if (!Strings.isNullOrEmpty(taskSourceName) && orderNo.equals(taskSourceName)) {
log.info("关闭工单[" + orderNo + "]失败,有未完成的出库任务:"+task.getPosName());
return "smfcode.order.close.taskNotEnd";
}
}
}
//绑定料需要解绑
storagePosManager.clearLockPos(liteOrder.getOrderNo());
log.info("关闭工单[" + orderNo + "]成功");
liteOrder.setClosed(true);
liteOrderManager.save(liteOrder);
return "smfcode.order.close.success";
}
}
package com.neotel.smfcore.core.order.rest;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.db.sql.Order;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.annotation.QueryCondition;
......@@ -33,6 +34,7 @@ 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 javafx.concurrent.Task;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
......@@ -152,18 +154,56 @@ public class OrderController {
@ApiOperation("工单出库")
@PostMapping(value = "/out")
@PreAuthorize("@el.check('workOrder')")
public ResultBean delete(@RequestBody Map<String, String> mapValues) {
public ResultBean checkOut(@RequestBody Map<String, String> mapValues) {
String orderNo = mapValues.get("orderNo");
if (orderNo == null) {
// throw new ValidateException("工单号不能为空");
throw new ValidateException("smfcode.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder == null) {
throw new ValidateException("smfcode.valueNotFind", "未找到{0}[{1}]", new String[]{"orderNo", orderNo});
}
// ResultBean resultBean = liteOrderCache.checkOutOrder(liteOrder);
return liteOrderCache.checkOutOrder(liteOrder);
String result= liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(),false);
if(ObjectUtil.isEmpty(result)){
return ResultBean.newOkResult(result);
}else{
return ResultBean.newErrorResult(-1,result,result);
}
}
@ApiOperation("套料出库")
@PostMapping(value = "/outBom")
@PreAuthorize("@el.check('workOrder')")
public ResultBean outBom(@RequestBody Map<String, String> mapValues) {
String orderNo = mapValues.get("orderNo");
if (orderNo == null) {
throw new ValidateException("smfcode.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
String result= liteOrderCache.checkOutLiteOrder(orderNo,true);
if(ObjectUtil.isEmpty(result)){
return ResultBean.newOkResult(result);
}else{
return ResultBean.newErrorResult(-1,result,result);
}
}
@ApiOperation("尾料出库")
@PostMapping(value = "/outTails")
@PreAuthorize("@el.check('workOrder')")
public ResultBean outTails(@RequestBody Map<String, String> mapValues) {
String orderNo = mapValues.get("orderNo");
if (orderNo == null) {
throw new ValidateException("smfcode.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
String result= liteOrderCache.checkOutLiteOrder(orderNo,false);
if(ObjectUtil.isEmpty(result)){
return ResultBean.newOkResult(result);
}else{
return ResultBean.newErrorResult(-1,result,result);
}
}
@ApiOperation("查询工单")
......@@ -298,4 +338,48 @@ public class OrderController {
throw new ValidateException("smfcode.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
@ApiOperation("修改工单数量")
@PostMapping(value = "/updateNum")
@PreAuthorize("@el.check('workOrder')")
public ResultBean updateNum(@RequestBody OrderDto param) {
String orderNo = param.getOrderNo();
float orderTimes= param.getOrderTimes();
if (orderNo == null) {
// throw new ValidateException("工单号不能为空");
throw new ValidateException("smfcode.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder == null) {
throw new ValidateException("smfcode.valueNotFind", "未找到{0}[{1}]", new String[]{"orderNo", orderNo});
}
if(!liteOrder.isNew()){
throw new ValidateException("smfcode.cannotUpdateOrderNum", "工单已出库,不能修改数量" );
}
if(orderTimes<1){
orderTimes=1;
}
liteOrder.setOrderTimes(orderTimes);
liteOrderManager.save(liteOrder );
return ResultBean.newOkResult(orderMapper.toDto(liteOrder) );
}
@ApiOperation("关闭工单")
@PostMapping(value = "/closeOrder")
@PreAuthorize("@el.check('workOrder')")
public ResultBean closeOrder(@RequestBody Map<String, String> mapValues) {
String orderNo = mapValues.get("orderNo");
if (orderNo == null) {
throw new ValidateException("smfcode.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
String result=liteOrderCache.closeOrder(orderNo);
if(ObjectUtil.isEmpty(result)){
return ResultBean.newOkResult(result);
}else{
return ResultBean.newErrorResult(-1,result,result);
}
}
}
......@@ -33,6 +33,11 @@ public class OrderDto implements Serializable {
@ApiModelProperty("当前任务已完成盘数")
private int finishedReelCount = 0;
@ApiModelProperty("累计任务盘数")
private int totalTaskReelCount = 0;
@ApiModelProperty("累计任务已完成盘数")
private int totalFinishedReelCount = 0;
/**
* 订单状态
* 0=新建工单
......@@ -52,28 +57,18 @@ public class OrderDto implements Serializable {
@ApiModelProperty("出库状态, 2表示已完成")
private boolean closed = false;
/**
* 工单来源
*/
@ApiModelProperty("工单来源")
private String source = "";
/**
* 任务完成时间(用于关闭页面显示)
*/
@ApiModelProperty("任务完成时间(用于关闭页面显示)")
@Transient
private long taskFinishedTime = -1;
/**
* 套(倍)数
*/
@ApiModelProperty("套(倍)数")
private float orderTimes = 1f;
/**
* 订单的详细信息
*/
@Transient
@ApiModelProperty("订单的详细信息")
private List<OrderItemDto> orderItems;
......
......@@ -25,10 +25,14 @@ public class LiteOrder extends BasePo implements Serializable {
}
/**
* 单号
* 需求单号
*/
private String orderNo;
/**
* 工单号
*/
private String so;
/**
* 当前任务盘数
*/
private int taskReelCount = 0;
......@@ -39,6 +43,16 @@ public class LiteOrder extends BasePo implements Serializable {
private int finishedReelCount = 0;
/**
* 累计任务盘数
*/
private int totalTaskReelCount = 0;
/**
* 累计任务已完成盘数
*/
private int totalFinishedReelCount = 0;
/**
* 订单状态
*/
private int status = LITEORDER_STATUS.NEW;
......@@ -48,13 +62,6 @@ public class LiteOrder extends BasePo implements Serializable {
*/
private boolean closed = false;
public void setClosed(boolean value){
this.closed=value;
if(value){
setStatus(LITEORDER_STATUS.CLOSED);
}
}
/**
* 工单来源
......@@ -62,6 +69,11 @@ public class LiteOrder extends BasePo implements Serializable {
private String source = "";
/**
* 线别,AGV运送时使用此值做为目的地
*/
private String line = "";
/**
* 任务完成时间(用于关闭页面显示)
*/
@Transient
......@@ -88,6 +100,13 @@ public class LiteOrder extends BasePo implements Serializable {
*/
private Date sdate=new Date();
public void setClosed(boolean value){
this.closed=value;
if(value){
setStatus(LITEORDER_STATUS.CLOSED);
}
}
/**
* 结束当前的任务
*/
......@@ -150,6 +169,13 @@ public class LiteOrder extends BasePo implements Serializable {
this.taskReelCount = taskReelCount;
}
public void setTotalTaskReelCount(int totalReelCount){
if(totalReelCount<0){
totalReelCount=0;
}
this.totalTaskReelCount=totalReelCount;
}
/**
* 是否需要展示(已完成的,过20 秒自动清除)
......
......@@ -20,24 +20,44 @@ public class LiteOrderItem extends BasePo implements Serializable {
private String ri;
//需求数量
/**
* 总需求数量
*/
private int needNum = 0;
/**
* 需求料盘数
* 需求料盘数
*/
private int needReelCount = 0;
//已出数量
/**
* 当前任务已出数量
*/
private int outNum = 0;
//已出盘数
/**
* 当前任务已出盘数
*/
private int outReelCount = 0;
/**
* 累计已出数量
*/
private int totalOutNum = 0;
/**
* 累计已出盘数
*/
private int totalOutReelCount = 0;
/**
* 订单信息
*/
private String orderNo = "";
/**
* 站位编号
*/
private String slotNum="";
/**
* 站位信息
......
......@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.storage.rest.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
......@@ -27,4 +28,8 @@ public class StoragePosQueryCriteria {
@QueryCondition(type = QueryCondition.Type.IN, propName = "storageId")
private List<String> storageIdList;
@ApiModelProperty("是否启用")
@QueryCondition
private Boolean enabled;
}
......@@ -17,8 +17,10 @@ import java.util.Set;
public interface IStoragePosManager extends IBaseManager<StoragePos> {
List<PlateSizeBean> getStoragePosUsage(String storageId);
StoragePos getByPosName(String posName);
Map<String,InventoryItem> getInventory(String id);
Map<String, InventoryItem> getInventory(String id);
StoragePos getByBarcode(String barcode);
......@@ -32,7 +34,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
void deletePoss(Set<String> ids);
StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds) throws ValidateException ;
StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds) throws ValidateException;
StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds, String lastPosId) throws ValidateException;
......@@ -48,5 +50,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
void clearStoragePosLabel(String id);
void updatePosLabel( String[] posIds, String labelId);
void updatePosLabel(String[] posIds, String labelId);
void clearLockPos(String lockId);
}
......@@ -217,8 +217,13 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Query q = new Query(c);
Sort sort = getSortByCheckOutType(checkOutType);
q.with(sort);
log.info("使用"+checkOutType+"策略出库partNumber="+pn);
return storagePosDao.findOne(q);
StoragePos pos=storagePosDao.findOne(q);
if(pos==null){
log.info("使用"+checkOutType+" 策略出库 partNumber="+pn+",未找到可以出库的物料 ");
}else{
log.info("使用"+checkOutType+" 策略出库 partNumber="+pn+",找到出仓位置【"+ pos.getPosName()+"】,RI【"+pos.getBarcode().getBarcode()+"】 ");
}
return pos;
}
......@@ -388,4 +393,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
storagePosDao.updateMulti(query, Update.update("labelId",labelId));
}
@Override
public void clearLockPos(String lockId) {
Query query = new Query( Criteria.where("barcode.lockId").is(lockId));
storagePosDao.updateMulti(query, Update.update("barcode.lockId",""));
}
}
......@@ -90,7 +90,6 @@ public class UserController {
@ApiOperation("查询用户")
@GetMapping
@PreAuthorize("@el.check('user:list')")
// public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable){
public PageData<UserDto> query(UserQueryCriteria criteria, Pageable pageable) {
Query query = QueryHelp.getQuery(criteria);
PageData<User> userPageData = userManager.findByPage(query, pageable);
......@@ -127,7 +126,7 @@ public class UserController {
if(resources.getCheckCode()==null){
resources.setCheckCode("");
}
resources.setPassword(passwordEncoder.encode("123456"));
resources.setPassword(passwordEncoder.encode("Constants.USER_DEFAULTP_PWD"));
resources.setUpdateDate(new Date());
resources.setPwdResetTime(new Date());
userManager.save(resources);
......@@ -137,20 +136,16 @@ public class UserController {
@ApiOperation("修改用户")
@PutMapping
@PreAuthorize("@el.check('user:edit')")
// public ResponseEntity<Object> update(@Validated(User.Update.class) @RequestBody User resources) throws Exception {
public ResponseEntity<Object> update(@Validated @RequestBody UserDto userDto) {
User resources=userMapper.toEntity(userDto);
if (resources.getId() == null) {
throw new ValidateException("smfcode.valueCanotNull","{0}不能为空",new String[]{"ID"} );
// throw new ValidateException("修改用户:ID不能为空");
}
if(resources.getUsername()==null){
throw new ValidateException("smfcode.valueCanotNull","{0}不能为空",new String[]{"username"} );
// throw new ValidateException("修改用户:用户名不能为空");
}
if(resources.getRoleId()==null){
throw new ValidateException("smfcode.valueCanotNull","{0}不能为空",new String[]{"roleId"} );
// throw new ValidateException("修改用户:角色ID不能为空");
}
userManager.update(resources);
......@@ -158,19 +153,53 @@ public class UserController {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@ApiOperation("修改用户:个人中心")
@PutMapping(value = "center")
// public ResponseEntity<Object> center(@Validated(User.Update.class) @RequestBody User resources){
public ResponseEntity<Object> center(@Validated @RequestBody UserDto userDto) {
@ApiOperation("重置密码")
@PutMapping(value = "/resetPass")
@PreAuthorize("@el.check('user:edit')")
public ResultBean resetPass(@Validated @RequestBody UserDto userDto) {
if (userDto.getId() == null) {
throw new ValidateException("smfcode.valueCanotNull","{0}不能为空",new String[]{"ID"} );
}
User resources=userManager.get(userDto.getId());
resources.setPassword(passwordEncoder.encode(Constants.USER_DEFAULTP_PWD));
userManager.update(resources);
return ResultBean.newOkResult("");
}
@ApiOperation("个人中心:获取个人资料")
@GetMapping(value = "/center")
public UserDto getCenter() {
User user = userManager.get(SecurityUtils.getCurrentUserId());
return userMapper.toDto(user);
}
@ApiOperation("个人中心:修改个人资料")
@PutMapping(value = "/center")
public ResultBean center(@Validated @RequestBody UserDto userDto) {
User resources=userMapper.toEntity(userDto);
if (!resources.getId().equals(SecurityUtils.getCurrentUserId())) {
throw new ValidateException("smfcode.hasNoAccess","无权限修改此用户信息" );
// throw new ValidateException("不能修改他人资料");
}
userManager.updateCenter(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
return ResultBean.newOkResult("");
}
@ApiOperation("个人中心:修改密码")
@PostMapping(value = "/updatePass")
public ResultBean updatePass(@RequestBody UserPassVo passVo) throws Exception {
User user = userManager.get(SecurityUtils.getCurrentUserId());
String oldPass = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, passVo.getOldPass());
String newPass = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, passVo.getNewPass());
if (!passwordEncoder.matches(oldPass, user.getPassword())) {
throw new ValidateException("smfcode.oldPwdError","修改失败,旧密码错误");
}
if (passwordEncoder.matches(newPass, user.getPassword())) {
throw new ValidateException("smfcode.newPwdError","新密码不能与旧密码相同");
}
userManager.updatePass(user.getUsername(), passwordEncoder.encode(newPass));
return ResultBean.newOkResult("");
}
@ApiOperation("删除用户")
@DeleteMapping
......@@ -194,35 +223,21 @@ public class UserController {
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("修改密码")
@PostMapping(value = "/updatePass")
public ResponseEntity<Object> updatePass(@RequestBody UserPassVo passVo) throws Exception {
User user = userManager.get(SecurityUtils.getCurrentUserId());
if (!passwordEncoder.matches(passVo.getOldPass(), user.getPassword())) {
throw new ValidateException("smfcode.oldPwdError","修改失败,旧密码错误");
}
if (passwordEncoder.matches(passVo.getNewPass(), user.getPassword())) {
throw new ValidateException("smfcode.newPwdError","新密码不能与旧密码相同");
}
userManager.updatePass(user.getUsername(), passwordEncoder.encode(passVo.getNewPass()));
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("修改邮箱")
@PostMapping(value = "/updateEmail/{code}")
public ResponseEntity<Object> updateEmail(@PathVariable String code, @RequestBody UserDto userDto) throws Exception {
User user=userMapper.toEntity(userDto);
String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, user.getPassword());
User myUser = userManager.findByUserName(SecurityUtils.getCurrentUsername());
if (!passwordEncoder.matches(password, myUser.getPassword())) {
throw new ValidateException("smfcode.pwdError","修改邮箱失败,密码错误");
}
// verificationCodeService.validated(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey() + user.getEmail(), code);
userManager.updateEmail(myUser.getUsername(), myUser.getEmail());
return new ResponseEntity<>(HttpStatus.OK);
}
// @ApiOperation("修改邮箱")
// @PostMapping(value = "/updateEmail/{code}")
// public ResponseEntity<Object> updateEmail(@PathVariable String code, @RequestBody UserDto userDto) throws Exception {
// User user=userMapper.toEntity(userDto);
// String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, user.getPassword());
// User myUser = userManager.findByUserName(SecurityUtils.getCurrentUsername());
// if (!passwordEncoder.matches(password, myUser.getPassword())) {
// throw new ValidateException("smfcode.pwdError","修改邮箱失败,密码错误");
// }
//// verificationCodeService.validated(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey() + user.getEmail(), code);
// userManager.updateEmail(myUser.getUsername(), myUser.getEmail());
// return new ResponseEntity<>(HttpStatus.OK);
// }
@ApiOperation("修改用户组")
@PutMapping(value = "/updateGroup")
@PreAuthorize("@el.check('user:edit')")
......@@ -236,6 +251,8 @@ public class UserController {
userManager.updateGroups(resources);
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("上传用户列表:激活用户")
@PostMapping(value = "/upload")
public ResultBean upload( @RequestParam MultipartFile uploadFile) throws Exception {
......
......@@ -109,10 +109,11 @@ public class UserManagerImpl implements IUserManager {
public void updateCenter(User resources) {
User dataUser=this.get(resources.getId());
if(dataUser!=null){
//用户名admin不能修改
if(!dataUser.equals(Constants.SUPER_USERNAME)){
dataUser.setUsername(resources.getUsername());
}
// //用户名admin不能修改
// if(!dataUser.equals(Constants.SUPER_USERNAME)){
// dataUser.setUsername(resources.getUsername());
// }
//只能修改邮箱和语言
dataUser.setEmail(resources.getEmail());
dataUser.setLanguage(resources.getLanguage());
......
......@@ -93,6 +93,13 @@ smfcore.instruction=\u8BF4\u660E\u4E66
smfcore.about=\u5173\u4E8E
smfcore.tacticsOuput=\u7B56\u7565\u51FA\u5E93
smfcore.labelOuput=\u7269\u6599\u5206\u7EC4
smfcode.order.out.executing=\u5DE5\u5355\u6B63\u5728\u6267\u884C
smfcode.order.out.notFound=\u5DE5\u5355\u672A\u627E\u5230
smfcode.order.out.maxOrder=\u5DF2\u8FBE\u5230\u6700\u5927\u53EF\u6267\u884C\u5DE5\u5355\u6570
smfcode.order.out.noTask=\u5DE5\u5355\u65E0\u53EF\u6267\u884C\u7684\u4EFB\u52A1
smfcode.cannotUpdateOrderNum=\u5DE5\u5355\u5DF2\u51FA\u5E93\uFF0C\u4E0D\u80FD\u4FEE\u6539\u6570\u91CF
smfcode.order.close.success=\u5DE5\u5355\u5173\u95ED\u6210\u529F
smfcode.order.close.taskNotEnd=\u5DE5\u5355\u8FD8\u6709\u672A\u5B8C\u6210\u7684\u4EFB\u52A1
......
......@@ -93,3 +93,10 @@ smfcore.instruction=Instruction manual
smfcore.about=About
smfcore.tacticsOuput=Strategies Retrival
smfcore.labelOuput=Material grouping
smfcode.order.out.executing=Work orders are being executed
smfcode.order.out.notFound=Work order not found
smfcode.order.out.maxOrder=The maximum number of executable work orders has been reached
smfcode.order.out.noTask=Work order No executable tasks
smfcode.cannotUpdateOrderNum=The work order has been issued and the quantity cannot be modified
smfcode.order.close.success=Work order closed successfully
smfcode.order.close.taskNotEnd=Work orders with outstanding tasks
\ No newline at end of file
......@@ -93,3 +93,10 @@ smfcore.instruction=\u53D6\u6271\u8AAC\u660E\u66F8
smfcore.about=\u306B\u3064\u3044\u3066
smfcore.tacticsOuput=\u30B9\u30C8\u30E9\u30C6\u30B8\u30FC\u306F\u5728\u5EAB\u5207\u308C\u3067\u3059
smfcore.labelOuput=\u6750\u6599\u306E\u30B0\u30EB\u30FC\u30D7\u5316
smfcode.order.out.executing=\u4F5C\u696D\u6307\u793A\u304C\u5B9F\u884C\u3055\u308C\u3066\u3044\u308B
smfcode.order.out.notFound=\u4F5C\u696D\u6307\u793A\u66F8\u304C\u898B\u3064\u304B\u3089\u306A\u3044
smfcode.order.out.maxOrder=\u5B9F\u884C\u53EF\u80FD\u306A\u30EF\u30FC\u30AF\u30AA\u30FC\u30C0\u30FC\u306E\u6700\u5927\u6570\u306B\u9054\u3057\u3066\u3044\u308B
smfcode.order.out.noTask=\u4F5C\u696D\u6307\u793A\u304C\u5B9F\u884C\u3067\u304D\u306A\u3044\u30BF\u30B9\u30AF
smfcode.cannotUpdateOrderNum=\u30EF\u30FC\u30AF\u30AA\u30FC\u30C0\u30FC\u304C\u5728\u5EAB\u5207\u308C\u3067\u6570\u91CF\u304C\u5909\u66F4\u3067\u304D\u306A\u3044
smfcode.order.close.success=\u30EF\u30FC\u30AF\u30AA\u30FC\u30C0\u30FC\u304C\u6B63\u5E38\u306B\u7D42\u4E86\u3057\u307E\u3057\u305F\u3002
smfcode.order.close.taskNotEnd=\u672A\u51E6\u7406\u306E\u30BF\u30B9\u30AF\u304C\u3042\u308B\u30EF\u30FC\u30AF\u30AA\u30FC\u30C0\u30FC
\ No newline at end of file
......@@ -93,3 +93,10 @@ smfcore.instruction=\u8BF4\u660E\u4E66
smfcore.about=\u5173\u4E8E
smfcore.tacticsOuput=\u7B56\u7565\u51FA\u5E93
smfcore.labelOuput=\u7269\u6599\u5206\u7EC4
smfcode.order.out.executing=\u5DE5\u5355\u6B63\u5728\u6267\u884C
smfcode.order.out.notFound=\u5DE5\u5355\u672A\u627E\u5230
smfcode.order.out.maxOrder=\u5DF2\u8FBE\u6700\u5927\u53EF\u6267\u884C\u5DE5\u5355\u6570
smfcode.order.out.noTask=\u5DE5\u5355\u65E0\u53EF\u6267\u884C\u7684\u4EFB\u52A1
smfcode.cannotUpdateOrderNum=\u5DE5\u5355\u5DF2\u51FA\u5E93\uFF0C\u4E0D\u80FD\u4FEE\u6539\u6570\u91CF
smfcode.order.close.success=\u5DE5\u5355\u5173\u95ED\u6210\u529F
smfcode.order.close.taskNotEnd=\u5DE5\u5355\u8FD8\u6709\u672A\u5B8C\u6210\u7684\u4EFB\u52A1
\ No newline at end of file
......@@ -93,3 +93,10 @@ smfcore.instruction=\u8AAA\u660E\u66F8
smfcore.about=\u95DC\u65BC
smfcore.tacticsOuput=\u7B56\u7565\u51FA\u5EAB
smfcore.labelOuput=\u7269\u6599\u5206\u7D44
smfcode.order.out.executing=\u5DE5\u55AE\u6B63\u5728\u57F7\u884C
smfcode.order.out.notFound=\u5DE5\u55AE\u672A\u627E\u5230
smfcode.order.out.maxOrder=\u5DF2\u9054\u5230\u6700\u5927\u53EF\u57F7\u884C\u5DE5\u55AE\u6578
smfcode.order.out.noTask=\u5DE5\u55AE\u7121\u53EF\u57F7\u884C\u7684\u4EFB\u52D9
smfcode.cannotUpdateOrderNum=\u5DE5\u55AE\u5DF2\u51FA\u5EAB\uFF0C\u4E0D\u80FD\u4FEE\u6539\u6578\u91CF
smfcode.order.close.success=\u5DE5\u55AE\u95DC\u9589\u6210\u529F
smfcode.order.close.taskNotEnd=\u5DE5\u55AE\u9084\u6709\u672A\u5B8C\u6210\u7684\u4EFB\u52D9
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!