Merge remote-tracking branch 'remotes/origin/dev' into test

yun-zuoyi
汪云昊 5 years ago
commit 534c6b554c

@ -3,6 +3,8 @@ package cn.estsh.i3plus.core.api.iservice.base;
import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List;
/** /**
* @Description : * @Description :
* @Reference : * @Reference :
@ -20,4 +22,12 @@ public interface ISynchronizedService {
@ApiOperation(value = "根据code查询最新单号规则") @ApiOperation(value = "根据code查询最新单号规则")
SysOrderNoRule nextOrderNo(String code); SysOrderNoRule nextOrderNo(String code);
/**
*
* @param code
* @return
*/
@ApiOperation(value = "根据code查询最新单号规则")
List<SysOrderNoRule> nextOrderNo(String code, int num);
} }

@ -161,6 +161,12 @@ public interface ICoreMemTreeService {
@ApiOperation(value = "查询功能子节点",notes = "根据用户ID 查询功能树") @ApiOperation(value = "查询功能子节点",notes = "根据用户ID 查询功能树")
List<SysMenu> packTreeSysMenuByUserId(Long userId); List<SysMenu> packTreeSysMenuByUserId(Long userId);
/**
* ID ID
* @param userId
* @param parentId
* @return
*/
@ApiOperation(value = "查询功能子节点",notes = "根据用户ID 和 节点ID 查询功能树") @ApiOperation(value = "查询功能子节点",notes = "根据用户ID 和 节点ID 查询功能树")
List<SysMenu> packTreeSysMenuByUserIdAndParentId(Long userId,Long parentId); List<SysMenu> packTreeSysMenuByUserIdAndParentId(Long userId,Long parentId);

@ -46,6 +46,15 @@ public interface ISysOrderNoRuleService {
@ApiOperation(value = "根据id查询单号规则") @ApiOperation(value = "根据id查询单号规则")
SysOrderNoRule getSysOrderNoRuleById(Long id); SysOrderNoRule getSysOrderNoRuleById(Long id);
/**
* code
* @param code code
* @return
*/
@ApiOperation(value = "根据code查询单号规则")
SysOrderNoRule getSysOrderNoRuleByCode(String code);
/** /**
* *
* @param sysOrderNoRule * @param sysOrderNoRule
@ -57,11 +66,11 @@ public interface ISysOrderNoRuleService {
/** /**
* *
* @param code * @param orderNoRule
* @return * @return
*/ */
@ApiOperation(value = "根据code查询最新单号规则") @ApiOperation(value = "根据单号代码获取单号信息")
SysOrderNoRule doGetSysOrderNoRuleCode(String code); List<SysOrderNoRule> doGetSysOrderNoRuleByNum(SysOrderNoRule orderNoRule,int num);
/** /**
* id * id
@ -92,4 +101,10 @@ public interface ISysOrderNoRuleService {
*/ */
@ApiOperation(value = "批量添加编号规则") @ApiOperation(value = "批量添加编号规则")
void insertSysOrderNoRuleList(List sysOrderNoRuleList); void insertSysOrderNoRuleList(List sysOrderNoRuleList);
/**
*
* @param sysOrderNoRule
*/
void detachSysOrderNoRule(SysOrderNoRule sysOrderNoRule);
} }

@ -2,7 +2,6 @@ package cn.estsh.i3plus.core.apiservice.controller.base;
import cn.estsh.i3plus.core.api.iservice.base.ISynchronizedService; import cn.estsh.i3plus.core.api.iservice.base.ISynchronizedService;
import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService;
import cn.estsh.i3plus.core.api.iservice.busi.*; import cn.estsh.i3plus.core.api.iservice.busi.*;
import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil; import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
@ -32,12 +31,14 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.*; import org.apache.shiro.authc.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @Description : * @Description :
@ -60,9 +61,6 @@ public class WhiteController extends CoreBaseController {
private ISysLocaleResourceService sysLocaleResourceService; private ISysLocaleResourceService sysLocaleResourceService;
@Autowired @Autowired
private ISystemLoginService systemLoginService;
@Autowired
private ISysUserService userService; private ISysUserService userService;
@Autowired @Autowired
@ -92,7 +90,7 @@ public class WhiteController extends CoreBaseController {
@Autowired @Autowired
private SysUserPasswordUtil userPasswordUtil; private SysUserPasswordUtil userPasswordUtil;
@Resource(name=CommonConstWords.IMPP_REDIS_RES) @Resource(name = CommonConstWords.IMPP_REDIS_RES)
private ImppRedis redisRes; private ImppRedis redisRes;
@Autowired @Autowired
@ -101,6 +99,9 @@ public class WhiteController extends CoreBaseController {
@Resource(name= CommonConstWords.IMPP_REDIS_SESSION) @Resource(name= CommonConstWords.IMPP_REDIS_SESSION)
private ImppRedis redisSession; private ImppRedis redisSession;
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping(value = "/sys-locale-language/list") @GetMapping(value = "/sys-locale-language/list")
@ApiOperation(value = "查询可用语言",notes = "查询可用语言") @ApiOperation(value = "查询可用语言",notes = "查询可用语言")
@ -410,6 +411,29 @@ public class WhiteController extends CoreBaseController {
} }
} }
/**
*
*
* @param code
* @param num
* @return
*/
@GetMapping(value = "/sys-order-no-rule/get-order-no/{code}/{num}")
@ApiOperation(value = "根据单号规则代码,生成单号")
public ResultBean<String> getOrderNo(@PathVariable("code") String code, @PathVariable("num") Integer num) {
try {
ValidatorBean.checkNotNull(code, "code不能为空");
ValidatorBean.checkNotZero(num, "次数不能为零");
List<String> orderNoList = synchronizedService.nextOrderNo(code, num).stream().map(SysOrderNoRule::getOrderNo).collect(Collectors.toList());
return ResultBean.success("操作成功").setResultList(orderNoList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PostMapping(value = "/sys-find-user/list") @PostMapping(value = "/sys-find-user/list")
@ApiOperation(value = "查询用户列表信息",notes = "查询用户列表信息") @ApiOperation(value = "查询用户列表信息",notes = "查询用户列表信息")
public ResultBean findSysUserInfoList(UserDetailModel model){ public ResultBean findSysUserInfoList(UserDetailModel model){
@ -435,6 +459,7 @@ public class WhiteController extends CoreBaseController {
/** /**
* *
*
* @return * @return
*/ */
private CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform(){ private CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform(){
@ -514,6 +539,7 @@ public class WhiteController extends CoreBaseController {
/** /**
* *
*
* @param model * @param model
* @return * @return
*/ */
@ -554,6 +580,7 @@ public class WhiteController extends CoreBaseController {
/** /**
* *
*
* @return * @return
*/ */
@AnnoIgnoreLog @AnnoIgnoreLog
@ -605,4 +632,9 @@ public class WhiteController extends CoreBaseController {
} }
} }
@GetMapping(value = "/send-test-mq")
@ApiOperation(value = "测试发送mq", notes = "测试发送mq")
public void sendTestMq(String paramStr) {
rabbitTemplate.convertAndSend(PlatformConstWords.QUEUE_IMPP_DEMO, paramStr);
}
} }

@ -12,6 +12,7 @@ import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.tool.ZipTool; import cn.estsh.i3plus.platform.common.tool.ZipTool;
import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.ImppFile;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -22,7 +23,6 @@ import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.fileservice.ImppFileService; import cn.estsh.impp.framework.boot.fileservice.ImppFileService;
import cn.estsh.i3plus.pojo.base.bean.ImppFile;
import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean; import cn.estsh.impp.framework.boot.util.ValidatorBean;
@ -38,6 +38,7 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* @Description : * @Description :
@ -413,10 +414,7 @@ public class SysOrderNoRuleController extends CoreBaseController {
ValidatorBean.checkNotNull(code, "code不能为空"); ValidatorBean.checkNotNull(code, "code不能为空");
ValidatorBean.checkNotZero(num,"次数不能为零"); ValidatorBean.checkNotZero(num,"次数不能为零");
List<String> orderNoList = new ArrayList<>(); List<String> orderNoList = synchronizedService.nextOrderNo(code,num).stream().map(SysOrderNoRule::getOrderNo).collect(Collectors.toList());
for (int i = 0; i < num; i++) {
orderNoList.add(synchronizedService.nextOrderNo(code).getOrderNo());
}
return ResultBean.success("操作成功").setResultList(orderNoList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("操作成功").setResultList(orderNoList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) { } catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep); return ResultBean.fail(busExcep);

@ -1,7 +1,7 @@
package cn.estsh.i3plus.core.apiservice.controller.busi; package cn.estsh.i3plus.core.apiservice.controller.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysToolTypeService; import cn.estsh.i3plus.core.api.iservice.busi.ISysToolTypeService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
@ -14,7 +14,6 @@ import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean; import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -55,8 +54,6 @@ public class SysToolTypeController extends CoreBaseController{
ValidatorBean.beginValid(toolType).notNull("name",toolType.getName()); ValidatorBean.beginValid(toolType).notNull("name",toolType.getName());
toolType.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); toolType.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
// 添加初始化
ConvertBean.modelInitialize(toolType, AuthUtil.getSessionUser());
toolTypeService.insertSysToolType(toolType); toolTypeService.insertSysToolType(toolType);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
@ -82,9 +79,6 @@ public class SysToolTypeController extends CoreBaseController{
// 条件校验 // 条件校验
ValidatorBean.beginValid(toolType).notNull("name",toolType.getName()); ValidatorBean.beginValid(toolType).notNull("name",toolType.getName());
// 添加初始化
ConvertBean.modelUpdate(toolType,user);
toolTypeService.updateSysToolType(toolType); toolTypeService.updateSysToolType(toolType);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){ }catch(ImppBusiException busExcep){

@ -84,7 +84,7 @@ public class ScheduleQueueReceiver {
imppLog.insertSysLogTaskTime(logTaskTime); imppLog.insertSysLogTaskTime(logTaskTime);
// 定时任务失败通知 // 定时任务失败通知
if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == logTaskTime.getTaskStatus() if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == logTaskTime.getTaskStatusVal()
&& CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == taskPlan.getIsNotice()) { && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == taskPlan.getIsNotice()) {
// 设置通知邮件内容 // 设置通知邮件内容
SysMessage sysMessage = new SysMessage(); SysMessage sysMessage = new SysMessage();

@ -2,10 +2,22 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.base;
import cn.estsh.i3plus.core.api.iservice.base.ISynchronizedService; import cn.estsh.i3plus.core.api.iservice.base.ISynchronizedService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysOrderNoRuleService; import cn.estsh.i3plus.core.api.iservice.busi.ISysOrderNoRuleService;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import static cn.estsh.i3plus.platform.common.util.CommonConstWords.REDIS_PREFIX_LOCK_GET_ORDER_NO;
/** /**
* @Description : * @Description :
* @Reference : * @Reference :
@ -19,8 +31,60 @@ public class SynchronizedService implements ISynchronizedService {
@Autowired @Autowired
private ISysOrderNoRuleService sysOrderNoRuleService; private ISysOrderNoRuleService sysOrderNoRuleService;
@Resource(name = CommonConstWords.IMPP_REDIS_RES)
private ImppRedis redisRes;
@Override @Override
public synchronized SysOrderNoRule nextOrderNo(String code) { public synchronized SysOrderNoRule nextOrderNo(String code) {
return sysOrderNoRuleService.doGetSysOrderNoRuleCode(code); List<SysOrderNoRule> list = nextOrderNo(code, NumberUtils.INTEGER_ONE);
if (CollectionUtils.isEmpty(list)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("[" + code + "] 生成失败")
.setErrorSolution("请重新输入规则代码")
.build();
}
return list.stream().findFirst().get();
}
/**
*
*
* @param code
* @param num
* @return
*/
@Override
public synchronized List<SysOrderNoRule> nextOrderNo(String code, int num) {
String redisKey = REDIS_PREFIX_LOCK_GET_ORDER_NO + ":" + code;
//先拿规则
SysOrderNoRule codeRole = sysOrderNoRuleService.getSysOrderNoRuleByCode(code);
if (codeRole == null) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("[" + code + "]规则代码不存在存在")
.setErrorSolution("请重新输入规则代码")
.build();
} else if (codeRole.getOrderNoRuleStatus() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("[" + code + "]单号规则已禁用")
.setErrorSolution("请重新输入规则代码")
.build();
}
sysOrderNoRuleService.detachSysOrderNoRule(codeRole);
Long incr = codeRole.getSerialNoIncrement() * num;
//缓存增加
//先判断redis是否存在如果不存在则用默认初始值+步长*数量,如果存在,则添加步长 * 数量
codeRole.setSerialNo(redisRes.putObjAdditational(redisKey, codeRole.getSerialNo(), incr)-incr);
// 生成单号更缓存
return sysOrderNoRuleService.doGetSysOrderNoRuleByNum(codeRole, num);
} }
} }

@ -6,6 +6,8 @@ import cn.estsh.i3plus.pojo.base.enumutil.ModelEnumUtil;
import cn.estsh.i3plus.pojo.model.platform.CommonTreeModel; import cn.estsh.i3plus.pojo.model.platform.CommonTreeModel;
import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.i3plus.pojo.platform.bean.*;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -24,6 +26,8 @@ import java.util.stream.Collectors;
@Service @Service
public class CoreMemTreeService implements ICoreMemTreeService { public class CoreMemTreeService implements ICoreMemTreeService {
public static final Logger LOGGER = LoggerFactory.getLogger(CoreMemTreeService.class);
@Autowired @Autowired
private IPersonnelService personnelService; private IPersonnelService personnelService;
@ -623,16 +627,31 @@ public class CoreMemTreeService implements ICoreMemTreeService {
return packTreeSysMenuByUserIdAndParentId(userId, CommonEnumUtil.PARENT.DEFAULT.getValue()); return packTreeSysMenuByUserIdAndParentId(userId, CommonEnumUtil.PARENT.DEFAULT.getValue());
} }
/**
* ID ID
* @param userId
* @param parentId
* @return
*/
@Override @Override
public List<SysMenu> packTreeSysMenuByUserIdAndParentId(Long userId, Long parentId) { public List<SysMenu> packTreeSysMenuByUserIdAndParentId(Long userId, Long parentId) {
// 查询用户关联角色
long startTime = System.currentTimeMillis();
List<SysRefUserRole> roleList = personnelService.findSysRefUserRole(userId); List<SysRefUserRole> roleList = personnelService.findSysRefUserRole(userId);
long roleTime = System.currentTimeMillis();
LOGGER.info("查询用户所关联的角色信息耗时:{}",roleTime - startTime);
if (roleList != null && roleList.size() > 0) { if (roleList != null && roleList.size() > 0) {
// 查询角色关联菜单
List<SysRefRoleMenu> refRoleMenuList = personnelService.findSysRefRoleMenuByRefUserRole(roleList); List<SysRefRoleMenu> refRoleMenuList = personnelService.findSysRefRoleMenuByRefUserRole(roleList);
long refRoleMenuTime = System.currentTimeMillis();
LOGGER.info("查询角色关联菜单:{}",refRoleMenuTime - roleTime);
if (refRoleMenuList != null && refRoleMenuList.size() > 0) { if (refRoleMenuList != null && refRoleMenuList.size() > 0) {
List<SysMenu> menuList = menuService.findAll(); List<SysMenu> menuList = menuService.findAll();
// 构建菜单树
List<SysMenu> menuRootTree = packTreeSysMenu(menuList, parentId); List<SysMenu> menuRootTree = packTreeSysMenu(menuList, parentId);
//
return packTreeSysMenuBySysRefRoleMenu(menuRootTree, refRoleMenuList); return packTreeSysMenuBySysRefRoleMenu(menuRootTree, refRoleMenuList);
} }
} }

@ -1,7 +1,9 @@
package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; package cn.estsh.i3plus.core.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysOrderNoRuleService; import cn.estsh.i3plus.core.api.iservice.busi.ISysOrderNoRuleService;
import cn.estsh.i3plus.core.apiservice.util.CloneTool;
import cn.estsh.i3plus.core.apiservice.util.OrderNoMakeUtil; import cn.estsh.i3plus.core.apiservice.util.OrderNoMakeUtil;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
@ -13,13 +15,12 @@ import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule;
import cn.estsh.i3plus.pojo.platform.repository.SysOrderNoRuleRepository; import cn.estsh.i3plus.pojo.platform.repository.SysOrderNoRuleRepository;
import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -76,6 +77,17 @@ public class SysOrderNoRuleService implements ISysOrderNoRuleService {
return sysOrderNoRuleRDao.getById(id); return sysOrderNoRuleRDao.getById(id);
} }
/**
* code
*
* @param code code
* @return
*/
@Override
public SysOrderNoRule getSysOrderNoRuleByCode(String code) {
return sysOrderNoRuleRDao.getByProperty("orderNoRuleCode",code);
}
@Override @Override
public ListPager querySysOrderNoRuleByPager(SysOrderNoRule sysOrderNoRule, Pager pager) { public ListPager querySysOrderNoRuleByPager(SysOrderNoRule sysOrderNoRule, Pager pager) {
if (sysOrderNoRule == null) { if (sysOrderNoRule == null) {
@ -88,30 +100,32 @@ public class SysOrderNoRuleService implements ISysOrderNoRuleService {
} }
} }
/**
*
*
* @param sysOrderNoRule
* @param num
* @return
*/
@Override @Override
@ApiOperation(value = "根据code查询最新单号规则") public synchronized List<SysOrderNoRule> doGetSysOrderNoRuleByNum(SysOrderNoRule sysOrderNoRule, int num) {
public synchronized SysOrderNoRule doGetSysOrderNoRuleCode(String code) { List<SysOrderNoRule> resultList = new ArrayList<>();
SysOrderNoRule sysOrderNoRule = sysOrderNoRuleRDao.getByProperty("orderNoRuleCode", code); try {
for (int i = 0; i < num; i++) {
if (sysOrderNoRule == null) { sysOrderNoRule = OrderNoMakeUtil.next(CloneTool.clone(sysOrderNoRule));
throw ImppExceptionBuilder.newInstance() resultList.add(sysOrderNoRule);
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) }
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) }catch (Exception e){
.setErrorDetail("[" + code + "]规则代码不存在存在") LOGGER.error("单号生成异常:",e);
.setErrorSolution("请重新输入规则代码")
.build();
} else if (sysOrderNoRule.getOrderNoRuleStatus() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) {
throw ImppExceptionBuilder.newInstance() throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode())
.setErrorDetail("[" + code + "]单号规则已禁用") .setErrorDetail("单号生成异常 %s",e.getMessage())
.setErrorSolution("请重新输入规则代码")
.build(); .build();
} else {
sysOrderNoRule = OrderNoMakeUtil.next(sysOrderNoRule);
sysOrderNoRuleRDao.update(sysOrderNoRule);
return sysOrderNoRule;
} }
sysOrderNoRuleRDao.update(sysOrderNoRule);
return resultList;
} }
@Override @Override
@ -136,5 +150,13 @@ public class SysOrderNoRuleService implements ISysOrderNoRuleService {
sysOrderNoRuleRDao.saveAll(sysOrderNoRuleList); sysOrderNoRuleRDao.saveAll(sysOrderNoRuleList);
} }
/**
* @param sysOrderNoRule
*/
@Override
public void detachSysOrderNoRule(SysOrderNoRule sysOrderNoRule) {
sysOrderNoRuleRDao.detachObject(sysOrderNoRule);
}
} }

@ -167,7 +167,6 @@ public class TestTransService implements ITestTransService {
@Override @Override
public void insertRedis() { public void insertRedis() {
sysDepartmentRDao.insert(new SysDepartment());
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
imppRedis.putObject(i + "", i); imppRedis.putObject(i + "", i);
} }

@ -1,9 +1,12 @@
package cn.estsh.i3plus.core.apiservice.util; package cn.estsh.i3plus.core.apiservice.util;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysBarcodeRule; import cn.estsh.i3plus.pojo.platform.bean.SysBarcodeRule;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -17,7 +20,24 @@ import java.util.Map;
**/ **/
public final class BarcodeParseUtil { public final class BarcodeParseUtil {
private BarcodeParseUtil(){} private BarcodeParseUtil() {
}
private static ImppRedis redisRes;
/**
*
*
* @param barcodeRuleCode
* @param barcode
* @return
*/
public static Map<String, String> parse(String barcodeRuleCode, String barcode) {
if (redisRes == null) {
redisRes = SpringContextsUtil.getRedisRes();
}
return parse((SysBarcodeRule) redisRes.getObject(barcodeRuleCode), barcode);
}
/** /**
* *
@ -38,26 +58,92 @@ public final class BarcodeParseUtil {
.build(); .build();
} }
Long start=System.currentTimeMillis();
//特殊分隔符处理 //特殊分隔符处理
barcodeRule.setBarcodeSeparator(barcodeRule.getBarcodeSeparator().replaceAll("\\\\", "\\\\\\\\")); barcodeRule.setBarcodeSeparator(barcodeRule.getBarcodeSeparator().replaceAll("\\\\", "\\\\\\\\"));
barcodeRule.setBarcodeSeparator(barcodeRule.getBarcodeSeparator().replaceAll("\\|", "\\\\|")); barcodeRule.setBarcodeSeparator(barcodeRule.getBarcodeSeparator().replaceAll("\\|", "\\\\|"));
barcodeRule.setBarcodeSeparator(barcodeRule.getBarcodeSeparator().replaceAll("\\.", "\\\\.")); barcodeRule.setBarcodeSeparator(barcodeRule.getBarcodeSeparator().replaceAll("\\.", "\\\\."));
Long tsfgf=System.currentTimeMillis();
System.out.println("特殊分隔符处理" + (tsfgf - start));
// 分隔条码信息 // 分隔条码信息
String[] barcodeKey = barcodeRule.getBarcodeRule().split(barcodeRule.getBarcodeSeparator()); String[] barcodeKey = barcodeRule.getBarcodeRule().split(barcodeRule.getBarcodeSeparator());
String[] barcodeValue = barcode.split(barcodeRule.getBarcodeSeparator()); String[] barcodeValue = barcode.split(barcodeRule.getBarcodeSeparator());
Long fgtm =System.currentTimeMillis();
System.out.println("分隔条码信息" + (fgtm - tsfgf));
// 避免出现长度不相等 // 校验
int size = barcodeKey.length; verifyBarcode(barcodeRule,barcodeKey,barcodeValue,barcode);
if (barcodeKey.length != barcodeValue.length) { Long jy =System.currentTimeMillis();
size = Math.min(barcodeKey.length,barcodeValue.length); System.out.println("校验" + (jy - fgtm));
}
// 匹配条码数据 // 匹配条码数据
HashMap<String, String> barcodeMap = new HashMap<>(); HashMap<String, String> barcodeMap = new HashMap<>();
for (int i = 0; i < size; i++) { for (int i = 0; i < barcodeKey.length; i++) {
barcodeMap.put(barcodeKey[i], barcodeValue[i]); barcodeMap.put(barcodeKey[i], barcodeValue.length > i ? barcodeValue[i] : null);
} }
Long pp =System.currentTimeMillis();
System.out.println("匹配条码数据" + (pp - jy));
return barcodeMap; return barcodeMap;
} }
/**
*
*
* @param barcodeRule
* @param barcodeKey key
* @param barcodeValue
*/
private static void verifyBarcode(SysBarcodeRule barcodeRule, String[] barcodeKey, String[] barcodeValue, String barcode) {
boolean verifyFail = false;
if (barcodeRule.getCheckModeVal() == CommonEnumUtil.BARCODE_CHECK_MODE.SEPARATOR_NUM.getValue()) {
// 校验分隔符的数量
int barcodeSeparatorNum = barcode.length() - barcode.replaceAll(barcodeRule.getBarcodeSeparator(), "").length() + 1;
int ruleSeparatorNum =barcodeRule.getBarcodeRule().length()
- barcodeRule.getBarcodeRule().replaceAll(barcodeRule.getBarcodeSeparator(), "").length() + 1;
verifyFail = ruleSeparatorNum != barcodeSeparatorNum;
} else if (barcodeRule.getCheckModeVal() == CommonEnumUtil.BARCODE_CHECK_MODE.ANALYTIC_NUM.getValue()) {
// 校验解析后的数量是否相等
verifyFail = barcodeKey.length != barcodeValue.length;
}
if (verifyFail) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("条码与规则不匹配!")
.build();
}
}
public static void main(String[] args) {
String str = "{\n" +
"\t\t\"id\": \"1202112194247430144\",\n" +
"\t\t\"organizeCode\": \"\",\n" +
"\t\t\"isValid\": 1,\n" +
"\t\t\"isDeleted\": 2,\n" +
"\t\t\"createUser\": \"qianhuasheng\",\n" +
"\t\t\"createDatetime\": \"2019-12-04 14:27:35\",\n" +
"\t\t\"modifyUser\": \"qianhuasheng\",\n" +
"\t\t\"modifyDatetime\": \"2019-12-04 14:27:35\",\n" +
"\t\t\"createDateTimeStart\": null,\n" +
"\t\t\"createDateTimeEnd\": null,\n" +
"\t\t\"modifyDateTimeStart\": null,\n" +
"\t\t\"modifyDateTimeEnd\": null,\n" +
"\t\t\"orderByParam\": \"\",\n" +
"\t\t\"ascOrDesc\": 1,\n" +
"\t\t\"sortParamMap\": null,\n" +
"\t\t\"name\": \"VDA生产标签打印解析二维码\",\n" +
"\t\t\"barcodeRuleCode\": \"VDA_REPORT_SN_2D\",\n" +
"\t\t\"barcodeRule\": \"partNo|express\",\n" +
"\t\t\"barcodeSeparator\": \"|\",\n" +
"\t\t\"barcodeRuleDescription\": \"VDA生产标签打印解析二维码\",\n" +
"\t\t\"isValidVal\": 1,\n" +
"\t\t\"checkMode\": 10,\n" +
"\t\t\"isDeletedVal\": 2\n" +
"\t}";
System.out.println(parse(JsonUtilTool.decode(str,SysBarcodeRule.class),"YFRHU|"));
}
} }

@ -0,0 +1,231 @@
package cn.estsh.i3plus.core.apiservice.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
/**
* @Description :
* @Reference :
* @Author : yunhao
* @CreateDate : 2020-08-12 13:44
* @Modify:
**/
public class CloneTool {
public static final Logger LOGGER = LoggerFactory.getLogger(CloneTool.class);
/**
*
*/
static Class[] needlessCloneClasses = new Class[]{String.class,Boolean.class,Character.class,Byte.class,Short.class,
Integer.class,Long.class,Float.class,Double.class,Void.class,Object.class,Class.class
};
/**
*
* @param c
* @return
*/
private static boolean isNeedlessClone(Class c){
if(c.isPrimitive()){//基本类型
return true;
}
for(Class tmp:needlessCloneClasses){//是否在无需复制类型数组里
if(c.equals(tmp)){
return true;
}
}
return false;
}
/**
*
* @param value
* @return
* @throws IllegalAccessException
*/
private static Object createObject(Object value) throws IllegalAccessException{
try {
return value.getClass().newInstance();
} catch (InstantiationException e) {
return null;
} catch (IllegalAccessException e) {
throw e;
}
}
/**
*
* @param value
* @param level 0Object
* 00
* @return
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static Object clone(Object value,int level) throws IllegalAccessException, InstantiationException {
if(value==null){
return null;
}
if(level==0){
return value;
}
Class c = value.getClass();
if(isNeedlessClone(c)){
return value;
}
level--;
if(value instanceof Collection){//复制新的集合
Collection tmp = (Collection)c.newInstance();
for(Object v:(Collection)value){
tmp.add(clone(v,level));//深度复制
}
value = tmp;
}
else if(c.isArray()){//复制新的Array
//首先判断是否为基本数据类型
if(c.equals(int[].class)){
int[] old = (int[])value;
value = (int[]) Arrays.copyOf(old, old.length);
}
else if(c.equals(short[].class)){
short[] old = (short[])value;
value = (short[])Arrays.copyOf(old, old.length);
}
else if(c.equals(char[].class)){
char[] old = (char[])value;
value = (char[])Arrays.copyOf(old, old.length);
}
else if(c.equals(float[].class)){
float[] old = (float[])value;
value = (float[])Arrays.copyOf(old, old.length);
}
else if(c.equals(double[].class)){
double[] old = (double[])value;
value = (double[])Arrays.copyOf(old, old.length);
}
else if(c.equals(long[].class)){
long[] old = (long[])value;
value = (long[])Arrays.copyOf(old, old.length);
}
else if(c.equals(boolean[].class)){
boolean[] old = (boolean[])value;
value = (boolean[])Arrays.copyOf(old, old.length);
}
else if(c.equals(byte[].class)){
byte[] old = (byte[])value;
value = (byte[])Arrays.copyOf(old, old.length);
}
else {
Object[] old = (Object[])value;
Object[] tmp = (Object[])Arrays.copyOf(old, old.length, old.getClass());
for(int i = 0;i<old.length;i++){
tmp[i] = clone(old[i],level);
}
value = tmp;
}
}
else if(value instanceof Map){//复制新的MAP
Map tmp = (Map)c.newInstance();
Map org = (Map)value;
for(Object key:org.keySet()){
tmp.put(key, clone(org.get(key),level));//深度复制
}
value = tmp;
}
else {
Object tmp = createObject(value);
if(tmp==null){//无法创建新实例则返回对象本身,没有克隆
return value;
}
Set<Field> fields = new HashSet<Field>();
while(c!=null&&!c.equals(Object.class)){
fields.addAll(Arrays.asList(c.getDeclaredFields()));
c = c.getSuperclass();
}
for(Field field:fields){
if(!Modifier.isFinal(field.getModifiers())){//仅复制非final字段
field.setAccessible(true);
field.set(tmp, clone(field.get(value),level));//深度复制
}
}
value = tmp;
}
return value;
}
/**
*
* @param value
* @return
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static <T> T clone(T value) throws IllegalAccessException, InstantiationException {
return (T) clone(value,1);
}
/**
*
* @param value
* @return
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static <T> T deepClone(T value) throws IllegalAccessException, InstantiationException {
return (T) clone(value,-1);
}
//数据100 深度10 测试
//======普通赋值======
//数据100 深度10
//普通赋值耗时:4~8
//======克隆工具1======
//数据100 深度10
//克隆工具1耗时:1272~1987
//======克隆工具2-1======
//数据100 深度10
//克隆工具2-1耗时:5~7
//======克隆工具2-2======
//数据100 深度10
//克隆工具2-2耗时:15~19
//
//数据100 深度20 测试
//======普通赋值======
//数据100 深度20
//普通赋值耗时:6
//======克隆工具1======
//数据100 深度20
//克隆工具1耗时:1772
//======克隆工具2-1======
//数据100 深度20
//克隆工具2-1耗时:71
//======克隆工具2-2======
//数据100 深度20
//克隆工具2-2耗时:216
// 性能低
// public static <T> T clone(Object cloneObj) {
// ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
// ObjectOutputStream out;
// try {
// out = new ObjectOutputStream(byteOut);
// out.writeObject(cloneObj);
//
// ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
//
// ObjectInputStream in = new ObjectInputStream(byteIn);
//
// T retObj = (T) in.readObject();
//
// return retObj;
// } catch (IOException | ClassNotFoundException e) {
// LOGGER.error("对象" + cloneObj.getClass().getName() + "克隆异常:", e);
// }
// return null;
// }
}

@ -103,6 +103,7 @@ public class NoSqlPack {
result.andStringEquals("remoteIp",bean.getRemoteIp()); result.andStringEquals("remoteIp",bean.getRemoteIp());
// result.andStringEquals("requestUrl",bean.getRequestUrl()); // result.andStringEquals("requestUrl",bean.getRequestUrl());
result.andTextLike("requestUrl",bean.getRequestUrl()); result.andTextLike("requestUrl",bean.getRequestUrl());
result.andStringLike("userLoginName",bean.getUserLoginName());
result.andStringEquals("createUser",bean.getCreateUser()); result.andStringEquals("createUser",bean.getCreateUser());
result.andStringLike("operateMessage",bean.getOperateMessage()); result.andStringLike("operateMessage",bean.getOperateMessage());
result.andStringDateTimeBetween("createDatetime",bean.getCreateDateTimeStart(),bean.getCreateDateTimeEnd()); result.andStringDateTimeBetween("createDatetime",bean.getCreateDateTimeStart(),bean.getCreateDateTimeEnd());

@ -1,16 +1,14 @@
package cn.estsh.i3plus.core.apiservice.util; package cn.estsh.i3plus.core.apiservice.util;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
/** /**
* @Description : * @Description :
@ -59,7 +57,7 @@ public class OrderNoMakeUtil {
orderNoRule.setSerialNo(orderNoRule.getSerialNo() + orderNoRule.getSerialNoIncrement()); orderNoRule.setSerialNo(orderNoRule.getSerialNo() + orderNoRule.getSerialNoIncrement());
} }
} else { } else {
orderNoRule.setSerialNo(orderNoRule.getSerialNoSeed()); orderNoRule.setSerialNo(orderNoRule.getSerialNoSeed() * orderNoRule.getSerialNoIncrement());
} }
replace(orderNo, PlatformConstWords.SERIAL_NO, String.format(serialNoFormatStr, orderNoRule.getSerialNo())); replace(orderNo, PlatformConstWords.SERIAL_NO, String.format(serialNoFormatStr, orderNoRule.getSerialNo()));

Loading…
Cancel
Save