fix: 修复一些问题

This commit is contained in:
曹鹏飞 2025-03-04 16:10:02 +08:00
parent 33317cbdc6
commit 521bb78948
18 changed files with 234 additions and 15 deletions

View File

@ -60,9 +60,6 @@ public class AppUserController extends ControllerBase {
@Resource
private ITBaseCustomerService customerService;
@Resource
private ITBaseAreaService areaService;
@Resource
private IAppUserApplyforService appUserApplyforService;
@ -114,6 +111,17 @@ public class AppUserController extends ControllerBase {
return ApiResult.success(list);
}
/**
* 根据公司id获取区域列表
* @param companyIds 公司id列表
* @return 区域列表
*/
@GetMapping("getAreasByCompany")
@ApiMark(moduleName = "代理商管理", apiName = "根据公司id获取区域列表",isPublic = true)
public ApiResult<List<String>> getAreasByCompany(@Valid @RequestParam @NotNull List<Integer> companyIds){
return ApiResult.success(customerService.getAreas(companyIds));
}
/**
* 添加代理商主账号
* @param request 请求参数

View File

@ -131,6 +131,18 @@ public class MenuController extends ControllerBase {
return ApiResult.success();
}
/**
* 启用/禁用菜单按钮
* @param request 菜单按钮信息
*/
@PostMapping("enableMenuButton")
@MethodInfoMark(value = "启用/禁用菜单按钮", menuName = "菜单管理")
@ApiMark(moduleName = "菜单管理", apiName = "启用/禁用菜单按钮")
public ApiResult<Void> enableMenuButton(@Valid @RequestBody EnableMenuRequest request) {
adminMenuService.enableMenuButton(request);
return ApiResult.success();
}
/**
* 删除菜单按钮
* @param ids 菜单按钮id列表

View File

@ -348,6 +348,21 @@ public class TicketController extends ControllerBase {
return ApiResult.success();
}
/**
* 驳回工单
* @param ids 工单id列表
*/
@PostMapping("rejectTicket")
@MethodInfoMark(value = "驳回工单", menuName = "工单管理")
@ApiMark(moduleName = "工单管理", apiName = "驳回工单")
public ApiResult<Void> rejectTicket(@Valid @RequestBody @NotEmpty List<Integer> ids) {
for (Integer id : ids){
Ticket ticket=ticketService.rejectTicket(id);
// ticketEventPublisher.publishTicketCompleteEvent(ticket);
}
return ApiResult.success();
}
/**
* 关闭工单
* @param request 请求参数

View File

@ -245,7 +245,7 @@ public class UserController extends ControllerBase {
adminUsers.forEach(c -> adminMessageService.add(
new AdminMessage()
.setNo(applyfor.getUserEmail())
.setTitle(createdUser.getName()+"请账号延期")
.setTitle(createdUser.getName()+"请账号延期")
.setUserId(c.getId())
.setSourceId(applyfor.getId())
.setSource(1)

View File

@ -3,6 +3,8 @@ package com.nflg.mobilebroken.common.pojo.request;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@EqualsAndHashCode(callSuper = false)
@Data
public class AppUserUpdateRequest extends PrimaryAppUserAddRequest {
@ -11,4 +13,8 @@ public class AppUserUpdateRequest extends PrimaryAppUserAddRequest {
//是否启用
private Boolean enable;
//区域id
@NotNull
private Integer areaId;
}

View File

@ -9,11 +9,11 @@ import java.util.List;
@Data
public class EnableMenuRequest {
// 是否启用
//是否启用
@NotNull
private boolean enable;
// 菜单id列表
//id列表
@NotEmpty
private List<Integer> ids;
}

View File

@ -7,7 +7,6 @@ import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ -41,10 +40,6 @@ public class PrimaryAppUserAddRequest {
//手机
private String phone;
//区域id
@NotNull
private Integer areaId;
//头像
private String avatar;

View File

@ -1,11 +1,16 @@
package com.nflg.mobilebroken.common.pojo.vo;
import cn.hutool.core.util.StrUtil;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Data
@Accessors(chain = true)
@ -40,6 +45,10 @@ public class AppUserForAdminVO {
//区域名称
private String areaName;
public String getAreaName(){
return StrUtil.join(",",Arrays.stream(areaName.split(",")).distinct().collect(Collectors.toList()));
}
//状态0待激活1-启用2禁用
private Byte userState;
@ -67,9 +76,16 @@ public class AppUserForAdminVO {
//是否主账号
private boolean isPrimary;
//公司id
private String companyId;
//公司id列表
private List<Integer> companyIds;
public List<Integer> getCompanyIds() {
return Arrays.stream(companyId.split(",")).map(Integer::parseInt).collect(Collectors.toList());
}
//手机号
private String phone;
@ -88,5 +104,18 @@ public class AppUserForAdminVO {
private Integer titleId;
//下级账号
private List<AppUserForAdminVO> children;
private List<AppUserForAdminVO> children=new ArrayList<>();
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
AppUserForAdminVO vo = (AppUserForAdminVO) obj;
return Objects.equals(key, vo.key);
}
@Override
public int hashCode() {
return Objects.hash(key);
}
}

View File

@ -2,7 +2,9 @@ package com.nflg.mobilebroken.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.mobilebroken.common.pojo.request.SearchAppUserForAdminRequest;
import com.nflg.mobilebroken.common.pojo.request.UserSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.AppUserForAdminVO;
import com.nflg.mobilebroken.common.pojo.vo.AppUserVO;
import com.nflg.mobilebroken.repository.entity.AppUser;
@ -23,4 +25,6 @@ public interface AppUserMapper extends BaseMapper<AppUser> {
AppUserVO getInfo(Integer userId);
List<AppUserVO> searchByCompany(UserSearchRequest aa);
List<AppUserForAdminVO> searchAppUserForAdmin(SearchAppUserForAdminRequest request);
}

View File

@ -33,4 +33,6 @@ public interface IAdminMenuService extends IService<AdminMenu> {
IPage<MenuVO> search(MenuSearchRequest request);
void delete(List<Integer> ids);
void enableMenuButton(EnableMenuRequest request);
}

View File

@ -29,4 +29,6 @@ public interface ITBaseCustomerService extends IService<TBaseCustomer> {
List<CompanySimpleVO> getSimpleCompanys();
List<CompanySimpleVO> getSimpleCompanysFromAdmin(Integer userId);
List<String> getAreas(List<Integer> companyIds);
}

View File

@ -52,4 +52,6 @@ public interface ITicketService extends IService<Ticket> {
List<AdminUserSimpleVO> getTicketHandle(Integer id);
List<TicketVO> getAdminFavorites(Integer userId,Integer favoritesId);
Ticket rejectTicket(Integer id);
}

View File

@ -197,6 +197,16 @@ public class AdminMenuServiceImpl extends ServiceImpl<AdminMenuMapper, AdminMenu
removeByIds(ids);
}
@Override
public void enableMenuButton(EnableMenuRequest request) {
adminMenuButtonService.lambdaUpdate()
.set(AdminMenuButton::getEnable, request.isEnable())
.set(AdminMenuButton::getUpdateBy, AdminUserUtil.getUserName())
.set(AdminMenuButton::getUpdateTime, LocalDateTime.now())
.in(AdminMenuButton::getId, request.getIds())
.update();
}
private void getParent(MenuVO child, List<MenuVO> datas) {
AdminMenu parent = lambdaQuery().eq(AdminMenu::getId, child.getParentId()).one();
if (Objects.nonNull(parent)) {

View File

@ -29,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.nio.charset.Charset;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.chrono.ChronoLocalDate;
import java.util.*;
@ -160,7 +161,6 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
.setAvatar(request.getAvatar())
.setEmail(request.getEmail())
.setPhone(request.getPhone())
.setAreaId(request.getAreaId())
.setTitleId(request.getTitleId())
.setPassword(encodePassword)
.setCompanyId(StrUtil.join(",", request.getCompanyIds()))
@ -179,7 +179,6 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
.setAvatar(request.getAvatar())
.setEmail(request.getEmail())
.setPhone(request.getPhone())
.setAreaId(request.getAreaId())
.setTitleId(request.getTitleId())
.setPassword(encodePassword)
.setCompanyId(StrUtil.join(",", request.getCompanyIds()))
@ -316,6 +315,61 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
@Override
public PageData<AppUserForAdminVO> searchAppUserForAdmin(SearchAppUserForAdminRequest request) {
List<AppUserForAdminVO> datas = baseMapper.searchAppUserForAdmin(request);
List<AppUserForAdminVO> primarys=datas.stream().filter(AppUserForAdminVO::isPrimary).collect(Collectors.toList());
List<AppUserForAdminVO> subs=datas.stream().filter(d->!d.isPrimary()).collect(Collectors.toList());
subs.forEach(d->{
AppUserForAdminVO primary=primarys.stream()
.filter(p-> Arrays.stream(p.getCompanyId().split(",")).anyMatch(c->c.equals(d.getCompanyId())))
.findFirst().orElse(null);
if (Objects.isNull(primary)){
AppUser appUser=getPrimaryByCompanyId(d.getCompanyId());
List<TBaseCustomer> customers=customerService.lambdaQuery()
.in(TBaseCustomer::getId, Arrays.stream(appUser.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))
.list();
String areaName=StrUtil.join(",",customers.stream().map(TBaseCustomer::getAreaName).flatMap(name->StrUtil.split(name, ",").stream()).collect(Collectors.toSet()));
primary=new AppUserForAdminVO()
.setPrimary(true)
.setUserName(appUser.getName())
.setAvatar(appUser.getAvatar())
.setUserState(appUser.getState())
.setEmail(appUser.getEmail())
.setCompanyId(appUser.getCompanyId())
.setCompanyName(StrUtil.join(",",customers.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList())))
.setAreaName(areaName)
.setCreateBy(appUser.getCreateBy())
.setCreateTime(appUser.getCreateTime())
.setUpdateBy(appUser.getUpdateBy())
.setUpdateTime(appUser.getUpdateTime())
.setExpireTime(appUser.getExpireTime())
.setId(appUser.getId())
.setKey("u"+appUser.getId())
.setLanguageCode(appUser.getLanguageCode())
.setLastLoginTime(appUser.getLastLoginTime())
.setName(appUser.getName())
.setPhone(appUser.getPhone())
.setSalesUserName(appUser.getSalesUserName())
.setTitleId(appUser.getTitleId())
.setTitle(positionService.getById(appUser.getTitleId()).getPositionName())
.setState(appUser.getExpireTime().isAfter(LocalDate.now()) ?1:2);
AppUserApplyfor applyFor=appUserApplyforService.lambdaQuery()
.eq(AppUserApplyfor::getUserId, appUser.getId())
.eq(AppUserApplyfor::getState, AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue())
.ne(AppUserApplyfor::getType, AppUserApplyforType.ADD.getState().byteValue())
.one();
if (Objects.nonNull(applyFor)) {
primary.setKey("f-" + applyFor.getId()).setId(applyFor.getId()).setState(0);
}
primarys.add(primary);
}
primary.getChildren().add(d);
});
datas.removeAll(subs);
List<AppUserForAdminVO> page=primarys.stream().skip((long) (request.getPage() - 1) *request.getPageSize()).limit(request.getPageSize()).collect(Collectors.toList());
return new PageData<AppUserForAdminVO>().setPage(request.getPage()).setPageSize(request.getPageSize()).setTotal(primarys.size()).setItems(page);
}
public PageData<AppUserForAdminVO> searchAppUserForAdmin1(SearchAppUserForAdminRequest request) {
Page<AppUser> page = lambdaQuery()
.eq(AppUser::getIsDel, false)
.eq(AppUser::getIsPrimary, true)

View File

@ -102,4 +102,17 @@ public class TBaseCustomerServiceImpl extends ServiceImpl<TBaseCustomerMapper, T
.setCode(d.getAgencyCompanyCode()))
.collect(Collectors.toList());
}
@Override
public List<String> getAreas(List<Integer> companyIds) {
return lambdaQuery()
.eq(TBaseCustomer::getDelIs, 0)
.eq(TBaseCustomer::getEnableState, 1)
.in(TBaseCustomer::getId, companyIds)
.list()
.stream()
.map(TBaseCustomer::getAreaName)
.flatMap(name -> StrUtil.split(name, ",").stream())
.collect(Collectors.toList());
}
}

View File

@ -42,7 +42,7 @@ public class TicketFavoritesServiceImpl extends ServiceImpl<TicketFavoritesMappe
public FavoritesVO getList(Integer userId,Integer id) {
TicketFavorites favorites= Objects.equals(id, 0)? new TicketFavorites().setId(0).setName("收藏夹") : lambdaQuery().eq(TicketFavorites::getId,id).one();
FavoritesVO vo=new FavoritesVO().setId(favorites.getId()).setName(favorites.getName());
vo.setChildren(lambdaQuery().eq(TicketFavorites::getParentId,id).eq(TicketFavorites::getCreateBy,userId).list()
vo.setChildren(lambdaQuery().eq(TicketFavorites::getParentId,id).eq(TicketFavorites::getCreateBy,userId).orderByAsc(TicketFavorites::getOrderNum).list()
.stream().map(f->new FavoritesVO().setId(f.getId()).setName(f.getName())).collect(Collectors.toList()));
vo.setTickets(ticketService.getAdminFavorites(userId,id));
return vo;

View File

@ -311,4 +311,19 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
public List<TicketVO> getAdminFavorites(Integer userId,Integer favoritesId) {
return baseMapper.getAdminFavorites(userId,favoritesId);
}
@Override
public Ticket rejectTicket(Integer id) {
Ticket ticket = getById(id);
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单");
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.ProcessingCompleted.getState()))
.throwMessage("工单状态不允许驳回");
List<Integer> tickerMangagers = adminUserService.getTickerMangagers();
VUtils.trueThrowBusinessError(tickerMangagers.stream().noneMatch(uid -> Objects.equals(uid, AdminUserUtil.getUserId())))
.throwMessage("你无权驳回工单");
ticket.setState(TicketState.Processing.getState());
ticket.setUpdateTime(LocalDateTime.now());
updateById(ticket);
return ticket;
}
}

View File

@ -95,4 +95,56 @@
)
</if>
</select>
<select id="searchAppUserForAdmin" parameterType="com.nflg.mobilebroken.common.pojo.request.SearchAppUserForAdminRequest" resultType="com.nflg.mobilebroken.common.pojo.vo.AppUserForAdminVO">
SELECT IF(aua.id IS NULL,CONCAT('u-',au.id),CONCAT('f-',aua.id)) AS 'key',au.id,au.avatar,au.login_name,au.`name` AS 'userName',fun_getUserCompanys(au.company_id) AS 'companyName',au.`name`,au.email,au.sales_user_name,IF(au.is_primary,fun_getPrimaryUserArea(au.company_id),aa.`name`) AS 'areaName',au.state AS 'userState',au.expire_time,IF(aua.id IS NOT NULL,0,IF(CONVERT_TZ(NOW(), @@session.time_zone, '+00:00') &lt; au.expire_time,1,2)) AS 'state',au.create_by,au.create_time,au.update_by,au.update_time,au.last_login_time,au.is_primary,au.company_id,au.phone,au.area_id,au.language_code,p.position_name AS 'title',au.title_id
FROM app_user au
LEFT JOIN app_area aa ON au.area_id=aa.id
LEFT JOIN app_user_applyfor aua ON aua.user_id=au.id AND aua.state=0
LEFT JOIN t_base_position p ON au.title_id=p.id
<where>
<if test="loginName!=null and loginName!=''">
AND au.login_name LIKE concat('%', #{loginName}, '%')
</if>
<if test="name!=null and name!=''">
AND au.`name` LIKE concat('%', #{name}, '%')
</if>
<if test="companyName!=null and companyName!=''">
AND fun_getUserCompanys(au.company_id) LIKE concat('%', #{companyName}, '%')
</if>
<if test="userState!=null">
AND au.state=#{userState}
</if>
<if test="state==0">
AND aua.id IS NOT NULL
</if>
<if test="state==1">
AND aua.id IS NULL AND CONVERT_TZ(NOW(), @@session.time_zone, '+00:00') &lt; au.expire_time
</if>
<if test="state==2">
AND aua.id IS NULL AND CONVERT_TZ(NOW(), @@session.time_zone, '+00:00') >= au.expire_time
</if>
</where>
UNION
SELECT CONCAT('f-',aua.id) AS 'key',aua.id,aua.user_avatar AS 'avatar',aua.user_email AS 'loginName',aua.`user_name` AS 'userName',fun_getUserCompanys(aua.company_id) AS 'companyName',aua.user_name AS 'name',aua.user_email AS 'email',aua.sales_user_name,IF(aua.is_primary,fun_getPrimaryUserArea(aua.company_id),aa.`name`) AS 'areaName',0 AS 'userState',null AS 'expireTime',0 AS 'state',aua.create_by,aua.create_time,null AS 'updateBy',null AS 'updateTime',null AS 'lastLoginTime',aua.is_primary,aua.company_id,aua.user_phone AS 'phone',aua.area_id,aua.language_code,p.position_name AS 'title',aua.title_id
FROM app_user_applyfor aua
LEFT JOIN app_area aa ON aua.area_id=aa.id
LEFT JOIN t_base_position p ON aua.title_id=p.id
WHERE aua.type=0 AND aua.state=0
<if test="loginName!=null and loginName!=''">
AND aua.user_email LIKE concat('%', #{loginName}, '%')
</if>
<if test="name!=null and name!=''">
AND aua.user_name LIKE concat('%', #{name}, '%')
</if>
<if test="companyName!=null and companyName!=''">
AND fun_getUserCompanys(aua.company_id) LIKE concat('%', #{companyName}, '%')
</if>
<if test="userState!=null">
AND 0=#{userState}
</if>
<if test="state!=null">
AND 1=2
</if>
</select>
</mapper>