Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminBaseAreaService.java
This commit is contained in:
大米 2025-02-07 10:45:16 +08:00
commit 8df67903e3
22 changed files with 137 additions and 49 deletions

View File

@ -163,16 +163,16 @@ public class AppUserController extends ControllerBase {
return ApiResult.success(appUserService.searchAppUserForAdmin(request));
}
/**
* 获取代理商子账号列表
*
* @param id 主账号id
*/
@GetMapping("getChildrenOfAppUser")
@MethodInfoMark(value = "获取代理商子账号列表", menuName = "代理商管理")
public ApiResult<List<AppUserForAdminVO>> getChildrenOfAppUser(@Valid @RequestParam Integer id) {
return ApiResult.success(appUserService.getChildrenOfAppUser(id));
}
// /**
// * 获取代理商子账号列表
// *
// * @param id 主账号id
// */
// @GetMapping("getChildrenOfAppUser")
// @MethodInfoMark(value = "获取代理商子账号列表", menuName = "代理商管理")
// public ApiResult<List<AppUserForAdminVO>> getChildrenOfAppUser(@Valid @RequestParam Integer id) {
// return ApiResult.success(appUserService.getChildrenOfAppUser(id));
// }
/**
* 启用/禁用代理商

View File

@ -44,7 +44,6 @@ public class BaseAreaController extends ControllerBase {
* @return
*/
@PostMapping("getList")
@MethodInfoMark(value = "获取区域列表" ,menuName = "区域管理")
public ApiResult<PageData<TBaseAreaVO>> getList(@RequestBody BaseAreaQuery query){
//
return adminBaseAreaService.getList(query);

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.admin.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -92,6 +93,7 @@ public class CustomerController extends ControllerBase {
//检查公司名称是否已存在
TBaseCustomer oldEnt = baseCustomerService.getById(customerDTO.getId());
VUtils.trueThrow(Objects.isNull(oldEnt)).throwMessage(STATE.PageError,customerDTO.getAgencyCompanyName()+"公司不存在");
BeanUtil.copyProperties(customerDTO,oldEnt);
oldEnt.setDataModifyUserNo(AdminUserUtil.getUserNo());
oldEnt.setDataModifyUserName(AdminUserUtil.getUserName());
oldEnt.setDataModifyTime(LocalDateTime.now());

View File

@ -3,6 +3,7 @@ package com.nflg.mobilebroken.admin.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.mobilebroken.admin.pojo.dto.PositionDetailDTO;
@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -51,7 +53,7 @@ public class PositionController extends ControllerBase {
* @return
*/
@PostMapping("getList")
@MethodInfoMark(value = "获取职位列表", menuName = "职位管理")
public ApiResult<PageData<TBasePosition>> getList(@RequestBody PositionQuery query) {
Page<TBasePosition> result = positionService.getList(new Page<>(query.getPage(), query.getPageSize()), query);
@ -65,16 +67,19 @@ public class PositionController extends ControllerBase {
* @return
*/
@GetMapping("getPositionDetail")
@MethodInfoMark(value = "获取职位明细", menuName = "职位管理")
public ApiResult<PositionDetailVO> getPositionDetail(@RequestParam("id") Integer id) {
TBasePosition ent = positionService.getById(id);
VUtils.trueThrow(null == ent).throwMessage(STATE.ParamErr, "职位不存在");
PositionDetailVO result = Convert.convert(PositionDetailVO.class, ent);
List<Language> allLanguage = languageService.lambdaQuery().eq(Language::getEnable, true).list();
List<PositionLanguageVO> positionLanguage = JSON.parseArray(ent.getPositionLanguage(), PositionLanguageVO.class);
Map<String, String> positionLanguageMp = positionLanguage.stream()
.collect(Collectors.toMap(PositionLanguageVO::getCode, PositionLanguageVO::getLanguageValue));
Map<String, String> positionLanguageMp=new HashMap<>();
if(StrUtil.isNotBlank(ent.getPositionLanguage())) {
List<PositionLanguageVO> positionLanguage = JSON.parseArray(ent.getPositionLanguage(), PositionLanguageVO.class);
positionLanguageMp = positionLanguage.stream()
.collect(Collectors.toMap(PositionLanguageVO::getCode, PositionLanguageVO::getLanguageValue));
}
List<PositionLanguageVO> positionLanguageResult = Convert.toList(PositionLanguageVO.class, allLanguage);
for (PositionLanguageVO lan : positionLanguageResult) {
if (positionLanguageMp.containsKey(lan.getCode())) {
@ -119,11 +124,12 @@ public class PositionController extends ControllerBase {
public ApiResult<Boolean> update(@Valid @RequestBody PositionDetailDTO positionDetailDto) {
VUtils.trueThrow(positionDetailDto.getId()<=0).throwMessage(STATE.ParamErr,"编辑时ID不能等于0");
TBasePosition ent = Convert.convert(TBasePosition.class, positionDetailDto);
ent.setPositionCode(null);
ent.setPositionLanguage(JSON.toJSONString(positionDetailDto.getLanguage()));
ent.setDataModifyUserNo(AdminUserUtil.getUserNo());
ent.setDataModifyUserName(AdminUserUtil.getUserName());
ent.setDataModifyTime(LocalDateTime.now());
positionService.save(ent);
positionService.updateById(ent);
return ApiResult.success(true);
}

View File

@ -5,6 +5,7 @@ import com.nflg.mobilebroken.admin.pojo.vo.PositionLanguageVO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
@ -31,7 +32,7 @@ public class PositionDetailDTO {
/**
* 职位属性 1-内部使用 2-外部使用 3-公用
*/
@NotBlank(message = "属性不能为空")
@NotNull(message = "属性不能为空")
private Integer positionAttribute;

View File

@ -31,7 +31,7 @@ public class AdminBaseAreaService {
public ApiResult<PageData<TBaseAreaVO>> getList(@RequestBody BaseAreaQuery query){
Page<TBaseAreaVO> result = baseAreaService.getList(new Page<>(query.getPage(),query.getPageSize()), query);
List<TBaseAreaVO> dataResult = Convert.toList(TBaseAreaVO.class, result);
List<TBaseAreaVO> dataResult = Convert.toList(TBaseAreaVO.class, result.getRecords());
if(StrUtil.isNotBlank(query.getAreaCodeOrName())){
List<TBaseAreaVO> allAreaList = Convert.toList(TBaseAreaVO.class,baseAreaService.lambdaQuery().eq(TBaseArea::getDelIs,0).list()) ;
Map<Long, TBaseAreaVO> collect = allAreaList.stream().collect(Collectors.toMap(TBaseAreaVO::getId, Function.identity()));

View File

@ -22,7 +22,6 @@ import java.time.Instant;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@ -43,8 +42,10 @@ public class TiketController extends ControllerBase {
@Resource
private ITicketFollowService ticketFollowService;
// @Resource
// private ITicketChatService ticketChatService;
@Resource
private ITicketChatService ticketChatService;
private TicketChatService ticketChatService;
@Resource
private IAppUserService appUserService;
@ -107,6 +108,14 @@ public class TiketController extends ControllerBase {
@PostMapping("/addTiket")
public ApiResult<Void> addTiket(@Valid @RequestBody TicketAddRequest request) {
Integer ticketId = ticketService.add(request, AppUserUtil.getUserId());
ticketChatService.add(new TicketChat()
.setTicketId(ticketId)
.setMessages(Collections.singletonList(new ChatMessageVO()
.setFrom("system")
.setSenderId(0)
.setSenderName("服务助手")
.setCreateTime(Instant.now())
.setContent("<b>正在为您分派工程师,请稍后</b><br/>工程师将尽快回复您,如需补充信息,请继续留言。"))));
adminMessageService.addCQMNotify(ticketId);
return ApiResult.success();
}
@ -171,11 +180,7 @@ public class TiketController extends ControllerBase {
**/
@GetMapping("getChatMessages")
public ApiResult<List<ChatMessageVO>> getChatMessages(@Valid @RequestParam @NotNull Integer ticketId) {
TicketChat ticketChat=ticketChatService.findByTicketId(ticketId);
if (Objects.isNull(ticketChat)){
return ApiResult.success(Collections.emptyList());
}
return ApiResult.success(ticketChat.getMessages());
return ApiResult.success(ticketChatService.getMessages(ticketId));
}
/**
@ -185,11 +190,17 @@ public class TiketController extends ControllerBase {
@PostMapping("addChatMessage")
public ApiResult<Void> addChatMessage(@Valid @RequestBody AddChatMessageRequest request){
ChatMessageVO message = new ChatMessageVO()
.setSenderId(Integer.toString(AppUserUtil.getUserId()))
.setFrom("app")
.setSenderId(AppUserUtil.getUserId())
.setSenderName(AppUserUtil.getUserName())
.setContent(request.getContent())
.setCreateTime(Instant.now())
.setAttachments(request.getAttachments());
ticketChatService.pushMessage(request.getTicketId(),message);
// ticketChatService.pushMessage(request.getTicketId(),message);
// TicketChat chat=ticketChatService.findByTicketId(request.getTicketId());
// chat.getMessages().add(message);
// ticketChatService.save(chat);
ticketChatService.addMessage(request.getTicketId(), message);
return ApiResult.success();
}

View File

@ -2,31 +2,41 @@ package com.nflg.mobilebroken.common.pojo.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
public class AccountAddRequest {
//登录名称
@NotBlank
private String loginName;
//用户名
@NotBlank
private String userName;
//手机号码
private String phone;
//邮箱
@NotBlank
private String email;
//部门id
@NotNull
private Integer departmentId;
//职位id
@NotNull
private Integer titleId;
//用户号
@NotBlank
private String userCode;
//是否启用
@NotNull
private Boolean enabled;
//头像

View File

@ -34,5 +34,5 @@ public class MenuAddRequest {
// 是否显示
@NotNull
private boolean isShow;
private boolean show;
}

View File

@ -5,6 +5,7 @@ import lombok.experimental.Accessors;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Data
@Accessors(chain = true)
@ -63,4 +64,7 @@ public class AppUserForAdminVO {
//是否主账号
private boolean isPrimary;
//下级账号
private List<AppUserForAdminVO> children;
}

View File

@ -10,8 +10,11 @@ import java.util.List;
@Accessors(chain = true)
public class ChatMessageVO {
//来源
private String from;
// 发送者id
private String senderId;
private Integer senderId;
// 发送者名称
private String senderName;

View File

@ -27,7 +27,7 @@ public class MenuVO {
private boolean enable;
// 是否显示
private boolean isShow;
private boolean show;
// 创建人
private String createBy;

View File

@ -41,7 +41,7 @@ public class TBaseAreaVO implements Serializable {
/**
* 预期名称
*/
private Long areaName;
private String areaName;
/**
* 状态

View File

@ -1,14 +1,16 @@
package com.nflg.mobilebroken.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 后台-菜单
@ -56,7 +58,8 @@ public class AdminMenu implements Serializable {
/**
* 是否显示
*/
private Boolean isShow;
@TableField(value = "`show`")
private Boolean show;
/**
* 排序

View File

@ -2,6 +2,7 @@ package com.nflg.mobilebroken.repository.entity;
import com.nflg.mobilebroken.common.pojo.vo.ChatMessageVO;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@ -9,6 +10,7 @@ import java.util.ArrayList;
import java.util.List;
@Data
@Accessors(chain = true)
@Document(collection = "TicketChat")
public class TicketChat {
@ -18,4 +20,4 @@ public class TicketChat {
private Integer ticketId;
private List<ChatMessageVO> messages = new ArrayList<>();
}
}

View File

@ -0,0 +1,44 @@
package com.nflg.mobilebroken.repository.service;
import com.nflg.mobilebroken.common.pojo.vo.ChatMessageVO;
import com.nflg.mobilebroken.repository.entity.TicketChat;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@Service
public class TicketChatService {
@Resource
private MongoTemplate mongoTemplate;
public void add(TicketChat ticketChat) {
mongoTemplate.save(ticketChat);
}
public List<ChatMessageVO> getMessages(Integer ticketId) {
Query query = new Query(Criteria.where("ticketId").is(ticketId));
TicketChat ticketChat = mongoTemplate.findOne(query, TicketChat.class);
if (Objects.isNull(ticketChat)) {
return Collections.emptyList();
} else {
return ticketChat.getMessages();
}
}
public void addMessage(Integer ticketId, ChatMessageVO newMessage) {
// 创建查询条件查找 ticketId = ticketId TicketChat
Query query = new Query(Criteria.where("ticketId").is(ticketId));
// 创建更新操作 messages 列表中添加新消息
Update update = new Update().push("messages", newMessage);
// 执行更新操作
mongoTemplate.findAndModify(query, update, TicketChat.class);
}
}

View File

@ -71,7 +71,7 @@ public class AdminMenuServiceImpl extends ServiceImpl<AdminMenuMapper, AdminMenu
.setUrl(request.getUrl())
.setSort(request.getSort())
.setEnable(request.isEnable())
.setIsShow(request.isShow())
.setShow(request.isShow())
.setParentId(request.getParentId())
.setCreateBy(AdminUserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
@ -87,7 +87,7 @@ public class AdminMenuServiceImpl extends ServiceImpl<AdminMenuMapper, AdminMenu
.setUrl(request.getUrl())
.setSort(request.getSort())
.setEnable(request.isEnable())
.setIsShow(request.isShow())
.setShow(request.isShow())
.setParentId(request.getParentId())
.setUpdateBy(AdminUserUtil.getUserName())
.setUpdateTime(LocalDateTime.now());

View File

@ -31,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.chrono.ChronoLocalDate;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@ -178,25 +179,27 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
if (Objects.nonNull(d.getUpdateBy())) {
updateBy = getById(d.getUpdateBy()).getName();
}
List<Integer> companyIds = Arrays.stream(d.getCompanyId().split(",")).filter(StrUtil::isNotBlank).map(Integer::valueOf).collect(Collectors.toList());
List<String> customers = customerService.listByIds(companyIds).stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList());
return new AppUserForAdminVO()
.setId(d.getId())
.setAvatar(d.getAvatar())
.setLoginName(d.getLoginName())
.setUserName(d.getName())
.setCompanyName(d.getCompanyId())
.setCompanyName(StrUtil.join(",", customers))
.setName(d.getSalesUserName())
.setEmail(d.getEmail())
.setSalesUserName(d.getSalesUserName())
.setAreaName(area.getName())
.setEnable(d.getEnable())
.setEnable(d.getEnable())
.setExpireTime(d.getExpireTime())
.setCreateBy(appUser.getName())
.setCreateTime(d.getCreateTime())
.setUpdateBy(updateBy)
.setPrimary(true)
.setState(d.getExpireTime().isAfter(ChronoLocalDate.from(LocalDateTime.now())) ? 1 : 2)
.setLastLoginTime(d.getLastLoginTime());
.setLastLoginTime(d.getLastLoginTime())
.setChildren(getChildrenOfAppUser(d.getId()));
});
}

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -62,12 +63,10 @@ public class ParamConfigServiceImpl extends ServiceImpl<ParamConfigMapper, Param
@Override
public PageData<ParamConfigVO> search(SearchConfigRequest request) {
IPage<ParamConfig> page = new Page<>();
page.setCurrent(request.getPage());
page.setSize(request.getPageSize());
lambdaQuery().like(ParamConfig::getName, request.getName())
.like(ParamConfig::getCode, request.getCode())
.page(page);
IPage<ParamConfig> page = lambdaQuery()
.like(StrUtil.isNotBlank(request.getName()), ParamConfig::getName, request.getName())
.like(StrUtil.isNotBlank(request.getCode()), ParamConfig::getCode, request.getCode())
.page(new Page<>(request.getPage(), request.getPageSize()));
if (CollectionUtil.isEmpty(page.getRecords())) {
return new PageData<>();
}

View File

@ -24,7 +24,7 @@
<update id="delByIds">
update t_base_area set del_is=1 , data_modify_time=now(), data_modify_user_no=#{userNo},
data_modify_user_name=#{userName} where id in
<foreach collection="ids" item="=item" open="(" close=")" separator=",">
<foreach collection="ids" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</update>

View File

@ -4,7 +4,7 @@
<sql id="whr">
<if test="query.positionCode!=null and query.positionCode!=''">
and position_code=#{positionCode}
and position_code=#{query.positionCode}
</if>
<if test="query.positionName!=null and query.positionName!=''">
and position_name=#{query.positionName}

View File

@ -38,6 +38,7 @@ public class CodeGenerator {
.enableChainModel()
.enableFileOverride();
builder.controllerBuilder().disable();
builder.addExclude("admin_menu");
})
.templateEngine(new FreemarkerTemplateEngine())
.execute();