增加业务员代码

master
bynt 1 year ago
parent 09c67e8dfa
commit 850cf3f53d

39
.gitignore vendored

@ -0,0 +1,39 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### custom ###
.flattened-pom.xml
/**/application-local.yml
/logs/

@ -73,5 +73,10 @@
<version>2.3.2.RELEASE</version> <version>2.3.2.RELEASE</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

@ -0,0 +1,46 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* <p>
* Redis key
* </p>
*
* @author Zheng Jie
* @date 2020-05-02
*/
@Getter
@AllArgsConstructor
public enum ClueSourceEnum {
/**
*
*/
TABLE_UPLOAD("table upload", "表单上传"),
/**
*
*/
STORE_DISTRIBUTION("store distribution:", "门店分发");
private final String key;
private final String description;
}

@ -0,0 +1,64 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
/**
* <p>
* Redis key
* </p>
*
* @author Zheng Jie
* @date 2020-05-02
*/
@Getter
@AllArgsConstructor
public enum SalesManEnum {
/**
*
*/
DISPENSER(19L, 1),
/**
*
*/
FIRST_INSTANCE(20L, 2),
/**
*
*/
RETRIAL(21L, 3);
private final Long id;
private final Integer type;
public static Integer find(Long val) {
for (SalesManEnum salesManEnum : SalesManEnum.values()) {
if (Objects.equals(salesManEnum.getId(), val)) {
return salesManEnum.getType();
}
}
return 0;
}
}

@ -31,5 +31,9 @@
<groupId>org.springdoc</groupId> <groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-common</artifactId> <artifactId>springdoc-openapi-common</artifactId>
</dependency> </dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -0,0 +1,37 @@
package com.baiye.entity;
import java.util.List;
/**
* @author Enzo
* @date 2022-05-14
*/
public interface BaseMapStruct<D, E> {
/**
* DTOEntity
* @param dto /
* @return /
*/
E toEntity(D dto);
/**
* EntityDTO
* @param entity /
* @return /
*/
D toDto(E entity);
/**
* DTOEntity
* @param dtoList /
* @return /
*/
List<E> toEntity(List<D> dtoList);
/**
* EntityDTO
* @param entityList /
* @return /
*/
List <D> toDto(List<E> entityList);
}

@ -1,6 +1,5 @@
package com.baiye.result; package com.baiye.result;
import com.baiye.I18nClass;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;

@ -46,6 +46,7 @@ public class BallcatOAuth2TokenCustomizer implements OAuth2TokenCustomizer<OAuth
HashMap<String, Object> userInfo = new HashMap<>(6); HashMap<String, Object> userInfo = new HashMap<>(6);
userInfo.put(UserInfoFiledNameConstants.USER_ID, user.getUserId()); userInfo.put(UserInfoFiledNameConstants.USER_ID, user.getUserId());
userInfo.put(UserInfoFiledNameConstants.TYPE, user.getType()); userInfo.put(UserInfoFiledNameConstants.TYPE, user.getType());
userInfo.put(UserInfoFiledNameConstants.SALESMAN_TYPE, user.getSalesmanType());
userInfo.put(UserInfoFiledNameConstants.ORGANIZATION_ID, user.getOrganizationId()); userInfo.put(UserInfoFiledNameConstants.ORGANIZATION_ID, user.getOrganizationId());
userInfo.put(UserInfoFiledNameConstants.USERNAME, user.getUsername()); userInfo.put(UserInfoFiledNameConstants.USERNAME, user.getUsername());
userInfo.put(UserInfoFiledNameConstants.NICKNAME, user.getNickname()); userInfo.put(UserInfoFiledNameConstants.NICKNAME, user.getNickname());

@ -18,6 +18,11 @@ public final class UserInfoFiledNameConstants {
*/ */
public static final String TYPE = "type"; public static final String TYPE = "type";
/**
*
*/
public static final String SALESMAN_TYPE = "salesmanType";
/** /**
* ID * ID
*/ */

@ -38,10 +38,11 @@ public class UserDeserializer extends JsonDeserializer<User> {
* {@link org.springframework.security.core.userdetails.User} by invoking * {@link org.springframework.security.core.userdetails.User} by invoking
* {@link org.springframework.security.core.userdetails.User#eraseCredentials()}. In * {@link org.springframework.security.core.userdetails.User#eraseCredentials()}. In
* that case there won't be any password key in serialized json. * that case there won't be any password key in serialized json.
* @param jp the JsonParser *
* @param jp the JsonParser
* @param ctxt the DeserializationContext * @param ctxt the DeserializationContext
* @return the user * @return the user
* @throws IOException if a exception during IO occurs * @throws IOException if a exception during IO occurs
* @throws JsonProcessingException if an error during JSON processing occurs * @throws JsonProcessingException if an error during JSON processing occurs
*/ */
@Override @Override
@ -51,6 +52,7 @@ public class UserDeserializer extends JsonDeserializer<User> {
JsonNode passwordNode = readJsonNode(jsonNode, "password"); JsonNode passwordNode = readJsonNode(jsonNode, "password");
long userId = readJsonNode(jsonNode, "userId").asLong(); long userId = readJsonNode(jsonNode, "userId").asLong();
int salesmanType = readJsonNode(jsonNode, "salesmanType").asInt();
long whichUserId = readJsonNode(jsonNode, "whichUserId").asLong(); long whichUserId = readJsonNode(jsonNode, "whichUserId").asLong();
String username = readJsonNode(jsonNode, "username").asText(""); String username = readJsonNode(jsonNode, "username").asText("");
String nickname = readJsonNode(jsonNode, "nickname").asText(""); String nickname = readJsonNode(jsonNode, "nickname").asText("");
@ -73,21 +75,22 @@ public class UserDeserializer extends JsonDeserializer<User> {
Map<String, Object> attributes = mapper.convertValue(jsonNode.get("attributes"), ATTRIBUTE_MAP); Map<String, Object> attributes = mapper.convertValue(jsonNode.get("attributes"), ATTRIBUTE_MAP);
return User.builder() return User.builder()
.userId(userId) .userId(userId)
.whichUserId(whichUserId) .whichUserId(whichUserId)
.username(username) .username(username)
.password(password) .password(password)
.nickname(nickname) .nickname(nickname)
.avatar(avatar) .avatar(avatar)
.status(status) .status(status)
.organizationId(organizationId) .organizationId(organizationId)
.email(email) .email(email)
.phoneNumber(phoneNumber) .phoneNumber(phoneNumber)
.gender(gender) .gender(gender)
.type(type) .type(type)
.authorities(authorities) .salesmanType(salesmanType)
.attributes(attributes) .authorities(authorities)
.build(); .attributes(attributes)
.build();
} }
private JsonNode readJsonNode(JsonNode jsonNode, String field) { private JsonNode readJsonNode(JsonNode jsonNode, String field) {

@ -78,6 +78,11 @@ public class User implements UserDetails, OAuth2User {
*/ */
private final Integer type; private final Integer type;
/**
*
*/
private final Integer salesmanType;
/** /**
* *
*/ */

@ -279,6 +279,7 @@ public class BallcatRemoteOpaqueTokenIntrospector implements OpaqueTokenIntrospe
.phoneNumber(getOrDefault(info, UserInfoFiledNameConstants.PHONE_NUMBER, "")) .phoneNumber(getOrDefault(info, UserInfoFiledNameConstants.PHONE_NUMBER, ""))
.gender(getOrDefault(info, UserInfoFiledNameConstants.GENDER, null)) .gender(getOrDefault(info, UserInfoFiledNameConstants.GENDER, null))
.type(getOrDefault(info, UserInfoFiledNameConstants.TYPE, null)) .type(getOrDefault(info, UserInfoFiledNameConstants.TYPE, null))
.salesmanType(getOrDefault(info, UserInfoFiledNameConstants.SALESMAN_TYPE, 0))
.status(getOrDefault(info, UserInfoFiledNameConstants.STATUS, null)); .status(getOrDefault(info, UserInfoFiledNameConstants.STATUS, null));
Collection<? extends GrantedAuthority> authorities = null; Collection<? extends GrantedAuthority> authorities = null;
@ -319,4 +320,4 @@ public class BallcatRemoteOpaqueTokenIntrospector implements OpaqueTokenIntrospe
return value == null ? defaultValue : (T) value; return value == null ? defaultValue : (T) value;
} }
} }

@ -69,6 +69,7 @@ public class BallcatOAuth2TokenResponseEnhancer implements OAuth2TokenResponseEn
sysUserInfo.setPhoneNumber(user.getPhoneNumber()); sysUserInfo.setPhoneNumber(user.getPhoneNumber());
sysUserInfo.setEmail(user.getEmail()); sysUserInfo.setEmail(user.getEmail());
sysUserInfo.setGender(user.getGender()); sysUserInfo.setGender(user.getGender());
sysUserInfo.setSalesmanType(user.getSalesmanType());
return sysUserInfo; return sysUserInfo;
} }

@ -83,6 +83,7 @@ public class SysUserDetailsServiceImpl implements UserDetailsService {
.phoneNumber(sysUser.getPhoneNumber()) .phoneNumber(sysUser.getPhoneNumber())
.gender(sysUser.getGender()) .gender(sysUser.getGender())
.type(sysUser.getType()) .type(sysUser.getType())
.salesmanType(userInfoDTO.getSalesmanType())
.authorities(authorities) .authorities(authorities)
.attributes(attributes) .attributes(attributes)
.build(); .build();

@ -2,6 +2,8 @@ package com.baiye.system.checker;
import com.baiye.system.model.entity.SysUser; import com.baiye.system.model.entity.SysUser;
import java.util.Set;
/** /**
* *
* *
@ -23,4 +25,11 @@ public interface AdminUserChecker {
*/ */
boolean hasModifyPermission(SysUser targetUser); boolean hasModifyPermission(SysUser targetUser);
/**
*
* @param roleIdSet
* @return
*/
boolean isSalesman(Set<Long> roleIdSet);
} }

@ -1,12 +1,17 @@
package com.baiye.system.checker; package com.baiye.system.checker;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import com.baiye.enums.SalesManEnum;
import com.baiye.security.util.SecurityUtils; import com.baiye.security.util.SecurityUtils;
import com.baiye.system.model.entity.SysUser; import com.baiye.system.model.entity.SysUser;
import com.baiye.system.properties.SystemProperties; import com.baiye.system.properties.SystemProperties;
import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Set;
/** /**
* *
* *
@ -37,4 +42,10 @@ public class AdminUserCheckerImpl implements AdminUserChecker {
return true; return true;
} }
@Override
public boolean isSalesman(Set<Long> roleIdSet) {
Set<Long> salesman = systemProperties.getSalesman();
return CollUtil.isNotEmpty(Sets.intersection(roleIdSet, salesman));
}
} }

@ -1,9 +1,12 @@
package com.baiye.system.properties; package com.baiye.system.properties;
import com.google.common.collect.Sets;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.Set;
/** /**
* *
* *
@ -22,6 +25,13 @@ public class SystemProperties {
*/ */
private Administrator administrator = new Administrator(); private Administrator administrator = new Administrator();
/**
*
*
*/
private Set<Long> salesman = Sets.newHashSet(19L, 20L, 21L);
/** /**
* *
*/ */
@ -31,16 +41,20 @@ public class SystemProperties {
@Setter @Setter
public static class Administrator { public static class Administrator {
/** /**
* id * id
*/ */
private int userId = 0; private int userId = 1;
/** /**
* username * username
*/ */
private String username; private String username;
} }
} }

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baiye.enums.SalesManEnum;
import com.baiye.exception.BadRequestException; import com.baiye.exception.BadRequestException;
import com.baiye.system.checker.AdminUserChecker; import com.baiye.system.checker.AdminUserChecker;
import com.baiye.system.converter.SysUserConverter; import com.baiye.system.converter.SysUserConverter;
@ -36,6 +37,7 @@ import com.baiye.system.model.vo.SysUserPageVO;
import com.baiye.system.service.SysRoleService; import com.baiye.system.service.SysRoleService;
import com.baiye.system.service.SysUserService; import com.baiye.system.service.SysUserService;
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -75,10 +77,12 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
private final FileProperties fileProperties; private final FileProperties fileProperties;
/** /**
* QueryObject * QueryObject
*
* @param pageParam * @param pageParam
* @param qo * @param qo
* @return PageResult<SysUserVO> * @return PageResult<SysUserVO>
*/ */
@Override @Override
@ -88,7 +92,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
List<SysUser> sysUsers = baseMapper.selectList(new LambdaQueryWrapper<>()); List<SysUser> sysUsers = baseMapper.selectList(new LambdaQueryWrapper<>());
List<SysUserPageVO> userAll = Convert.toList(SysUserPageVO.class, sysUsers); List<SysUserPageVO> userAll = Convert.toList(SysUserPageVO.class, sysUsers);
Map<Long, List<SysUserPageVO>> userGroup = userAll.stream() Map<Long, List<SysUserPageVO>> userGroup = userAll.stream()
.collect(Collectors.groupingBy(SysUserPageVO::getWhichUserId)); .collect(Collectors.groupingBy(SysUserPageVO::getWhichUserId));
result.getRecords().forEach(user -> { result.getRecords().forEach(user -> {
List<SysUserPageVO> byWhichUserId = userGroup.get(user.getUserId()); List<SysUserPageVO> byWhichUserId = userGroup.get(user.getUserId());
@ -106,6 +110,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
*
* @param username * @param username
* @return * @return
*/ */
@ -116,6 +121,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
*
* @param sysUser * @param sysUser
* @return * @return
*/ */
@ -123,15 +129,27 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
public UserInfoDTO findUserInfo(SysUser sysUser) { public UserInfoDTO findUserInfo(SysUser sysUser) {
UserInfoDTO userInfoDTO = new UserInfoDTO(); UserInfoDTO userInfoDTO = new UserInfoDTO();
userInfoDTO.setSysUser(sysUser); userInfoDTO.setSysUser(sysUser);
userInfoDTO.setSalesmanType(0);
Boolean isAdmin = Boolean.FALSE;
// 超级管理员拥有所有角色 // 超级管理员拥有所有角色
List<SysRole> roleList; List<SysRole> roleList;
if (adminUserChecker.isAdminUser(sysUser)) { if (adminUserChecker.isAdminUser(sysUser)) {
roleList = sysRoleService.list(); roleList = sysRoleService.list();
} isAdmin = Boolean.TRUE;
else { } else {
roleList = sysUserRoleService.listRoles(sysUser.getUserId()); roleList = sysUserRoleService.listRoles(sysUser.getUserId());
} }
// 判断用户角色
Set<Long> roleIdSet = roleList.stream().map(SysRole::getId).collect(Collectors.toSet());
if (Boolean.FALSE.equals(isAdmin)
&& adminUserChecker.isSalesman(roleIdSet)) {
for (Long id : roleIdSet) {
if (SalesManEnum.find(id) > 0) {
userInfoDTO.setSalesmanType(SalesManEnum.find(id));
break;
}
}
}
// 设置角色标识 // 设置角色标识
Set<String> roleCodes = new HashSet<>(); Set<String> roleCodes = new HashSet<>();
@ -148,9 +166,9 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
List<SysMenu> sysMenuList = sysMenuService.listByRoleCode(roleCode); List<SysMenu> sysMenuList = sysMenuService.listByRoleCode(roleCode);
menus.addAll(sysMenuList); menus.addAll(sysMenuList);
List<String> permissionList = sysMenuList.stream() List<String> permissionList = sysMenuList.stream()
.map(SysMenu::getPermission) .map(SysMenu::getPermission)
.filter(StrUtil::isNotEmpty) .filter(StrUtil::isNotEmpty)
.collect(Collectors.toList()); .collect(Collectors.toList());
permissions.addAll(permissionList); permissions.addAll(permissionList);
} }
userInfoDTO.setMenus(menus); userInfoDTO.setMenus(menus);
@ -161,6 +179,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* AOP{SysUserAspect} * AOP{SysUserAspect}
*
* @param sysUserDto DTO * @param sysUserDto DTO
* @return true , false * @return true , false
*/ */
@ -199,6 +218,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
*
* @param sysUserDTO DTO * @param sysUserDTO DTO
* @return true: false * @return true: false
*/ */
@ -227,7 +247,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
// 如果修改了组织且修改成功,则发送用户组织更新事件 // 如果修改了组织且修改成功,则发送用户组织更新事件
if (isUpdateSuccess && organizationIdModified) { if (isUpdateSuccess && organizationIdModified) {
publisher publisher
.publishEvent(new UserOrganizationChangeEvent(userId, originOrganizationId, currentOrganizationId)); .publishEvent(new UserOrganizationChangeEvent(userId, originOrganizationId, currentOrganizationId));
} }
return isUpdateSuccess; return isUpdateSuccess;
@ -235,7 +255,8 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
* @param userId Id *
* @param userId Id
* @param sysUserScope * @param sysUserScope
* @return true * @return true
*/ */
@ -248,6 +269,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* userId * userId
*
* @param userId ID * @param userId ID
* @return true * @return true
*/ */
@ -271,7 +293,8 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
* @param userId ID *
* @param userId ID
* @param rawPassword * @param rawPassword
* @return true * @return true
*/ */
@ -285,6 +308,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
*
* @param userIds ID * @param userIds ID
* @return true * @return true
*/ */
@ -296,7 +320,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
// 移除无权限更改的用户id // 移除无权限更改的用户id
Map<Long, SysUser> userMap = userList.stream() Map<Long, SysUser> userMap = userList.stream()
.collect(Collectors.toMap(SysUser::getUserId, Function.identity())); .collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
userIds.removeIf(id -> !adminUserChecker.hasModifyPermission(userMap.get(id))); userIds.removeIf(id -> !adminUserChecker.hasModifyPermission(userMap.get(id)));
Assert.notEmpty(userIds, "更新用户状态失败,无权限更新用户"); Assert.notEmpty(userIds, "更新用户状态失败,无权限更新用户");
@ -328,6 +352,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
*
* @param roleCode * @param roleCode
* @return * @return
*/ */
@ -338,6 +363,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
*
* @param roleCodes * @param roleCodes
* @return List<SysUser> * @return List<SysUser>
*/ */
@ -348,6 +374,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* ID * ID
*
* @param organizationIds id * @param organizationIds id
* @return * @return
*/ */
@ -358,6 +385,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
*
* @param userTypes * @param userTypes
* @return * @return
*/ */
@ -368,6 +396,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* Id * Id
*
* @param userIds Id * @param userIds Id
* @return * @return
*/ */
@ -379,8 +408,9 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* select name=> username value => userId * select name=> username value => userId
* @return List<SelectData> *
* @param userTypes * @param userTypes
* @return List<SelectData>
*/ */
@Override @Override
public List<SelectData<Void>> listSelectData(Collection<Integer> userTypes) { public List<SelectData<Void>> listSelectData(Collection<Integer> userTypes) {
@ -389,6 +419,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* Code * Code
*
* @param userId id * @param userId id
* @return List<String> * @return List<String>
*/ */
@ -399,6 +430,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
/** /**
* *
*
* @param organizationId id * @param organizationId id
* @return boolean true * @return boolean true
*/ */

@ -0,0 +1,14 @@
package com.baiye.system.constant;
/**
* @author Enzo
* @date : 2022/8/4
*/
public class DateConst {
private DateConst(){
}
public static final String YYYY_MM_DD = "yyyyMMdd";
}

@ -0,0 +1,17 @@
package com.baiye.system.constant;
/**
* @author Enzo
* @date : 2022/8/4
*/
public class LetterConst {
private LetterConst(){
}
public static final String D = "D";
public static final String ONE = "01";
}

@ -48,4 +48,11 @@ public class UserInfoDTO {
@Schema(title = "角色对象集合") @Schema(title = "角色对象集合")
private Collection<SysRole> roles; private Collection<SysRole> roles;
/**
*
*/
@Schema(title = "业务员类型")
private Integer salesmanType;
} }

@ -71,4 +71,12 @@ public class SysUserInfo implements Serializable {
@Schema(title = "用户类型1-系统用户2-客户用户") @Schema(title = "用户类型1-系统用户2-客户用户")
private Integer type; private Integer type;
/**
*
*/
@Schema(title = "业务员类型")
private Integer salesmanType;
} }

@ -16,7 +16,6 @@
</properties> </properties>
<dependencies> <dependencies>
<!-- 基于 spring authorization server 的授权服务器 --> <!-- 基于 spring authorization server 的授权服务器 -->
<dependency> <dependency>
<groupId>com.baiye</groupId> <groupId>com.baiye</groupId>
@ -103,6 +102,30 @@
<artifactId>easyexcel</artifactId> <artifactId>easyexcel</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
@ -121,4 +144,4 @@
</plugins> </plugins>
</build> </build>
</project> </project>

@ -1,14 +1,19 @@
package com.baiye.modules.distribute.controller; package com.baiye.modules.distribute.controller;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.domain.PageParam; import com.baiye.domain.PageParam;
import com.baiye.domain.PageResult; import com.baiye.domain.PageResult;
import com.baiye.modules.distribute.dto.ChangeCustomDTO;
import com.baiye.modules.distribute.dto.CustomDTO; import com.baiye.modules.distribute.dto.CustomDTO;
import com.baiye.modules.distribute.qo.CustomQo; import com.baiye.modules.distribute.qo.CustomQo;
import com.baiye.modules.distribute.service.CustomService; import com.baiye.modules.distribute.service.CustomService;
import com.baiye.modules.distribute.vo.CustomVO; import com.baiye.modules.distribute.vo.CustomVO;
import com.baiye.operation.annotation.DeleteOperationLogging;
import com.baiye.result.BaseResultCode; import com.baiye.result.BaseResultCode;
import com.baiye.result.R; import com.baiye.result.R;
import com.baiye.security.util.SecurityUtils; import com.baiye.security.util.SecurityUtils;
import com.baiye.system.checker.AdminUserChecker;
import com.baiye.system.service.SysUserService;
import com.baiye.validation.group.CreateGroup; import com.baiye.validation.group.CreateGroup;
import com.baiye.validation.group.UpdateGroup; import com.baiye.validation.group.UpdateGroup;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -17,6 +22,10 @@ import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
/**
* @author Enzo
* @date
*/
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@Tag(name = "客户管理") @Tag(name = "客户管理")
@ -25,28 +34,72 @@ public class CustomController {
private final CustomService customService; private final CustomService customService;
private final SysUserService sysUserService;
private final AdminUserChecker adminUserChecker;
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "分页查询客户信息") @Operation(summary = "分页查询客户信息")
public R<PageResult<CustomVO>> queryPage(@Validated PageParam pageParam, CustomQo qo) { public R<PageResult<CustomVO>> queryPage(@Validated PageParam pageParam, CustomQo qo) {
qo.setCreateBy(SecurityUtils.getCurrentUserId()); // 查询属于自己的信息
if (!adminUserChecker.isAdminUser(sysUserService.findById
(SecurityUtils.getCurrentUserId()))) {
qo.setCompanyId(SecurityUtils.getWhichUserId());
}
if (ObjectUtil.isNotNull(qo.getSalesmanType()) && qo.getSalesmanType() == 1) {
// 查询当前用户自己的
qo.setSalesmanType(null);
qo.setCreateBy(SecurityUtils.getCurrentUserId());
}
return R.ok(customService.queryPage(pageParam, qo)); return R.ok(customService.queryPage(pageParam, qo));
} }
@PostMapping("/add") @PostMapping("/add")
@Operation(summary = "新增客户", description = "新增客户") @Operation(summary = "新增客户", description = "新增客户")
public R<Object> save(@Validated({ CreateGroup.class }) @RequestBody CustomDTO customDTO) { public R<Object> save(@Validated({CreateGroup.class}) @RequestBody CustomDTO customDTO) {
return customService.add(customDTO) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "添加失败"); return customService.add(customDTO) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "添加失败");
} }
@PostMapping("/update") @PostMapping("/update")
@Operation(summary = "修改客户", description = "修改客户") @Operation(summary = "修改客户", description = "修改客户")
public R<Object> update(@Validated({ UpdateGroup.class }) @RequestBody CustomDTO customDTO) { public R<Object> update(@Validated({UpdateGroup.class}) @RequestBody CustomDTO customDTO) {
return customService.update(customDTO) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败"); return customService.update(customDTO) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败");
} }
@GetMapping("/details") @GetMapping("/details")
@Operation(summary = "ID查询详情") @Operation(summary = "ID查询详情")
public R<CustomVO> getClueDetails(@RequestParam("id") Long id) { public R<CustomVO> getClueDetails(@RequestParam("id") Long id) {
return R.ok(customService.details(id)); return R.ok(customService.details(id));
} }
/**
*
*
* @param id id
* @return
*/
@DeleteMapping("/{id}")
@DeleteOperationLogging(msg = "删除表单信息")
@Operation(summary = "通过id删除系统角色", description = "通过id删除系统角色")
public R<Boolean> removeById(@PathVariable("id") Long id) {
Boolean result = customService.deleteApprovalFormById(id);
return Boolean.TRUE.equals(result) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "删除表单失败");
}
/**
*
*
* @param dto
* @return
*/
@PostMapping("/audit")
@Operation(summary = "审核表单")
public R<Boolean> audit(@Validated({UpdateGroup.class}) @RequestBody ChangeCustomDTO dto) {
Boolean result = customService.auditFormById(dto);
return Boolean.TRUE.equals(result) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "审核失败");
}
} }

@ -0,0 +1,15 @@
package com.baiye.modules.distribute.dto;
import lombok.Data;
/**
* @author Enzo
* @date
*/
@Data
public class ChangeCustomDTO {
private Long customId;
private Integer status;
}

@ -2,7 +2,10 @@ package com.baiye.modules.distribute.dto;
import com.baiye.modules.distribute.entity.LabelEntity; import com.baiye.modules.distribute.entity.LabelEntity;
import com.baiye.validation.group.UpdateGroup; import com.baiye.validation.group.UpdateGroup;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@ -13,6 +16,7 @@ import java.util.List;
* @Date 2023/8/10 * @Date 2023/8/10
*/ */
@Data @Data
@Builder
public class ClueDTO { public class ClueDTO {
@Schema(title = "线索ID") @Schema(title = "线索ID")
@ -54,6 +58,10 @@ public class ClueDTO {
@Schema(title = "资源线索名称") @Schema(title = "资源线索名称")
private String clueStageName; private String clueStageName;
@Schema(title = "创建者")
private Long createBy;
@Schema(title = "资源标签集合") @Schema(title = "资源标签集合")
private List<LabelEntity> clueLabelList; private List<LabelEntity> clueLabelList;

@ -17,6 +17,7 @@ public class CustomDTO {
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class }) @NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
private Long customId; private Long customId;
@Schema(title = "客户名称") @Schema(title = "客户名称")
@NotNull(message = "客户名称不能为空", groups = { CreateGroup.class }) @NotNull(message = "客户名称不能为空", groups = { CreateGroup.class })
private String customName; private String customName;
@ -47,7 +48,7 @@ public class CustomDTO {
@Schema(title = "报名状态 0:待提交 1:已报名") @Schema(title = "报名状态 0:待提交 1:已报名")
@NotNull(message = "状态不能为空", groups = { CreateGroup.class }) @NotNull(message = "状态不能为空", groups = { CreateGroup.class })
private String enrollStatus; private Integer enrollStatus;
@Schema(title = "门店信息") @Schema(title = "门店信息")
@NotEmpty(message = "门店信息不能为空", groups = { CreateGroup.class }) @NotEmpty(message = "门店信息不能为空", groups = { CreateGroup.class })

@ -29,5 +29,5 @@ public class CustomStoreDTO {
@Schema(title = "预约时间") @Schema(title = "预约时间")
@NotNull(message = "预约时间不能为空", groups = { CreateGroup.class }) @NotNull(message = "预约时间不能为空", groups = { CreateGroup.class })
private LocalDateTime reservationTime; private String reservationTime;
} }

@ -13,6 +13,9 @@ import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/**
* @author Enzo
*/
@Getter @Getter
@Setter @Setter
@TableName("tb_custom") @TableName("tb_custom")
@ -23,6 +26,9 @@ public class CustomEntity extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Schema(description = "编号")
private String batchNo;
@TableId @TableId
@Schema(title = "ID") @Schema(title = "ID")
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class }) @NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
@ -56,7 +62,19 @@ public class CustomEntity extends BaseEntity {
@NotNull(message = "半径不能为空", groups = { CreateGroup.class }) @NotNull(message = "半径不能为空", groups = { CreateGroup.class })
private String radius; private String radius;
@Schema(title = "报名状态 0:待提交 1:已报名") @Schema(title = "报名状态 0:待提交 1:已报名 2 审核通过")
@NotNull(message = "状态不能为空", groups = { CreateGroup.class }) @NotNull(message = "状态不能为空", groups = { CreateGroup.class })
private Integer enrollStatus; private Integer enrollStatus;
@Schema(description = "审核类型 2初审 3复审")
private Integer type;
@Schema(description = "公司id")
private Long companyId;
@Schema(description = "录入员姓名")
private String enterName;
} }

@ -12,6 +12,7 @@ import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date;
@Getter @Getter
@Setter @Setter

@ -14,6 +14,9 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
/**
*
*/
public interface CustomMapper extends ExtendMapper<CustomEntity> { public interface CustomMapper extends ExtendMapper<CustomEntity> {
default PageResult<CustomVO> queryPage(PageParam pageParam, CustomQo qo) { default PageResult<CustomVO> queryPage(PageParam pageParam, CustomQo qo) {
IPage<CustomVO> page = this.prodPage(pageParam); IPage<CustomVO> page = this.prodPage(pageParam);
@ -21,6 +24,8 @@ public interface CustomMapper extends ExtendMapper<CustomEntity> {
LambdaAliasQueryWrapperX<CustomEntity> wrapperX = WrappersX.lambdaAliasQueryX(CustomEntity.class); LambdaAliasQueryWrapperX<CustomEntity> wrapperX = WrappersX.lambdaAliasQueryX(CustomEntity.class);
wrapperX.eqIfPresent(CustomEntity::getCreateBy, qo.getCreateBy()) wrapperX.eqIfPresent(CustomEntity::getCreateBy, qo.getCreateBy())
.likeIfPresent(CustomEntity::getCustomName, qo.getCustomName()) .likeIfPresent(CustomEntity::getCustomName, qo.getCustomName())
.eqIfPresent(CustomEntity::getCustomId,qo.getCompanyId())
.eqIfPresent(CustomEntity::getType,qo.getSalesmanType())
.eqIfPresent(CustomEntity::getCustomNid, qo.getCustomNid()) .eqIfPresent(CustomEntity::getCustomNid, qo.getCustomNid())
.eqIfPresent(CustomEntity::getEnrollStatus, qo.getEnrollStatus()) .eqIfPresent(CustomEntity::getEnrollStatus, qo.getEnrollStatus())
.orderByDesc(CustomEntity::getCreateTime); .orderByDesc(CustomEntity::getCreateTime);
@ -33,4 +38,13 @@ public interface CustomMapper extends ExtendMapper<CustomEntity> {
} }
IPage<CustomVO> selectByPage(IPage<CustomVO> page, @Param(Constants.WRAPPER) Wrapper<CustomEntity> wrapper); IPage<CustomVO> selectByPage(IPage<CustomVO> page, @Param(Constants.WRAPPER) Wrapper<CustomEntity> wrapper);
/**
*
* @param code
* @param companyId
* @return
*/
String selectMaxBatchNoByCompanyId(@Param("code") String code,@Param("companyId") Long companyId);
} }

@ -16,8 +16,8 @@ public class CustomQo {
@Parameter(description = "客户联系方式") @Parameter(description = "客户联系方式")
private String customNid; private String customNid;
@Parameter(description = "报名状态 0:待提交 1:已报名") @Parameter(description = "报名状态 0:待提交 1:已报名 2以通过")
private String enrollStatus; private Integer enrollStatus;
@Schema(title = "创建者") @Schema(title = "创建者")
private Long createBy; private Long createBy;
@ -27,4 +27,11 @@ public class CustomQo {
@Parameter(description = "结束时间") @Parameter(description = "结束时间")
private String endTime; private String endTime;
@Parameter(description = "公司id")
private Long companyId;
@Schema(title = "审核类型 1录入员 2初审 3复审")
private Integer salesmanType;
} }

@ -37,4 +37,10 @@ public interface ClueService extends ExtendService<ClueEntity> {
*/ */
ClueVO details(Long clueId, ClueQo qo); ClueVO details(Long clueId, ClueQo qo);
/**
*
* @param list
* @return
*/
Boolean saveClueListByStoreInfo(List<ClueDTO> list);
} }

@ -3,30 +3,61 @@ package com.baiye.modules.distribute.service;
import com.baiye.domain.PageParam; import com.baiye.domain.PageParam;
import com.baiye.domain.PageResult; import com.baiye.domain.PageResult;
import com.baiye.extend.mybatis.plus.service.ExtendService; import com.baiye.extend.mybatis.plus.service.ExtendService;
import com.baiye.modules.distribute.dto.ChangeCustomDTO;
import com.baiye.modules.distribute.dto.CustomDTO; import com.baiye.modules.distribute.dto.CustomDTO;
import com.baiye.modules.distribute.entity.CustomEntity; import com.baiye.modules.distribute.entity.CustomEntity;
import com.baiye.modules.distribute.qo.CustomQo; import com.baiye.modules.distribute.qo.CustomQo;
import com.baiye.modules.distribute.vo.CustomVO; import com.baiye.modules.distribute.vo.CustomVO;
/**
* @author Enzo
* @date
*/
public interface CustomService extends ExtendService<CustomEntity> { public interface CustomService extends ExtendService<CustomEntity> {
/** /**
* *
* @param pageParam
* @param qo
* @return
*/ */
PageResult<CustomVO> queryPage(PageParam pageParam, CustomQo qo); PageResult<CustomVO> queryPage(PageParam pageParam, CustomQo qo);
/** /**
* *
* @param customDTO
* @return
*/ */
boolean add(CustomDTO customDTO); boolean add(CustomDTO customDTO);
/** /**
* *
* @param customDTO
* @return
*/ */
boolean update(CustomDTO customDTO); boolean update(CustomDTO customDTO);
/** /**
* ID *
* @param id
* @return
*/ */
CustomVO details(Long id); CustomVO details(Long id);
/**
*
* @param id
* @return
*/
Boolean deleteApprovalFormById(Long id);
/**
*
*
* @param dto
* @return
*/
Boolean auditFormById(ChangeCustomDTO dto);
} }

@ -15,4 +15,18 @@ public interface CustomStoreService extends ExtendService<CustomStoreEntity> {
* @return * @return
*/ */
Map<Long, Integer> countReservationByStoreIds(List<Long> storeIds); Map<Long, Integer> countReservationByStoreIds(List<Long> storeIds);
/**
*
* @param id
* @return
*/
Boolean deleteByCustomId(Long id);
/**
* id
* @param customId
* @return
*/
List<CustomStoreEntity> selectListByCustomId(Long customId);
} }

@ -1,6 +1,7 @@
package com.baiye.modules.distribute.service.impl; package com.baiye.modules.distribute.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.json.JSONArray; import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baiye.domain.PageParam; import com.baiye.domain.PageParam;
@ -165,4 +166,10 @@ public class ClueServiceImpl extends ExtendServiceImpl<ClueMapper, ClueEntity> i
return clueVO; return clueVO;
} }
@Override
public Boolean saveClueListByStoreInfo(List<ClueDTO> list) {
List<ClueEntity> entityList = Convert.toList(ClueEntity.class, list);
return SqlHelper.retBool(baseMapper.insertBatchSomeColumn(entityList));
}
} }

@ -1,48 +1,92 @@
package com.baiye.modules.distribute.service.impl; package com.baiye.modules.distribute.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.domain.PageParam; import com.baiye.domain.PageParam;
import com.baiye.domain.PageResult; import com.baiye.domain.PageResult;
import com.baiye.enums.ClueSourceEnum;
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import com.baiye.modules.distribute.converter.CustomConverter; import com.baiye.modules.distribute.converter.CustomConverter;
import com.baiye.modules.distribute.dto.ChangeCustomDTO;
import com.baiye.modules.distribute.dto.ClueDTO;
import com.baiye.modules.distribute.dto.CustomDTO; import com.baiye.modules.distribute.dto.CustomDTO;
import com.baiye.modules.distribute.entity.CustomEntity; import com.baiye.modules.distribute.entity.CustomEntity;
import com.baiye.modules.distribute.entity.CustomStoreEntity; import com.baiye.modules.distribute.entity.CustomStoreEntity;
import com.baiye.modules.distribute.mapper.CustomMapper; import com.baiye.modules.distribute.mapper.CustomMapper;
import com.baiye.modules.distribute.mapper.CustomStoreMapper; import com.baiye.modules.distribute.mapper.CustomStoreMapper;
import com.baiye.modules.distribute.qo.CustomQo; import com.baiye.modules.distribute.qo.CustomQo;
import com.baiye.modules.distribute.service.ClueService;
import com.baiye.modules.distribute.service.CustomService; import com.baiye.modules.distribute.service.CustomService;
import com.baiye.modules.distribute.service.CustomStoreService; import com.baiye.modules.distribute.service.CustomStoreService;
import com.baiye.modules.distribute.vo.AddressDTO;
import com.baiye.modules.distribute.vo.CustomStoreVO;
import com.baiye.modules.distribute.vo.CustomVO; import com.baiye.modules.distribute.vo.CustomVO;
import com.baiye.security.userdetails.User;
import com.baiye.security.util.SecurityUtils;
import com.baiye.system.constant.DateConst;
import com.baiye.system.constant.LetterConst;
import com.baiye.util.AESUtils;
import com.baiye.utils.SerialCode;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.ballcat.security.properties.SecurityProperties;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**
* @author Enzo
* @date
*/
@Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class CustomServiceImpl extends ExtendServiceImpl<CustomMapper, CustomEntity> implements CustomService { public class CustomServiceImpl extends ExtendServiceImpl<CustomMapper, CustomEntity> implements CustomService {
private final CustomStoreService customStoreService; private final CustomStoreService customStoreService;
private final SecurityProperties securityProperties;
private final CustomStoreMapper customStoreMapper; private final CustomStoreMapper customStoreMapper;
private final ClueService clueService;
@Override @Override
public PageResult<CustomVO> queryPage(PageParam pageParam, CustomQo qo) { public PageResult<CustomVO> queryPage(PageParam pageParam, CustomQo qo) {
return baseMapper.queryPage(pageParam, qo); return baseMapper.queryPage(pageParam, qo);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean add(CustomDTO customDTO) { public boolean add(CustomDTO customDTO) {
User user = SecurityUtils.getUser();
Long companyId = user.getWhichUserId();
CustomEntity customEntity = CustomConverter.INSTANCE.dtoToPo(customDTO); CustomEntity customEntity = CustomConverter.INSTANCE.dtoToPo(customDTO);
String code = LetterConst.D.concat(StrPool.DASHED.concat(DateUtil.format(DateUtil.date(), DateConst.YYYY_MM_DD)));
String maxCode = baseMapper.selectMaxBatchNoByCompanyId(code, companyId);
// 拼接编号
String newCode = StringUtils.isNotBlank(maxCode) ?
code.concat(SerialCode.getNum(Integer.parseInt
(maxCode.substring(10)))) : code.concat(LetterConst.ONE);
customEntity.setType(2);
customEntity.setBatchNo(newCode);
customEntity.setCompanyId(companyId);
int insert = baseMapper.insert(customEntity); int insert = baseMapper.insert(customEntity);
customEntity.setEnterName(user.getUsername());
List<CustomStoreEntity> customStoreEntities = customDTO.getCustomStoreEntities(); List<CustomStoreEntity> customStoreEntities = customDTO.getCustomStoreEntities();
customStoreEntities.forEach(c -> c.setCustomId(customEntity.getCustomId())); customStoreEntities.forEach(c -> c.setCustomId(customEntity.getCustomId()));
customStoreService.saveBatch(customStoreEntities); customStoreService.saveBatch(customStoreEntities);
@ -86,17 +130,57 @@ public class CustomServiceImpl extends ExtendServiceImpl<CustomMapper, CustomEnt
CustomVO customVO = new CustomVO(); CustomVO customVO = new CustomVO();
CustomEntity customEntity = baseMapper.selectById(id); CustomEntity customEntity = baseMapper.selectById(id);
BeanUtils.copyProperties(customEntity, customVO); BeanUtils.copyProperties(customEntity, customVO);
// TODO 详情查询门店信息 List<CustomStoreVO> customStoreVOList = new ArrayList<>();
// List<CustomStoreVO> customStoreVOList = new ArrayList<>(); List<CustomStoreEntity> customStores = customStoreService.selectListByCustomId(id);
// List<CustomStoreEntity> customStores = customStoreMapper.selectList(new LambdaQueryWrapper<CustomStoreEntity>().eq(CustomStoreEntity::getCustomId, id)); if (CollUtil.isNotEmpty(customStores)) {
// if (CollUtil.isNotEmpty(customStores)){ for (CustomStoreEntity customStore : customStores) {
// for (CustomStoreEntity customStore : customStores) { CustomStoreVO customStoreVO = new CustomStoreVO();
// CustomStoreVO customStoreVO = new CustomStoreVO(); BeanUtils.copyProperties(customStore, customStoreVO);
// BeanUtils.copyProperties(customStore, customStoreVO); customStoreVOList.add(customStoreVO);
// customStoreVOList.add(customStoreVO); }
// } }
// } customVO.setCustomStoreVOList(customStoreVOList);
// customVO.setCustomStoreVOList(customStoreVOList);
return customVO; return customVO;
} }
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteApprovalFormById(Long id) {
Boolean result = customStoreService.deleteByCustomId(id);
log.info("========================= delete result as {} =========================", result);
return SqlHelper.retBool(baseMapper.deleteById(id));
}
@Override
public Boolean auditFormById(ChangeCustomDTO dto) {
Long id = dto.getCustomId();
Integer status = dto.getStatus();
CustomEntity customEntity = baseMapper.selectById(id);
if (ObjectUtil.isNotNull(customEntity)) {
if (ObjectUtil.isNotNull(status) && status == 0) {
customEntity.setType(3);
return SqlHelper.retBool(baseMapper.updateById(customEntity));
}
Gson gson = new Gson();
AddressDTO address = new AddressDTO();
List<ClueDTO> list = Lists.newArrayList();
BeanUtils.copyProperties(customEntity, address);
String otherClue = gson.toJson(address);
List<CustomStoreEntity> customStores = customStoreService.selectListByCustomId(id);
if (CollUtil.isNotEmpty(customStores)) {
for (CustomStoreEntity store : customStores) {
ClueDTO clueDTO = ClueDTO.builder().originName(ClueSourceEnum.STORE_DISTRIBUTION.getDescription()).nid
(AESUtils.encrypt(customEntity.getCustomNid(), securityProperties.getPasswordSecretKey())).assignedBy
(store.getStoreId()).createBy(customEntity.getCompanyId()).assignedName(store.getStoreName()).otherClue(otherClue).build();
list.add(clueDTO);
}
clueService.saveClueListByStoreInfo(list);
customEntity.setEnrollStatus(2);
return SqlHelper.retBool(baseMapper.updateById(customEntity));
}
}
return Boolean.FALSE;
}
} }

@ -5,14 +5,31 @@ import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import com.baiye.modules.distribute.entity.CustomStoreEntity; import com.baiye.modules.distribute.entity.CustomStoreEntity;
import com.baiye.modules.distribute.mapper.CustomStoreMapper; import com.baiye.modules.distribute.mapper.CustomStoreMapper;
import com.baiye.modules.distribute.service.CustomStoreService; import com.baiye.modules.distribute.service.CustomStoreService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
public class CustomStoreServiceImpl extends ExtendServiceImpl<CustomStoreMapper, CustomStoreEntity> implements CustomStoreService { public class CustomStoreServiceImpl extends ExtendServiceImpl<CustomStoreMapper, CustomStoreEntity> implements CustomStoreService {
@Override
public Boolean deleteByCustomId(Long id) {
return SqlHelper.retBool(baseMapper.delete
(Wrappers.<CustomStoreEntity>lambdaQuery().eq
(CustomStoreEntity::getCustomId, id)));
}
@Override
public List<CustomStoreEntity> selectListByCustomId(Long customId) {
return baseMapper.selectList
(Wrappers.<CustomStoreEntity>lambdaQuery().eq(CustomStoreEntity::getCustomId, customId));
}
@Override @Override

@ -0,0 +1,26 @@
package com.baiye.modules.distribute.vo;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
/**
* @author Enzo
* @date : 2023/9/12
*/
@Data
public class AddressDTO {
@SerializedName("省份")
private String economize;
@SerializedName("城市")
private String market;
@SerializedName("区域")
private String distinguish;
@SerializedName("详细地址")
private String detailAddress;
}

@ -21,5 +21,5 @@ public class CustomStoreVO {
private String storeName; private String storeName;
@Schema(title = "预约时间") @Schema(title = "预约时间")
private LocalDateTime reservationTime; private String reservationTime;
} }

@ -9,6 +9,10 @@ import java.util.List;
@Data @Data
public class CustomVO { public class CustomVO {
@Schema(description = "编号")
private String batchNo;
@Schema(title = "ID") @Schema(title = "ID")
private Long customId; private Long customId;
@ -41,4 +45,10 @@ public class CustomVO {
@Schema(title = "门店信息") @Schema(title = "门店信息")
private List<CustomStoreVO> customStoreVOList; private List<CustomStoreVO> customStoreVOList;
@Schema(description = "审核类型 1初审 2复审")
private Integer type;
@Schema(description = "公司id")
private Long companyId;
} }

@ -1,6 +1,5 @@
package com.baiye.modules.distribute.vo; package com.baiye.modules.distribute.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

@ -0,0 +1,25 @@
package com.baiye.utils;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author Enzo
* @date : 2023/9/8
*/
public class SerialCode {
/**
*
* 1 HSJC-yyyyMMdd01
* 21
*
* @param code
*/
public static String getNum(Integer code) {
AtomicInteger intCode = new AtomicInteger(code);
int andIncrement = intCode.incrementAndGet();
int length = String.valueOf(code).length() + 1;
return String.format("%0".concat(String.valueOf(length).concat("d")), andIncrement);
}
}

@ -22,4 +22,11 @@
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
</mapper> <select id="selectMaxBatchNoByCompanyId" resultType="java.lang.String">
select max(batch_no)
from tb_custom
where batch_no like concat(#{code}, '%')
and company_id = #{companyId}
</select>
</mapper>

@ -0,0 +1,74 @@
import cn.hutool.json.JSONUtil;
import com.baiye.AdminApplication;
import com.baiye.modules.distribute.dto.CustomDTO;
import com.baiye.modules.distribute.entity.CustomStoreEntity;
import com.baiye.modules.distribute.service.CustomService;
import com.baiye.modules.distribute.vo.AddressDTO;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
/**
* @author Enzo
* @date : 2022/9/23
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AdminApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class CustomTest {
@Resource
private CustomService customService;
@Test
public void saveRecord() {
CustomDTO customDTO = new CustomDTO();
List<CustomStoreEntity> newed = Lists.newArrayList();
customDTO.setCustomName("xXX");
customDTO.setCustomNid("12345678");
customDTO.setEconomize("浙江");
customDTO.setMarket("丽水");
customDTO.setDistinguish("皇后区");
customDTO.setDetailAddress("xxxxxx168");
customDTO.setRadius("18.1923");
customDTO.setEnrollStatus(1);
CustomStoreEntity store = new CustomStoreEntity();
store.setStoreId(1111L);
store.setStoreName("xxxx");
store.setReservationTime("");
newed.add(store);
customDTO.setCustomStoreEntities(newed);
customService.add(customDTO);
}
@Test
public void audit() {
}
@Test
public void json(){
Gson gson = new Gson();
AddressDTO addressDTO = new AddressDTO();
addressDTO.setDetailAddress("xxx");
addressDTO.setDistinguish("xxx");
addressDTO.setEconomize("xxx");
addressDTO.setMarket("xxx");
String jsonStr = JSONUtil.toJsonStr(addressDTO);
System.out.println(gson.toJson(addressDTO));
System.out.println(jsonStr);
}
}

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.baiye</groupId> <groupId>com.baiye</groupId>
<artifactId>ad-distribute</artifactId> <artifactId>ad-distribute</artifactId>
<version>1.1.0</version> <version>1.1.0</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <modules>
@ -17,7 +17,7 @@
<module>ad-distribute-extends</module> <module>ad-distribute-extends</module>
</modules> </modules>
<properties> <properties>
<revision>1.4.0</revision> <revision>1.4.0</revision>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@ -67,7 +67,7 @@
<protobuf-maven.version>0.6.1</protobuf-maven.version> <protobuf-maven.version>0.6.1</protobuf-maven.version>
<os-maven.version>1.7.1</os-maven.version> <os-maven.version>1.7.1</os-maven.version>
<protobuf.javax.annotation.version>1.3.2</protobuf.javax.annotation.version> <protobuf.javax.annotation.version>1.3.2</protobuf.javax.annotation.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
@ -128,12 +128,6 @@
<version>${fastjson.version}</version> <version>${fastjson.version}</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<!-- 支付宝支付 -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>${alipay-sdk.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId> <artifactId>mybatis-plus-annotation</artifactId>
@ -166,17 +160,6 @@
<artifactId>nimbus-jose-jwt</artifactId> <artifactId>nimbus-jose-jwt</artifactId>
<version>9.15.2</version> <version>9.15.2</version>
</dependency> </dependency>
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>oauth2-oidc-sdk</artifactId>
<version>9.20</version>
</dependency>
<!--xxl-job-->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>${xxl-job.version}</version>
</dependency>
<!-- ftp用 --> <!-- ftp用 -->
<dependency> <dependency>
<groupId>commons-net</groupId> <groupId>commons-net</groupId>
@ -221,28 +204,6 @@
<artifactId>swagger-models</artifactId> <artifactId>swagger-models</artifactId>
<version>${swagger.version}</version> <version>${swagger.version}</version>
</dependency> </dependency>
<!-- 虚拟货币处理 -->
<dependency>
<groupId>live.lingting</groupId>
<artifactId>virtual-currency-all</artifactId>
<version>${virtual-currency.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>${kafka.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>${kafka.version}</version>
</dependency>
<!--kafka MQ-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.12</artifactId>
<version>${kafka.version}</version>
</dependency>
<!--poi 依赖 处理--> <!--poi 依赖 处理-->
<dependency> <dependency>
<groupId>org.apache.poi</groupId> <groupId>org.apache.poi</groupId>
@ -307,7 +268,6 @@
<version>${grpc.version}</version> <version>${grpc.version}</version>
</dependency> </dependency>
<!--region ============= 定义ballcat 自身模块版本 ================== --> <!--region ============= 定义ballcat 自身模块版本 ================== -->
<dependency> <dependency>
<groupId>com.baiye</groupId> <groupId>com.baiye</groupId>
@ -394,8 +354,8 @@
<artifactId>ad-distribute-starter-swagger</artifactId> <artifactId>ad-distribute-starter-swagger</artifactId>
<version>1.1.0</version> <version>1.1.0</version>
</dependency> </dependency>
<!-- ballcat-stater -->
<!-- ballcat-stater -->
<dependency> <dependency>
<groupId>com.baiye</groupId> <groupId>com.baiye</groupId>
<artifactId>ad-distribute-starter-websocket</artifactId> <artifactId>ad-distribute-starter-websocket</artifactId>
@ -463,34 +423,14 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>${maven-release-plugin.version}</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
<goals>deploy</goals>
<releaseProfiles>release</releaseProfiles>
<useReleaseProfile>false</useReleaseProfile>
</configuration>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>${nexus-staging-maven-plugin.version}</version>
<configuration>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<serverId>ossrh</serverId>
</configuration>
<extensions>true</extensions>
</plugin>
</plugins> </plugins>
</build> </build>
<id>ossrh</id> <id>ossrh</id>
</profile> </profile>
</profiles> </profiles>
<!--endregion 结束环境变量-->
<!--endregion 结束环境变量-->
<distributionManagement> <distributionManagement>
<repository> <repository>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
@ -563,37 +503,18 @@
<artifactId>maven-gpg-plugin</artifactId> <artifactId>maven-gpg-plugin</artifactId>
<version>${maven-gpg-plugin.version}</version> <version>${maven-gpg-plugin.version}</version>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>${maven-release-plugin.version}</version>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId> <artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version> <version>${maven-resources-plugin.version}</version>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven-source-plugin.version}</version>
</plugin>
<!-- 测试插件 --> <!-- 测试插件 -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version> <version>${maven-surefire-plugin.version}</version>
</plugin> </plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>${nexus-staging-maven-plugin.version}</version>
</plugin>
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId> <artifactId>flatten-maven-plugin</artifactId>

Loading…
Cancel
Save