@@ -45,7 +45,9 @@ task commCore(type:Jar){ | |||
archiveVersion='1.0.0-SNAPSHOT' | |||
archiveExtension='jar' | |||
from("build/classes/java/main/cn/com/taiji/core"){ | |||
include "**/dto/**" | |||
include "**/manager/comm/**" | |||
include "**/manager/cache/**" | |||
include "**/manager/tools/**" | |||
include "**/model/comm/*" | |||
include "**/model/comm/protocol/*" |
@@ -1,4 +1,4 @@ | |||
package cn.com.taiji.iaw.dto; | |||
package cn.com.taiji.core.dto; | |||
import cn.com.taiji.common.model.finals.SysFinals; | |||
import lombok.Getter; |
@@ -1,45 +1,26 @@ | |||
package cn.com.taiji.userw.dto; | |||
import javax.validation.constraints.NotBlank; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import org.springframework.validation.annotation.Validated; | |||
package cn.com.taiji.core.dto; | |||
import cn.com.taiji.common.valid.BaseValidDTO; | |||
import cn.com.taiji.common.valid.ViolationValidator; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.FixedLength; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import org.springframework.validation.annotation.Validated; | |||
import javax.validation.constraints.NotBlank; | |||
@Setter | |||
@Getter | |||
@Accessors(chain = true) | |||
@Validated | |||
public abstract class AbstractBizRequestDTO extends BaseValidDTO { | |||
// 前端公参 | |||
@NotBlank(message = "openId不能为空") | |||
private String openId; | |||
@NotBlank(message = "accessToken不能为空") | |||
private String accessToken; | |||
@NotBlank(message = "loginSource不能为空") | |||
private String loginSource; | |||
@NotBlank(message = "agentId不能为空") | |||
@FixedLength(length = 11) | |||
private String agentId; | |||
@NotBlank(message = "channelId不能为空") | |||
private String channelId; | |||
@IntegerConstant(values = "1,2", message = "网点类型错误!线下网点填写2") | |||
private Integer channelType; | |||
@NotBlank | |||
private String staffId; | |||
private String terminalId; | |||
private String orgCode; | |||
public SourceType getOrderSource() { | |||
return SourceType.findByCode(loginSource); | |||
} | |||
@Override | |||
protected void validate(ViolationValidator validator) { |
@@ -1,4 +1,4 @@ | |||
package cn.com.taiji.managew.dto; | |||
package cn.com.taiji.core.dto; | |||
import cn.com.taiji.common.model.finals.SysFinals; | |||
import lombok.Getter; | |||
@@ -6,7 +6,7 @@ import lombok.Setter; | |||
@Getter | |||
@Setter | |||
public abstract class AbstractBizPageRequestDTO extends AbstractBizRequestDTO { | |||
public abstract class AbstractStaffBizPageRequestDTO extends AbstractStaffBizRequestDTO { | |||
private Integer pageNo = SysFinals.DEFAULT_PAGE_NUM; | |||
@@ -0,0 +1,30 @@ | |||
package cn.com.taiji.core.dto; | |||
import cn.com.taiji.common.valid.BaseValidDTO; | |||
import cn.com.taiji.common.valid.ViolationValidator; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import org.springframework.validation.annotation.Validated; | |||
import javax.validation.constraints.NotBlank; | |||
@Setter | |||
@Getter | |||
@Accessors(chain = true) | |||
@Validated | |||
public abstract class AbstractStaffBizRequestDTO extends BaseValidDTO { | |||
@NotBlank(message = "accessToken不能为空") | |||
private String accessToken; | |||
@NotBlank(message = "loginSource不能为空") | |||
private String loginSource; | |||
@NotBlank(message = "staffId不能为空") | |||
private String staffId; | |||
@Override | |||
protected void validate(ViolationValidator validator) { | |||
} | |||
} |
@@ -7,11 +7,12 @@ import java.time.LocalDateTime; | |||
@MappedSuperclass | |||
public abstract class AbstractInsertTimeEntity extends AbstractStringPropertyUUIDEntity { | |||
@Column(name = "insert_time", nullable = false) | |||
private LocalDateTime insertTime = LocalDateTime.now(); | |||
public AbstractInsertTimeEntity() {} | |||
@Column(name = "insert_time", nullable = false) | |||
public LocalDateTime getInsertTime() { | |||
return this.insertTime; | |||
} |
@@ -11,15 +11,15 @@ import java.time.LocalDateTime; | |||
*/ | |||
@MappedSuperclass | |||
public abstract class AbstractUpdateTimeEntity extends AbstractInsertTimeEntity { | |||
@Column( | |||
name = "update_time", | |||
nullable = false | |||
) | |||
private LocalDateTime updateTime = LocalDateTime.now(); | |||
public AbstractUpdateTimeEntity() { | |||
} | |||
@Column( | |||
name = "update_time", | |||
nullable = false | |||
) | |||
public LocalDateTime getUpdateTime() { | |||
return this.updateTime; | |||
} |
@@ -1,5 +1,6 @@ | |||
package cn.com.taiji.core.entity.basic; | |||
import cn.com.taiji.common.entity.StringPropertyUUIDEntity; | |||
import cn.com.taiji.common.entity.StringUUIDEntity; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@@ -18,7 +19,7 @@ import java.time.LocalDateTime; | |||
@Getter | |||
@Setter | |||
@Table(name = "DICT_ITEM") | |||
public class DictItem extends StringUUIDEntity { | |||
public class DictItem extends StringPropertyUUIDEntity { | |||
@Column(name = "INSERT_TIME") | |||
private LocalDateTime insertTime;//入库时间 |
@@ -1,6 +1,7 @@ | |||
package cn.com.taiji.core.entity.basic; | |||
import cn.com.taiji.common.entity.StringPropertyUUIDEntity; | |||
import cn.com.taiji.common.entity.StringUUIDEntity; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@@ -21,7 +22,7 @@ import java.time.LocalDateTime; | |||
@Getter | |||
@Setter | |||
@Table(name = "DICT_TYPE") | |||
public class DictType extends StringUUIDEntity { | |||
public class DictType extends StringPropertyUUIDEntity { | |||
@NotNull | |||
@Column(name = "INSERT_TIME") |
@@ -1,5 +1,6 @@ | |||
package cn.com.taiji.core.entity.basic; | |||
import cn.com.taiji.common.entity.StringPropertyUUIDEntity; | |||
import cn.com.taiji.common.entity.StringUUIDEntity; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@@ -21,7 +22,7 @@ import java.time.LocalDateTime; | |||
@Setter | |||
@Entity | |||
@Table(name = "QTK_AGENCY") | |||
public class QtkAgency extends StringUUIDEntity { | |||
public class QtkAgency extends StringPropertyUUIDEntity { | |||
@NotBlank | |||
@Size(max = 6) |
@@ -1,8 +1,8 @@ | |||
package cn.com.taiji.ias.model; | |||
package cn.com.taiji.core.manager.cache; | |||
import cn.com.taiji.common.model.finals.SysFinals; | |||
public class LoginFinals extends SysFinals { | |||
public class LoginCacheFinals extends SysFinals { | |||
public final static int LOGIN_TRY_COUNT = 5;// 次 | |||
public final static int LOGIN_FAILED_EXPIRE = 5;// 分钟 |
@@ -0,0 +1,91 @@ | |||
package cn.com.taiji.core.manager.cache; | |||
import cn.com.taiji.common.manager.AbstractManager; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.pub.json.JsonTools; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.entity.user.AccountInfo; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Component; | |||
import java.io.IOException; | |||
import java.util.concurrent.TimeUnit; | |||
@Component | |||
public class RedisCacheManager extends AbstractManager { | |||
@Autowired(required = false) | |||
protected RedisManager redisManager; | |||
protected void setTokenCache(AccountInfo accountInfo, String accessToken, String agencyId) { | |||
redisManager.set(RedisKeyGenerator.getLoginOpenIdKey(accessToken), accountInfo.getOpenId(), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), accountInfo.getLoginSource().name(), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), accountInfo.toJson(), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), agencyId, LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginTokenKey(accountInfo.getOpenId()), accessToken, LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
} | |||
protected void checkTokenCache(String accessToken, String openId, SourceType loginSource) throws ServiceHandleException { | |||
String openIdCache = redisManager.get(RedisKeyGenerator.getLoginOpenIdKey(accessToken)); | |||
if (!hasText(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
if (!openId.equals(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
String loginSourceStr = redisManager.get(RedisKeyGenerator.getLoginSourceTypeKey(accessToken)); | |||
if (!hasText(loginSourceStr)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
if (!loginSourceStr.equals(loginSource.name())) | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
String accountInfoStr = redisManager.get(RedisKeyGenerator.getLoginAccountInfoKey(accessToken)); | |||
if (!hasText(accountInfoStr)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
AccountInfo accountInfo = null; | |||
try { | |||
accountInfo = JsonTools.json2Object(accountInfoStr, AccountInfo.class); | |||
} catch (IOException e) { | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效,信息解析失败"); | |||
} | |||
String accessTokenCache = redisManager.get(RedisKeyGenerator.getLoginTokenKey(openId)); | |||
if (!hasText(accessTokenCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
if (!accessToken.equals(accessTokenCache)) | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
} | |||
protected void expireTokenCache(String accessToken, String openId) { | |||
redisManager.expire(RedisKeyGenerator.getLoginOpenIdKey(accessToken), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.expire(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.expire(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.expire(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.expire(RedisKeyGenerator.getLoginTokenKey(openId), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
} | |||
protected void deleteTokenCache(String accessToken, String openId) { | |||
redisManager.delete(RedisKeyGenerator.getLoginOpenIdKey(accessToken)); | |||
redisManager.delete(RedisKeyGenerator.getLoginSourceTypeKey(accessToken)); | |||
redisManager.delete(RedisKeyGenerator.getLoginAccountInfoKey(accessToken)); | |||
redisManager.delete(RedisKeyGenerator.getLoginAgencyIdKey(accessToken)); | |||
redisManager.delete(RedisKeyGenerator.getLoginTokenKey(openId)); | |||
} | |||
protected String findOpenIdByToken(String accessToken) throws ServiceHandleException { | |||
String openId = redisManager.get(RedisKeyGenerator.getLoginOpenIdKey(accessToken)); | |||
if (!hasText(openId)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
return openId; | |||
} | |||
protected String findAgencyIdByToken(String accessToken) throws ServiceHandleException { | |||
String agencyId = redisManager.get(RedisKeyGenerator.getLoginAgencyIdKey(accessToken)); | |||
if (!hasText(agencyId)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
return agencyId; | |||
} | |||
protected AccountInfo findAccountInfoyToken(String accessToken) throws ServiceHandleException { | |||
String accountInfoStr = redisManager.get(RedisKeyGenerator.getLoginAccountInfoKey(accessToken)); | |||
if (!hasText(accountInfoStr)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
try { | |||
return JsonTools.json2Object(accountInfoStr, AccountInfo.class); | |||
} catch (IOException e) { | |||
logger.error(e.getMessage()); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效,解析失败"); | |||
} | |||
} | |||
} |
@@ -1,4 +1,4 @@ | |||
package cn.com.taiji.ias.model; | |||
package cn.com.taiji.core.manager.cache; | |||
import cn.com.taiji.common.manager.AbstractManager; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; |
@@ -0,0 +1,13 @@ | |||
package cn.com.taiji.core.manager.cache; | |||
import java.util.concurrent.TimeUnit; | |||
public interface RedisManager { | |||
void set(String key, String value, long timeout, TimeUnit timeUnit); | |||
String get(String key); | |||
Boolean expire(String key, long timeout, TimeUnit timeUnit); | |||
Boolean delete(String key); | |||
} |
@@ -16,15 +16,10 @@ public class AccessTokenCheckRequest extends AbstractPortalRequest<AccessTokenCh | |||
public AccessTokenCheckRequest() { | |||
super(PortalServiceCmd.ACCESSTOKENCHECK); | |||
} | |||
@NotBlank(message = "openId不能为空") | |||
private String openId; | |||
@NotNull(message = "来源不能为空") | |||
private SourceType loginSource; | |||
@NotBlank(message = "Token不能为空") | |||
private String accessToken; | |||
// private AccessTokenType tokenType; //token类型 | |||
@Override | |||
protected void validate(ErrorMsgBuilder builder) { |
@@ -18,8 +18,6 @@ public class LogoutRequest extends AbstractPortalRequest<LogoutResponse> { | |||
super(PortalServiceCmd.LOGOUT); | |||
} | |||
@NotBlank(message = "openId不能为空") | |||
private String openId; | |||
@NotNull(message = "来源不能为空") | |||
private SourceType loginSource; | |||
@NotBlank(message = "Token不能为空") |
@@ -22,13 +22,13 @@ public interface InvwCardDetailsRepo extends AbstractJpaRepo<InvwCardDetails, St | |||
long findCountByStoreCode(String storeCode); | |||
//根据设备编号范围查询库存 | |||
@Query(value = "select count(id) from InvwCardDetails where storeCode = ?1 and status = ?2 and cardId >= ?3 and cardId <= ?4 ") | |||
@Query(value = "select count(id) from InvwCardDetails where storeCode = ?1 and status = ?2 and TO_NUMBER(cardId) >= TO_NUMBER(?3) and TO_NUMBER(cardId) <= TO_NUMBER(?4) ") | |||
long findCountByStoreCodeStatusCardId(String storeCode, InvDeviceStatus status, String cardIdStart, String cardIdEnd); | |||
//修改卡的所属仓库 | |||
@Modifying | |||
@Transactional | |||
@Query(value = "update InvwCardDetails set storeCode = ?1,agencyId=?2,channelId=?3 " + | |||
" where storeCode = ?4 and status = ?5 and cardId >= ?6 and cardId <= ?7") | |||
" where storeCode = ?4 and status = ?5 and TO_NUMBER(cardId) >= TO_NUMBER(?6) and TO_NUMBER(cardId) <= TO_NUMBER(?7) ") | |||
int updateStoreCodeByStoreCode(String storeCode, String agencyId, String channelId, String oldStoreCode, InvDeviceStatus status, String cardIdStart, String cardIdEnd); | |||
} |
@@ -21,14 +21,14 @@ public interface InvwObuDetailsRepo extends AbstractJpaRepo<InvwObuDetails, Stri | |||
long findCountByStoreCode(String storeCode); | |||
//根据仓库编号和状态查询库存 | |||
@Query(value = "select count(id) from InvwObuDetails where storeCode = ?1 and status = ?2 and obuId >= ?3 and obuId <= ?4 ") | |||
@Query(value = "select count(id) from InvwObuDetails where storeCode = ?1 and status = ?2 and TO_NUMBER(cardId) >= TO_NUMBER(?3) and TO_NUMBER(cardId) <= TO_NUMBER(?4) ") | |||
long findCountByStoreCodeStatusObuId(String storeCode, InvDeviceStatus status, String obuIdStart, String obuIdEnd); | |||
//修改卡的所属仓库 | |||
@Modifying | |||
@Transactional | |||
@Query(value = "update InvwObuDetails set storeCode = ?1,agencyId=?2,channelId=?3 " + | |||
" where storeCode = ?4 and status = ?5 and cardId >= ?6 and cardId <= ?7") | |||
" where storeCode = ?4 and status = ?5 and TO_NUMBER(cardId) >= TO_NUMBER(?6) and TO_NUMBER(cardId) <= TO_NUMBER(?7) ") | |||
int updateStoreCodeByStoreCode(String storeCode, String agencyId, String channelId, String oldStoreCode, InvDeviceStatus status, String cardIdStart, String cardIdEnd); | |||
@@ -46,4 +46,12 @@ public interface AccountUserRoleRepo extends AbstractJpaRepo<AccountUserRole, St | |||
@Query(" from AccountUserRole where roleId in ?1") | |||
List<AccountUserRole> findByRoleIdList(List<String> roleIdList); | |||
/** | |||
* 根据用户openId查找该用户的系统访问权限 | |||
* @param openId | |||
* @return | |||
*/ | |||
@Query(nativeQuery = true, value = " select b.system_type from user_account_role a, user_role b where a.role_id = b.id and b.status = 'ENABLE' and a.open_id = ?1") | |||
List<SystemType> findSystemTypeByOpenId(String openId); | |||
} |
@@ -1,50 +0,0 @@ | |||
package cn.com.taiji.iaw.dto; | |||
import cn.com.taiji.common.valid.BaseValidDTO; | |||
import cn.com.taiji.common.valid.ViolationValidator; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.FixedLength; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import org.springframework.validation.annotation.Validated; | |||
import javax.validation.constraints.NotBlank; | |||
@Setter | |||
@Getter | |||
@Accessors(chain = true) | |||
@Validated | |||
public abstract class AbstractBizRequestDTO extends BaseValidDTO { | |||
// 前端公参 | |||
@NotBlank(message = "openId不能为空") | |||
private String openId; | |||
@NotBlank(message = "loginSource不能为空") | |||
private String loginSource; | |||
@NotBlank(message = "agentId不能为空") | |||
@FixedLength(length = 11) | |||
private String agentId; | |||
@NotBlank(message = "channelId不能为空") | |||
// @FixedLength(length = 19) | |||
private String channelId; | |||
@IntegerConstant(values = "1,2", message = "网点类型错误!线下网点填写2") | |||
private Integer channelType; | |||
private String staffId; | |||
private String terminalId; | |||
private String orgCode; | |||
public SourceType getOrderSource() { | |||
return SourceType.findByCode(loginSource); | |||
} | |||
@Override | |||
protected void validate(ViolationValidator validator) { | |||
if (getOrderSource() == SourceType.SERVICE_HALL) { | |||
validator.validFieldNotBlank("staffId", staffId); | |||
} | |||
} | |||
} |
@@ -77,6 +77,12 @@ public class InvwTransferApplyController extends MyValidController { | |||
return ApiResponse.success().setMessage("校验通过"); | |||
} | |||
@ApiOperation(value = "08-号段导入") | |||
@PostMapping("/import") | |||
public ApiResponse<InvwTransferApplyImportResponseDTO> importData(@Valid @RequestBody InvwTransferApplyImportRequestDTO req) throws ManagerException { | |||
return ApiResponse.of(manager.importData(req)); | |||
} | |||
// @ApiOperation(value = "07-枚举查询") | |||
// @PostMapping("/getEnum") | |||
// public ApiResponse<Map<String,Object>> getEnum() { |
@@ -1,15 +0,0 @@ | |||
package cn.com.taiji.invw.dto; | |||
import cn.com.taiji.common.model.finals.SysFinals; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@Getter | |||
@Setter | |||
public abstract class AbstractBizPageRequestDTO extends AbstractBizRequestDTO { | |||
private Integer pageNo = SysFinals.DEFAULT_PAGE_NUM; | |||
private Integer pageSize = SysFinals.DEFAULT_PAGE_SIZE; | |||
} |
@@ -1,50 +0,0 @@ | |||
package cn.com.taiji.invw.dto; | |||
import cn.com.taiji.common.valid.BaseValidDTO; | |||
import cn.com.taiji.common.valid.ViolationValidator; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.FixedLength; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import org.springframework.validation.annotation.Validated; | |||
import javax.validation.constraints.NotBlank; | |||
@Setter | |||
@Getter | |||
@Accessors(chain = true) | |||
@Validated | |||
public abstract class AbstractBizRequestDTO extends BaseValidDTO { | |||
// 前端公参 | |||
@NotBlank(message = "openId不能为空") | |||
private String openId; | |||
@NotBlank(message = "loginSource不能为空") | |||
private String loginSource; | |||
@NotBlank(message = "agentId不能为空") | |||
@FixedLength(length = 11) | |||
private String agentId; | |||
@NotBlank(message = "channelId不能为空") | |||
// @FixedLength(length = 19) | |||
private String channelId; | |||
@IntegerConstant(values = "1,2", message = "网点类型错误!线下网点填写2") | |||
private Integer channelType; | |||
private String staffId; | |||
private String terminalId; | |||
private String orgCode; | |||
public SourceType getOrderSource() { | |||
return SourceType.findByCode(loginSource); | |||
} | |||
@Override | |||
protected void validate(ViolationValidator validator) { | |||
if (getOrderSource() == SourceType.SERVICE_HALL) { | |||
validator.validFieldNotBlank("staffId", staffId); | |||
} | |||
} | |||
} |
@@ -10,6 +10,7 @@ import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import javax.validation.Valid; | |||
import java.util.List; | |||
@ApiModel(description = "调拨申请") | |||
@Getter | |||
@@ -23,5 +24,5 @@ public class InvwTransferApplyAddRequestDTO extends AbstractBizRequestDTO { | |||
@ApiModelProperty(value = "调拨明细") | |||
@Valid | |||
private InvwTransferApplyDetailsModel[] transferDetails; | |||
private List<InvwTransferApplyDetailsModel> transferDetails; | |||
} |
@@ -0,0 +1,33 @@ | |||
package cn.com.taiji.invw.dto.transfer; | |||
import cn.com.taiji.core.entity.dict.invw.InventoryType; | |||
import cn.com.taiji.invw.dto.AbstractBizRequestDTO; | |||
import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import javax.persistence.EnumType; | |||
import javax.persistence.Enumerated; | |||
import javax.validation.constraints.NotBlank; | |||
import javax.validation.constraints.NotNull; | |||
@ApiModel(description = "调拨申请号段导入") | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
public class InvwTransferApplyImportRequestDTO extends AbstractBizRequestDTO { | |||
@ApiModelProperty(value = "发货仓库") | |||
@NotBlank(message = "发货仓库不能为空") | |||
private String sendStoreCode; | |||
@ApiModelProperty(value = "设备类型") | |||
@NotNull(message = "设备类型不能为空") | |||
@Enumerated(EnumType.STRING) | |||
private InventoryType inventoryType;//设备类型 | |||
@ApiModelProperty(value = "调拨明细文件URL") | |||
@NotBlank(message = "调拨明细文件URL不能为空") | |||
private String fileUrl; | |||
} |
@@ -0,0 +1,20 @@ | |||
package cn.com.taiji.invw.dto.transfer; | |||
import cn.com.taiji.invw.model.transfer.InvwTransferApplyDetailsModel; | |||
import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import java.util.List; | |||
@ApiModel(description = "调拨详情文件导入响应") | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
public class InvwTransferApplyImportResponseDTO { | |||
@ApiModelProperty(value = "调拨详情导入信息") | |||
private List<InvwTransferApplyDetailsModel> transferDetails; | |||
} |
@@ -9,7 +9,7 @@ import cn.com.taiji.core.repo.request.invw.InvwQryCardBatchPageRequest; | |||
import cn.com.taiji.invw.dto.card.InvwQryCardBatchPageRequestDTO; | |||
import cn.com.taiji.invw.dto.comm.CommExcelFileResponseDTO; | |||
import cn.com.taiji.invw.manager.AbstractCommManager; | |||
import cn.com.taiji.invw.model.excel.InvwQryCardBatchExcelModel; | |||
import cn.com.taiji.invw.model.card.InvwQryCardBatchExcelModel; | |||
import com.alibaba.excel.EasyExcel; | |||
import org.springframework.beans.BeanUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; |
@@ -9,7 +9,7 @@ import cn.com.taiji.core.repo.request.invw.InvwQryCardsPageRequest; | |||
import cn.com.taiji.invw.dto.card.InvwQryCardsPageRequestDTO; | |||
import cn.com.taiji.invw.dto.comm.CommExcelFileResponseDTO; | |||
import cn.com.taiji.invw.manager.AbstractCommManager; | |||
import cn.com.taiji.invw.model.excel.InvwQryCardsExcelModel; | |||
import cn.com.taiji.invw.model.card.InvwQryCardsExcelModel; | |||
import com.alibaba.excel.EasyExcel; | |||
import org.springframework.beans.BeanUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; |
@@ -9,7 +9,7 @@ import cn.com.taiji.core.repo.request.invw.InvwQryObuBatchPageRequest; | |||
import cn.com.taiji.invw.dto.comm.CommExcelFileResponseDTO; | |||
import cn.com.taiji.invw.dto.obu.InvwQryObuBatchPageRequestDTO; | |||
import cn.com.taiji.invw.manager.AbstractCommManager; | |||
import cn.com.taiji.invw.model.excel.InvwQryObuBatchExcelModel; | |||
import cn.com.taiji.invw.model.obu.InvwQryObuBatchExcelModel; | |||
import com.alibaba.excel.EasyExcel; | |||
import org.springframework.beans.BeanUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; |
@@ -9,7 +9,7 @@ import cn.com.taiji.core.repo.request.invw.InvwQryObusPageRequest; | |||
import cn.com.taiji.invw.dto.comm.CommExcelFileResponseDTO; | |||
import cn.com.taiji.invw.dto.obu.InvwQryObusPageRequestDTO; | |||
import cn.com.taiji.invw.manager.AbstractCommManager; | |||
import cn.com.taiji.invw.model.excel.InvwQryObusExcelModel; | |||
import cn.com.taiji.invw.model.obu.InvwQryObusExcelModel; | |||
import com.alibaba.excel.EasyExcel; | |||
import org.springframework.beans.BeanUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; |
@@ -18,4 +18,6 @@ public interface InvwTransferApplyManager { | |||
void confirmIn(InvwTransferApplyConfirmInRequestDTO req) throws ManagerException; | |||
void check(InvwTransferApplyCheckRequestDTO req) throws ManagerException; | |||
InvwTransferApplyImportResponseDTO importData(InvwTransferApplyImportRequestDTO req) throws ManagerException; | |||
} |
@@ -3,28 +3,27 @@ package cn.com.taiji.invw.manager.transfer; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.model.dao.Pagination; | |||
import cn.com.taiji.common.pub.StringTools; | |||
import cn.com.taiji.core.entity.dict.basic.CardType; | |||
import cn.com.taiji.core.entity.dict.basic.DeviceVersion; | |||
import cn.com.taiji.core.entity.dict.basic.ObuType; | |||
import cn.com.taiji.core.entity.dict.invw.InvApplyStatus; | |||
import cn.com.taiji.core.entity.dict.invw.InvDeviceStatus; | |||
import cn.com.taiji.core.entity.dict.invw.InventoryType; | |||
import cn.com.taiji.core.entity.dict.invw.OwnType; | |||
import cn.com.taiji.core.entity.invw.InvwTransferApply; | |||
import cn.com.taiji.core.entity.invw.InvwTransferApplyDetails; | |||
import cn.com.taiji.core.entity.invw.InvwWarehouse; | |||
import cn.com.taiji.core.manager.tools.minio.MinioUtile; | |||
import cn.com.taiji.core.repo.jpa.invw.*; | |||
import cn.com.taiji.core.repo.request.invw.InvwTransferApplyPageRequest; | |||
import cn.com.taiji.invw.dto.transfer.*; | |||
import cn.com.taiji.invw.manager.AbstractCommManager; | |||
import cn.com.taiji.invw.model.transfer.InvwTransferApplyCommModel; | |||
import cn.com.taiji.invw.model.transfer.InvwTransferApplyDetailsModel; | |||
import cn.com.taiji.invw.tools.EasyExcelUtil; | |||
import cn.com.taiji.invw.tools.GenerateNoUtil; | |||
import org.springframework.beans.BeanUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.transaction.annotation.Transactional; | |||
import java.io.File; | |||
import java.math.BigInteger; | |||
import java.time.LocalDateTime; | |||
import java.util.ArrayList; | |||
@@ -43,6 +42,8 @@ public class InvwTransferApplyManagerImpl extends AbstractCommManager implements | |||
private InvwCardDetailsRepo cardDetailsRepo; | |||
@Autowired | |||
private InvwObuDetailsRepo obuDetailsRepo; | |||
@Autowired | |||
private MinioUtile minioUtile; | |||
@Override | |||
public Pagination page(InvwTransferApplyPageRequestDTO req) { | |||
@@ -175,6 +176,20 @@ public class InvwTransferApplyManagerImpl extends AbstractCommManager implements | |||
toCheck(details, req.getInventoryType(), req.getSendStoreCode()); | |||
} | |||
@Override | |||
public InvwTransferApplyImportResponseDTO importData(InvwTransferApplyImportRequestDTO req) throws ManagerException { | |||
// 获取导入文件 | |||
File file = minioUtile.getFileByUrl(req.getFileUrl()); | |||
// 读取文件数据 | |||
List<InvwTransferApplyDetailsModel> models = EasyExcelUtil.readExcelColToModelList(file, InvwTransferApplyDetailsModel.class); | |||
if (models.size() == 0) { | |||
throw new ManagerException("导入文件为空"); | |||
} | |||
InvwTransferApplyImportResponseDTO response = new InvwTransferApplyImportResponseDTO(); | |||
response.setTransferDetails(models); | |||
return response; | |||
} | |||
public void handlerTransferApply(InvwTransferApplyAddRequestDTO addReq, InvwTransferApplyEditRequestDTO editReq, | |||
InvwTransferApply transferApply, List<InvwTransferApplyDetails> transferApplyDetails) throws ManagerException { | |||
// 处理新增请求 | |||
@@ -186,7 +201,7 @@ public class InvwTransferApplyManagerImpl extends AbstractCommManager implements | |||
//处理新增 | |||
private void handleAddRequest(InvwTransferApplyAddRequestDTO addReq, InvwTransferApply transferApply, List<InvwTransferApplyDetails> transferApplyDetails) throws ManagerException { | |||
InvwTransferApplyCommModel transferApplyModel = addReq.getTransferApply(); | |||
InvwTransferApplyDetailsModel[] detailsModels = addReq.getTransferDetails(); | |||
List<InvwTransferApplyDetailsModel> detailsModels = addReq.getTransferDetails(); | |||
LocalDateTime now = LocalDateTime.now(); | |||
//生成申请单号 |
@@ -1,4 +1,4 @@ | |||
package cn.com.taiji.invw.model.excel; | |||
package cn.com.taiji.invw.model.card; | |||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | |||
import com.alibaba.excel.annotation.ExcelProperty; |
@@ -1,4 +1,4 @@ | |||
package cn.com.taiji.invw.model.excel; | |||
package cn.com.taiji.invw.model.card; | |||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | |||
import com.alibaba.excel.annotation.ExcelProperty; |
@@ -1,4 +1,4 @@ | |||
package cn.com.taiji.invw.model.excel; | |||
package cn.com.taiji.invw.model.obu; | |||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | |||
import com.alibaba.excel.annotation.ExcelProperty; |
@@ -1,4 +1,4 @@ | |||
package cn.com.taiji.invw.model.excel; | |||
package cn.com.taiji.invw.model.obu; | |||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | |||
import com.alibaba.excel.annotation.ExcelProperty; |
@@ -1,5 +1,6 @@ | |||
package cn.com.taiji.invw.model.transfer; | |||
import com.alibaba.excel.annotation.ExcelProperty; | |||
import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Getter; | |||
@@ -21,11 +22,13 @@ public class InvwTransferApplyDetailsModel { | |||
@ApiModelProperty(value = "开始编号") | |||
@NotBlank(message = "开始编号不能为空") | |||
@Pattern(regexp = "^[0-9]*$", message = "编号只能由0-9组成") | |||
@ExcelProperty(index = 0, value = "开始编号") | |||
private String startId;//开始编号 | |||
@ApiModelProperty(value = "结束编号") | |||
@NotBlank(message = "结束编号不能为空") | |||
@Pattern(regexp = "^[0-9]*$", message = "编号只能由0-9组成") | |||
@ExcelProperty(index = 1, value = "结束编号") | |||
private String endId;//结束编号 | |||
} |
@@ -1,50 +0,0 @@ | |||
package cn.com.taiji.managew.dto; | |||
import cn.com.taiji.common.valid.BaseValidDTO; | |||
import cn.com.taiji.common.valid.ViolationValidator; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.FixedLength; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import org.springframework.validation.annotation.Validated; | |||
import javax.validation.constraints.NotBlank; | |||
@Setter | |||
@Getter | |||
@Accessors(chain = true) | |||
@Validated | |||
public abstract class AbstractBizRequestDTO extends BaseValidDTO { | |||
// 前端公参 | |||
@NotBlank(message = "openId不能为空") | |||
private String openId; | |||
@NotBlank(message = "loginSource不能为空") | |||
private String loginSource; | |||
@NotBlank(message = "agentId不能为空") | |||
@FixedLength(length = 11) | |||
private String agentId; | |||
@NotBlank(message = "channelId不能为空") | |||
private String channelId; | |||
@IntegerConstant(values = "1,2", message = "网点类型错误!线下网点填写2") | |||
private Integer channelType; | |||
@NotBlank | |||
private String staffId; | |||
private String terminalId; | |||
private String orgCode; | |||
public SourceType getOrderSource() { | |||
return SourceType.findByCode(loginSource); | |||
} | |||
@Override | |||
protected void validate(ViolationValidator validator) { | |||
} | |||
} |
@@ -15,6 +15,8 @@ dependencies { | |||
implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config" | |||
implementation "org.springframework.cloud:spring-cloud-starter-openfeign" | |||
implementation 'com.alibaba:easyexcel:3.2.1' | |||
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis' | |||
implementation(group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0') { | |||
// exclude group: 'net.bytebuddy',module: 'byte-buddy' | |||
} |
@@ -1,15 +1,12 @@ | |||
package cn.com.taiji.userw.api.rbac; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.web.ApiResponse; | |||
import cn.com.taiji.userw.api.MyValidController; | |||
import cn.com.taiji.userw.dto.rbac.RbacMenuListBySystemTypeRequestDTO; | |||
import cn.com.taiji.userw.dto.rbac.RbacMenuListBySystemTypeResponseDTO; | |||
import cn.com.taiji.userw.dto.rbac.SystemTypeListByRbacSourceRequestDTO; | |||
import cn.com.taiji.userw.dto.rbac.SystemTypeListByRbacSourceResponseDTO; | |||
import cn.com.taiji.userw.dto.rbac.*; | |||
import cn.com.taiji.userw.manager.rbac.RbacMenuManger; | |||
import cn.com.taiji.userw.manager.rbac.RbacRoleManger; | |||
import cn.com.taiji.userw.model.rbac.SystemTypeMode; | |||
import cn.com.taiji.userw.manager.rbac.RbacSystemTypeManager; | |||
import io.swagger.annotations.Api; | |||
import io.swagger.annotations.ApiOperation; | |||
import org.springframework.web.bind.annotation.PostMapping; | |||
@@ -18,7 +15,6 @@ import org.springframework.web.bind.annotation.RequestMapping; | |||
import org.springframework.web.bind.annotation.RestController; | |||
import javax.annotation.Resource; | |||
import java.util.List; | |||
/** | |||
* @Author ChenChao | |||
@@ -32,6 +28,8 @@ public class RabcSystemTypeController extends MyValidController { | |||
@Resource | |||
private RbacMenuManger rbacMenuManger; | |||
@Resource | |||
private RbacSystemTypeManager rbacSystemTypeManager; | |||
@ApiOperation(value = "根据系统类型获取菜单列表") | |||
@PostMapping(value = "/menulistbysystemtype") | |||
@@ -46,6 +44,10 @@ public class RabcSystemTypeController extends MyValidController { | |||
} | |||
@ApiOperation(value = "根据系统类别获取所属系统列表") | |||
@PostMapping(value = "/systemTypeByAccountRole") | |||
public ApiResponse<RbacSystemTypeByOpenIdResponseDTO> systemTypeByAccountRole(@RequestBody RbacSystemTypeByOpenIdRequestDTO dto) throws ServiceHandleException { | |||
return ApiResponse.of(rbacSystemTypeManager.systemTypeByOpneId(dto)).setMessage("获取小程序系统下的所有角色成功"); | |||
} | |||
} |
@@ -1,15 +0,0 @@ | |||
package cn.com.taiji.userw.dto; | |||
import cn.com.taiji.common.model.finals.SysFinals; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@Getter | |||
@Setter | |||
public abstract class AbstractBizPageRequestDTO extends AbstractBizRequestDTO { | |||
private Integer pageNo = SysFinals.DEFAULT_PAGE_NUM; | |||
private Integer pageSize = SysFinals.DEFAULT_PAGE_SIZE; | |||
} |
@@ -0,0 +1,14 @@ | |||
package cn.com.taiji.userw.dto.rbac; | |||
import cn.com.taiji.userw.dto.AbstractBizRequestDTO; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
public class RbacSystemTypeByOpenIdRequestDTO extends AbstractBizRequestDTO { | |||
} |
@@ -0,0 +1,15 @@ | |||
package cn.com.taiji.userw.dto.rbac; | |||
import cn.com.taiji.common.model.BaseModel; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
import java.util.List; | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
public class RbacSystemTypeByOpenIdResponseDTO extends BaseModel { | |||
private List<RbacSystemTypeByOpenIdVO> list; | |||
} |
@@ -0,0 +1,16 @@ | |||
package cn.com.taiji.userw.dto.rbac; | |||
import cn.com.taiji.common.model.BaseModel; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
@Getter | |||
@Setter | |||
@Accessors(chain = true) | |||
public class RbacSystemTypeByOpenIdVO extends BaseModel { | |||
private String name; | |||
private Integer code; | |||
} |
@@ -0,0 +1,212 @@ | |||
package cn.com.taiji.userw.manager; | |||
import cn.com.taiji.common.entity.BaseEntity; | |||
import cn.com.taiji.common.manager.AbstractManager; | |||
import cn.com.taiji.common.model.dao.Pagination; | |||
import cn.com.taiji.common.pub.StringTools; | |||
import cn.com.taiji.common.pub.json.JsonTools; | |||
import cn.com.taiji.core.manager.cache.RedisManager; | |||
import org.apache.commons.collections4.map.HashedMap; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.data.redis.core.Cursor; | |||
import org.springframework.data.redis.core.HashOperations; | |||
import org.springframework.data.redis.core.RedisTemplate; | |||
import org.springframework.data.redis.core.ScanOptions.ScanOptionsBuilder; | |||
import org.springframework.stereotype.Service; | |||
import java.io.IOException; | |||
import java.util.*; | |||
import java.util.Map.Entry; | |||
import java.util.concurrent.TimeUnit; | |||
import java.util.function.Supplier; | |||
/** | |||
* hash操作的方法以hash开头,如:hashGet<br> | |||
* | |||
* @author lijun <br> | |||
* Create Time:2018年12月9日 下午1:43:54<br> | |||
* mail:756915505@qq.com | |||
* @since 1.0 | |||
* @version 1.0 | |||
*/ | |||
@Service | |||
public class RedisWrapManager extends AbstractManager implements RedisManager { | |||
@Autowired(required = false) | |||
private RedisTemplate<String, String> redisTemplate; | |||
public Set<String> key(String pattern) { | |||
if ("*".equals(pattern)) { | |||
throw new RuntimeException("禁止全扫描key"); | |||
} | |||
return redisTemplate.keys(pattern); | |||
} | |||
public Boolean expire(String key, final long timeout, final TimeUnit unit) { | |||
return redisTemplate.expire(key, timeout, unit); | |||
} | |||
public String get(String key) { | |||
return redisTemplate.opsForValue().get(key); | |||
} | |||
public String getAndSet(String key, String value) { | |||
return redisTemplate.opsForValue().getAndSet(key, value); | |||
} | |||
public void set(String key, String value, long timeout, TimeUnit unit) { | |||
redisTemplate.opsForValue().set(key, value, timeout, unit); | |||
} | |||
public boolean setIfAbsent(String key, String value, long timeout, TimeUnit unit) { | |||
return redisTemplate.opsForValue().setIfAbsent(key, value, timeout, unit); | |||
} | |||
public long increment(String key, long delta) { | |||
return redisTemplate.opsForValue().increment(key, delta); | |||
} | |||
public Boolean delete(String key) { | |||
return redisTemplate.delete(key); | |||
} | |||
public long listRightPush(String key, String value) { | |||
return redisTemplate.opsForList().rightPush(key, value); | |||
} | |||
/** | |||
* 返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。 | |||
* 偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推 | |||
*/ | |||
public List<String> listRange(String key, long start, long end) { | |||
return redisTemplate.opsForList().range(key, start, end); | |||
} | |||
public Long listSize(String key) { | |||
return redisTemplate.opsForList().size(key); | |||
} | |||
public Boolean hashHasKey(String key, Object hashKey) { | |||
return opsForHash().hasKey(key, hashKey); | |||
} | |||
public Object hashGet(String key, Object hashKey) { | |||
return opsForHash().get(key, hashKey); | |||
} | |||
public void hashPut(String key, Object hashKey, Object value) { | |||
opsForHash().put(key, hashKey, value); | |||
} | |||
public Boolean hashPutIfAbsent(String key, Object hashKey, Object value) { | |||
return opsForHash().putIfAbsent(key, hashKey, value); | |||
} | |||
public void hashPutAll(String key, Map<? extends Object, ? extends Object> m) { | |||
opsForHash().putAll(key, m); | |||
} | |||
public Long hashIncrement(String key, Object hashKey, long delta) { | |||
return opsForHash().increment(key, hashKey, delta); | |||
} | |||
public Long hashDelete(String key, Object... hashKeys) { | |||
return opsForHash().delete(key, hashKeys); | |||
} | |||
public Map<Object, Object> hashScan(String key, String pattern) { | |||
ScanOptionsBuilder b = new ScanOptionsBuilder(); | |||
Cursor<Entry<Object, Object>> s = opsForHash().scan(key, b.match(pattern).build()); | |||
Map<Object, Object> map = new HashMap<>(); | |||
s.forEachRemaining(e -> map.put(e.getKey(), e.getValue())); | |||
return map; | |||
} | |||
public String findStr(String key, int timeout, Supplier<String> valueSupplier) { | |||
String str = get(key); | |||
if (!StringTools.hasText(str)) { | |||
str = valueSupplier.get(); | |||
set(key, str, timeout); | |||
} | |||
return str; | |||
} | |||
public <T extends BaseEntity> T findObj(Class<T> clazz, String key, int timeout, Supplier<T> valueSupplier) { | |||
String jsonStr = (String)get(key); | |||
try { | |||
if (!StringTools.hasText(jsonStr)) { | |||
T obj = valueSupplier.get(); | |||
jsonStr = JsonTools.toJsonStr(obj); | |||
set(key, jsonStr, timeout); | |||
} | |||
return JsonTools.json2Object(jsonStr, clazz); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
return null; | |||
} | |||
} | |||
public <T extends BaseEntity> T findObj(Class<T> clazz, String key) { | |||
String jsonStr = redisTemplate.opsForValue().get(key); | |||
try { | |||
return JsonTools.json2Object(jsonStr, clazz); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
return null; | |||
} | |||
} | |||
public <T> Map<String, T> findMap(Class<T> clazz, String key, int timeout, Supplier<Map<String, T>> valueSupplier) { | |||
String jsonStr = get(key); | |||
try { | |||
if (!StringTools.hasText(jsonStr)) { | |||
Map<String, T> map = valueSupplier.get(); | |||
jsonStr = JsonTools.toJsonStr(map); | |||
set(key, jsonStr, timeout); | |||
} | |||
return JsonTools.json2Map(jsonStr, String.class, clazz); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
return new HashedMap<>(); | |||
} | |||
} | |||
public <T> List<T> findList(Class<T> clazz, String key, int timeout, Supplier<Collection<T>> valueSupplier) { | |||
String jsonStr = get(key); | |||
try { | |||
if (!StringTools.hasText(jsonStr)) { | |||
Collection<T> c = valueSupplier.get(); | |||
jsonStr = JsonTools.toJsonStr(c); | |||
set(key, jsonStr, timeout); | |||
} | |||
return JsonTools.json2List(jsonStr, clazz); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
return new ArrayList<>(); | |||
} | |||
} | |||
public <T extends BaseEntity> Pagination findPagn(Class<T> clazz, String key, int timeout, | |||
Supplier<Pagination> valueSupplier) { | |||
String jsonStr = get(key); | |||
try { | |||
if (!StringTools.hasText(jsonStr)) { | |||
Pagination c = valueSupplier.get(); | |||
jsonStr = JsonTools.toJsonStr(c); | |||
set(key, jsonStr, timeout); | |||
} | |||
return JsonTools.json2Pagn(jsonStr, clazz); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
return new Pagination().setResult(new ArrayList<>()); | |||
} | |||
} | |||
private <HK, HV> HashOperations<String, HK, HV> opsForHash() { | |||
return redisTemplate.opsForHash(); | |||
} | |||
private void set(String key, String value, int timeout) { | |||
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS); | |||
} | |||
} |
@@ -0,0 +1,9 @@ | |||
package cn.com.taiji.userw.manager.rbac; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdRequestDTO; | |||
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdResponseDTO; | |||
public interface RbacSystemTypeManager { | |||
RbacSystemTypeByOpenIdResponseDTO systemTypeByOpneId(RbacSystemTypeByOpenIdRequestDTO dto) throws ServiceHandleException; | |||
} |
@@ -0,0 +1,57 @@ | |||
package cn.com.taiji.userw.manager.rbac; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.entity.dict.user.SystemType; | |||
import cn.com.taiji.core.manager.cache.RedisCacheManager; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.com.taiji.core.repo.jpa.user.AccountUserRoleRepo; | |||
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdRequestDTO; | |||
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdResponseDTO; | |||
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdVO; | |||
import org.apache.commons.compress.utils.Lists; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import java.util.List; | |||
import java.util.stream.Collectors; | |||
@Service | |||
public class RbacSystemTypeManagerImpl extends RedisCacheManager implements RbacSystemTypeManager { | |||
@Autowired | |||
private AccountUserRoleRepo accountUserRoleRepo; | |||
@Override | |||
public RbacSystemTypeByOpenIdResponseDTO systemTypeByOpneId(RbacSystemTypeByOpenIdRequestDTO dto) throws ServiceHandleException { | |||
String openId = findOpenIdByToken(dto.getAccessToken()); | |||
List<RbacSystemTypeByOpenIdVO> list = Lists.newArrayList(); | |||
switch (SourceType.findByCode(dto.getLoginSource())) { | |||
case SERVICE_HALL: | |||
list.add(from(SystemType.APP)); | |||
return new RbacSystemTypeByOpenIdResponseDTO().setList(list); | |||
case ALI: | |||
list.add(from(SystemType.MINI_PROGRAM)); | |||
return new RbacSystemTypeByOpenIdResponseDTO().setList(list); | |||
case WECHAT: | |||
list.add(from(SystemType.ZFB_MINI_PROGRAM)); | |||
return new RbacSystemTypeByOpenIdResponseDTO().setList(list); | |||
case WEB: | |||
List<SystemType> systemTypeList = accountUserRoleRepo.findSystemTypeByOpenId(openId); | |||
if (isEmpty(systemTypeList)) | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("无访问系统权限"); | |||
list = systemTypeList.stream().filter(e -> e != SystemType.APP && e != SystemType.MINI_PROGRAM && e != SystemType.ZFB_MINI_PROGRAM).map(this::from).collect(Collectors.toList()); | |||
return new RbacSystemTypeByOpenIdResponseDTO().setList(list); | |||
default: | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("无访问系统权限"); | |||
} | |||
} | |||
private RbacSystemTypeByOpenIdVO from(SystemType type) { | |||
RbacSystemTypeByOpenIdVO vo = new RbacSystemTypeByOpenIdVO(); | |||
vo.setName(type.getName()); | |||
vo.setCode(type.getCode()); | |||
return vo; | |||
} | |||
} |
@@ -31,6 +31,8 @@ spring: | |||
refresh: true | |||
- data-id: comm-client.yaml | |||
refresh: true | |||
- data-id: redis.yaml | |||
refresh: true | |||
- data-id: minio-client.yaml | |||
refresh: true | |||
- data-id: userw-config.yaml |
@@ -1,56 +0,0 @@ | |||
package cn.com.taiji.ats.dto; | |||
import javax.validation.constraints.NotBlank; | |||
import org.springframework.validation.annotation.Validated; | |||
import cn.com.taiji.common.valid.BaseValidDTO; | |||
import cn.com.taiji.common.valid.ViolationValidator; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.FixedLength; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import lombok.experimental.Accessors; | |||
@Setter | |||
@Getter | |||
@Accessors(chain = true) | |||
@Validated | |||
public abstract class AbstractBizRequestDTO extends BaseValidDTO { | |||
// 前端公参 | |||
@NotBlank(message = "openId不能为空") | |||
private String openId; | |||
@NotBlank(message = "loginSource不能为空") | |||
private String loginSource; | |||
@NotBlank(message = "agentId不能为空") | |||
@FixedLength(length = 11) | |||
private String agentId; | |||
@NotBlank(message = "channelId不能为空") | |||
private String channelId; | |||
@IntegerConstant(values = "1,2", message = "网点类型错误!线下网点填写2") | |||
private Integer channelType; | |||
private String staffId; | |||
private String terminalId; | |||
private String orgCode; | |||
public SourceType getOrderSource() { | |||
return SourceType.findByCode(loginSource); | |||
} | |||
@Override | |||
protected void validate(ViolationValidator validator) { | |||
if (getOrderSource() == SourceType.SERVICE_HALL) { | |||
validator.validFieldNotBlank("staffId", staffId); | |||
} | |||
} | |||
// @JsonIgnore | |||
// public List<String> getPermittedAgencyIdList() { | |||
// AgencyVerifyManager manager = SpringContextHolder.getBean(AgencyVerifyManager.class); | |||
// return manager.getPermittedAgencyIdListWithCache(openId, getOrderSource().getLoginSourceEnum()); | |||
// } | |||
} |
@@ -5,6 +5,7 @@ import cn.com.taiji.common.manager.AbstractManager; | |||
import cn.com.taiji.common.model.dao.Pagination; | |||
import cn.com.taiji.common.pub.StringTools; | |||
import cn.com.taiji.common.pub.json.JsonTools; | |||
import cn.com.taiji.core.manager.cache.RedisManager; | |||
import org.apache.commons.collections4.map.HashedMap; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.data.redis.core.Cursor; | |||
@@ -29,7 +30,7 @@ import java.util.function.Supplier; | |||
* @version 1.0 | |||
*/ | |||
@Service | |||
public class RedisWrapManager extends AbstractManager { | |||
public class RedisWrapManager extends AbstractManager implements RedisManager { | |||
@Autowired(required = false) | |||
private RedisTemplate<String, String> redisTemplate; |
@@ -1,30 +1,20 @@ | |||
package cn.com.taiji.ias.manager.portal; | |||
import cn.com.taiji.common.manager.AbstractManager; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.pub.json.JsonTools; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.entity.user.AccountInfo; | |||
import cn.com.taiji.core.entity.user.Staff; | |||
import cn.com.taiji.core.manager.cache.RedisCacheManager; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.com.taiji.core.repo.jpa.user.StaffRepo; | |||
import cn.com.taiji.ias.manager.RedisWrapManager; | |||
import cn.com.taiji.ias.model.LoginFinals; | |||
import cn.com.taiji.ias.model.RedisKeyGenerator; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import java.io.IOException; | |||
import java.util.concurrent.TimeUnit; | |||
public abstract class AbstractLoginManager extends AbstractManager { | |||
public abstract class AbstractLoginManager extends RedisCacheManager { | |||
protected final static String commonServiceHallId = "5201010600400000000";// 普通用户的专属网点编号 | |||
protected final static String commonStaffId = "003d875dabaa4390b22739f6897cf570"; | |||
@Autowired | |||
private StaffRepo staffRepo; | |||
@Autowired | |||
protected RedisWrapManager redisManager; | |||
protected Staff findAndValidStaff(String openId, SourceType loginSource) throws ServiceHandleException { | |||
if (loginSource != SourceType.SERVICE_HALL && loginSource != SourceType.WEB) return null; | |||
@@ -39,49 +29,49 @@ public abstract class AbstractLoginManager extends AbstractManager { | |||
return staff; | |||
} | |||
protected void setTokenCache(AccountInfo accountInfo, String accessToken, String agencyId) { | |||
redisManager.set(RedisKeyGenerator.getLoginOpenIdKey(accessToken), accountInfo.getOpenId(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), accountInfo.getLoginSource().name(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), accountInfo.toJson(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), agencyId, LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginTokenKey(accountInfo.getOpenId()), accessToken, LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
} | |||
protected void checkTokenCache(String accessToken, String openId, SourceType loginSource) throws ServiceHandleException { | |||
String openIdCache = redisManager.get(RedisKeyGenerator.getLoginOpenIdKey(accessToken)); | |||
if (!hasText(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
if (!openId.equals(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
String loginSourceType = redisManager.get(RedisKeyGenerator.getLoginSourceTypeKey(accessToken)); | |||
if (!hasText(loginSourceType)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
if (!loginSourceType.equals(loginSource.name())) | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
String accountInfoStr = redisManager.get(RedisKeyGenerator.getLoginAccountInfoKey(accessToken)); | |||
if (!hasText(accountInfoStr)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
AccountInfo accountInfo = null; | |||
try { | |||
accountInfo = JsonTools.json2Object(accountInfoStr, AccountInfo.class); | |||
} catch (IOException e) { | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效,信息解析失败"); | |||
} | |||
String accessTokenCache = redisManager.get(RedisKeyGenerator.getLoginTokenKey(openId)); | |||
if (!hasText(accessTokenCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
if (!accessToken.equals(accessTokenCache)) | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
} | |||
protected void expireTokenCache(String accessToken, String openId) { | |||
redisManager.expire(RedisKeyGenerator.getLoginOpenIdKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.expire(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.expire(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.expire(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.expire(RedisKeyGenerator.getLoginTokenKey(openId), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
} | |||
protected void deleteTokenCache(String accessToken, String openId) { | |||
redisManager.delete(RedisKeyGenerator.getLoginOpenIdKey(accessToken)); | |||
redisManager.delete(RedisKeyGenerator.getLoginSourceTypeKey(accessToken)); | |||
redisManager.delete(RedisKeyGenerator.getLoginAccountInfoKey(accessToken)); | |||
redisManager.delete(RedisKeyGenerator.getLoginAgencyIdKey(accessToken)); | |||
redisManager.delete(RedisKeyGenerator.getLoginTokenKey(openId)); | |||
} | |||
// protected void setTokenCache(AccountInfo accountInfo, String accessToken, String agencyId) { | |||
// redisManager.set(RedisKeyGenerator.getLoginOpenIdKey(accessToken), accountInfo.getOpenId(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// redisManager.set(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), accountInfo.getLoginSource().name(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// redisManager.set(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), accountInfo.toJson(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// redisManager.set(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), agencyId, LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// redisManager.set(RedisKeyGenerator.getLoginTokenKey(accountInfo.getOpenId()), accessToken, LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// } | |||
// | |||
// protected void checkTokenCache(String accessToken, String openId, SourceType loginSource) throws ServiceHandleException { | |||
// String openIdCache = redisManager.get(RedisKeyGenerator.getLoginOpenIdKey(accessToken)); | |||
// if (!hasText(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
// if (!openId.equals(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
// String loginSourceType = redisManager.get(RedisKeyGenerator.getLoginSourceTypeKey(accessToken)); | |||
// if (!hasText(loginSourceType)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
// if (!loginSourceType.equals(loginSource.name())) | |||
// throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
// String accountInfoStr = redisManager.get(RedisKeyGenerator.getLoginAccountInfoKey(accessToken)); | |||
// if (!hasText(accountInfoStr)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
// AccountInfo accountInfo = null; | |||
// try { | |||
// accountInfo = JsonTools.json2Object(accountInfoStr, AccountInfo.class); | |||
// } catch (IOException e) { | |||
// throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效,信息解析失败"); | |||
// } | |||
// String accessTokenCache = redisManager.get(RedisKeyGenerator.getLoginTokenKey(openId)); | |||
// if (!hasText(accessTokenCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
// if (!accessToken.equals(accessTokenCache)) | |||
// throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效"); | |||
// } | |||
// | |||
// protected void expireTokenCache(String accessToken, String openId) { | |||
// redisManager.expire(RedisKeyGenerator.getLoginOpenIdKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// redisManager.expire(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// redisManager.expire(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// redisManager.expire(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// redisManager.expire(RedisKeyGenerator.getLoginTokenKey(openId), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES); | |||
// } | |||
// | |||
// protected void deleteTokenCache(String accessToken, String openId) { | |||
// redisManager.delete(RedisKeyGenerator.getLoginOpenIdKey(accessToken)); | |||
// redisManager.delete(RedisKeyGenerator.getLoginSourceTypeKey(accessToken)); | |||
// redisManager.delete(RedisKeyGenerator.getLoginAccountInfoKey(accessToken)); | |||
// redisManager.delete(RedisKeyGenerator.getLoginAgencyIdKey(accessToken)); | |||
// redisManager.delete(RedisKeyGenerator.getLoginTokenKey(openId)); | |||
// } | |||
} |
@@ -10,8 +10,9 @@ import org.springframework.stereotype.Service; | |||
public class AccessTokenCheckManager extends AbstractLoginManager { | |||
public AccessTokenCheckResponse serviceHandle(AccessTokenCheckRequest request) throws ServiceHandleException { | |||
checkTokenCache(request.getAccessToken(), request.getOpenId(), request.getLoginSource()); | |||
expireTokenCache(request.getAccessToken(), request.getOpenId()); | |||
String openId = findOpenIdByToken(request.getAccessToken()); | |||
checkTokenCache(request.getAccessToken(), openId, request.getLoginSource()); | |||
expireTokenCache(request.getAccessToken(), openId); | |||
AccessTokenCheckResponse response = new AccessTokenCheckResponse(); | |||
response.setInfo("验证成功,Token尚且有效"); | |||
return response; |
@@ -2,12 +2,12 @@ package cn.com.taiji.ias.manager.portal; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.entity.user.AccountInfo; | |||
import cn.com.taiji.core.manager.cache.LoginCacheFinals; | |||
import cn.com.taiji.core.manager.cache.RedisKeyGenerator; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginByCodeRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginByCodeResponse; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.com.taiji.core.repo.jpa.user.AccountInfoRepo; | |||
import cn.com.taiji.ias.model.LoginFinals; | |||
import cn.com.taiji.ias.model.RedisKeyGenerator; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -30,7 +30,7 @@ public class LoginByCodeManager extends AbstractLoginManager { | |||
if (accountInfo == null) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("手机号输入错误"); | |||
findAndValidStaff(accountInfo.getOpenId(), request.getLoginSource()); | |||
String code = UUID.randomUUID().toString().replaceAll("-", "");// code用于换Token,还完Token就没用了 | |||
redisManager.set(RedisKeyGenerator.getLoginOpenIdByCodeKey(code, request.getLoginSource().name()), accountInfo.getOpenId(), LoginFinals.LOGIN_CODE_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginOpenIdByCodeKey(code, request.getLoginSource().name()), accountInfo.getOpenId(), LoginCacheFinals.LOGIN_CODE_EXPIRED, TimeUnit.MINUTES); | |||
LoginByCodeResponse response = new LoginByCodeResponse(); | |||
response.setInfo("登录成功"); | |||
return response; |
@@ -4,12 +4,12 @@ import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.entity.user.AccountInfo; | |||
import cn.com.taiji.core.entity.user.Staff; | |||
import cn.com.taiji.core.manager.cache.RedisKeyGenerator; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginConfirmRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginConfirmResponse; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.com.taiji.core.repo.jpa.user.AccountInfoRepo; | |||
import cn.com.taiji.ias.manager.RedisWrapManager; | |||
import cn.com.taiji.ias.model.RedisKeyGenerator; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -3,13 +3,13 @@ package cn.com.taiji.ias.manager.portal; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||
import cn.com.taiji.core.entity.user.AccountInfo; | |||
import cn.com.taiji.core.manager.cache.LoginCacheFinals; | |||
import cn.com.taiji.core.manager.cache.RedisKeyGenerator; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginResponse; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.com.taiji.core.repo.jpa.user.AccountInfoRepo; | |||
import cn.com.taiji.ias.manager.RedisWrapManager; | |||
import cn.com.taiji.ias.model.LoginFinals; | |||
import cn.com.taiji.ias.model.RedisKeyGenerator; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.transaction.annotation.Transactional; | |||
@@ -45,7 +45,7 @@ public class LoginManager extends AbstractLoginManager { | |||
//校验是否是已经被停用的员工,停用则不允许登录web和app端 | |||
findAndValidStaff(accountInfo.getOpenId(), request.getLoginSource()); | |||
String code = UUID.randomUUID().toString().replaceAll("-", "");// code用于换Token,还完Token就没用了 | |||
redisManager.set(RedisKeyGenerator.getLoginOpenIdByCodeKey(code, request.getLoginSource().name()), accountInfo.getOpenId(), LoginFinals.LOGIN_CODE_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getLoginOpenIdByCodeKey(code, request.getLoginSource().name()), accountInfo.getOpenId(), LoginCacheFinals.LOGIN_CODE_EXPIRED, TimeUnit.MINUTES); | |||
LoginResponse response = new LoginResponse(code); | |||
response.setInfo("登录成功"); | |||
return response; | |||
@@ -54,14 +54,14 @@ public class LoginManager extends AbstractLoginManager { | |||
private void addFailedCount(String loginName, SourceType sourceType) { | |||
redisManager.increment(RedisKeyGenerator.getFailCountKey(loginName, sourceType), 1L); | |||
redisManager.expire(RedisKeyGenerator.getFailCountKey(loginName, sourceType), LoginFinals.LOGIN_FAILED_EXPIRE, TimeUnit.MINUTES); | |||
redisManager.expire(RedisKeyGenerator.getFailCountKey(loginName, sourceType), LoginCacheFinals.LOGIN_FAILED_EXPIRE, TimeUnit.MINUTES); | |||
} | |||
private void checkFailedCount(String loginName, SourceType sourceType) throws ServiceHandleException { | |||
String countStr = redisManager.get(RedisKeyGenerator.getFailCountKey(loginName, sourceType)); | |||
int count = hasText(countStr) ? Integer.parseInt(countStr) : 0; | |||
if (count >= LoginFinals.LOGIN_TRY_COUNT) { | |||
String msg = toLogString("登录失败次数超过{}次,{}分钟内禁止登录", LoginFinals.LOGIN_TRY_COUNT, LoginFinals.LOGIN_FAILED_EXPIRE); | |||
if (count >= LoginCacheFinals.LOGIN_TRY_COUNT) { | |||
String msg = toLogString("登录失败次数超过{}次,{}分钟内禁止登录", LoginCacheFinals.LOGIN_TRY_COUNT, LoginCacheFinals.LOGIN_FAILED_EXPIRE); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException(msg); | |||
} | |||
} |
@@ -11,15 +11,17 @@ public class LogoutManager extends AbstractLoginManager { | |||
public LogoutResponse serviceHandle(LogoutRequest request) { | |||
try { | |||
checkTokenCache(request.getAccessToken(), request.getOpenId(), request.getLoginSource()); | |||
String openId = findOpenIdByToken(request.getAccessToken()); | |||
checkTokenCache(request.getAccessToken(), openId, request.getLoginSource()); | |||
deleteTokenCache(request.getAccessToken(), openId); | |||
LogoutResponse response = new LogoutResponse(); | |||
response.setInfo("退出成功"); | |||
return response; | |||
} catch (ServiceHandleException e) { | |||
logger.info("Token失效退出"); | |||
LogoutResponse response = new LogoutResponse(); | |||
response.setInfo("退出成功"); | |||
return response; | |||
} | |||
deleteTokenCache(request.getAccessToken(), request.getOpenId()); | |||
LogoutResponse response = new LogoutResponse(); | |||
response.setInfo("退出成功"); | |||
return response; | |||
} | |||
} |
@@ -1,11 +1,11 @@ | |||
package cn.com.taiji.ias.manager.portal; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.manager.cache.LoginCacheFinals; | |||
import cn.com.taiji.core.manager.cache.RedisKeyGenerator; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.SendCodeRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.portal.SendCodeResponse; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import cn.com.taiji.ias.model.LoginFinals; | |||
import cn.com.taiji.ias.model.RedisKeyGenerator; | |||
import org.springframework.stereotype.Service; | |||
import java.util.concurrent.TimeUnit; | |||
@@ -20,7 +20,7 @@ public class SendCodeManager extends AbstractLoginManager { | |||
code = (Math.random() * 1000000 + "").substring(0, 6); | |||
logger.info("短信验证码:{}", code); | |||
//TODO 短信接口 | |||
redisManager.set(RedisKeyGenerator.getSmsCodeKey(request.getMobile(), request.getLoginSource().name(), request.getBusinessType()), code, LoginFinals.LOGIN_SMS_CODE_EXPIRED, TimeUnit.MINUTES); | |||
redisManager.set(RedisKeyGenerator.getSmsCodeKey(request.getMobile(), request.getLoginSource().name(), request.getBusinessType()), code, LoginCacheFinals.LOGIN_SMS_CODE_EXPIRED, TimeUnit.MINUTES); | |||
SendCodeResponse response = new SendCodeResponse(); | |||
response.setInfo("短信验证码发送成功"); | |||
return response; |
@@ -4,6 +4,8 @@ import cn.com.taiji.core.model.comm.protocol.AbstractReqIdTypeRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.message.dto.FileVo; | |||
import cn.com.taiji.core.model.comm.protocol.ias.message.dto.MIMEMultipartTypeEnum; | |||
import lombok.Data; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import java.util.List; | |||
@@ -13,7 +15,8 @@ import java.util.List; | |||
* @Description 邮件接口参数 | |||
*/ | |||
@Data | |||
@Getter | |||
@Setter | |||
public class EmailRequest extends AbstractReqIdTypeRequest { | |||
private String email; | |||
private String subject; |