|
@@ -0,0 +1,426 @@
|
|
|
+package cn.rankin.userservice.controller;
|
|
|
+
|
|
|
+import cn.rankin.common.utils.api.model.APIResult;
|
|
|
+import cn.rankin.common.utils.api.page.Page;
|
|
|
+import cn.rankin.common.utils.enums.BaseOrderEnum;
|
|
|
+import cn.rankin.common.utils.enums.BaseStatusEnum;
|
|
|
+import cn.rankin.common.utils.util.HttpUtil;
|
|
|
+import cn.rankin.common.utils.util.ListUtil;
|
|
|
+import cn.rankin.common.utils.util.ProvinceUtil;
|
|
|
+import cn.rankin.data.api.auth.dto.AuthDTO;
|
|
|
+import cn.rankin.data.api.auth.dto.AuthQueryDTO;
|
|
|
+import cn.rankin.data.api.auth.vo.AuthVo;
|
|
|
+import cn.rankin.data.api.user.dto.CampusDTO;
|
|
|
+import cn.rankin.data.api.user.dto.CampusSearchDTO;
|
|
|
+import cn.rankin.data.api.user.dto.TerminalUserDTO;
|
|
|
+import cn.rankin.data.api.user.dto.TerminalUserSearchDTO;
|
|
|
+import cn.rankin.data.api.user.entity.Campus;
|
|
|
+import cn.rankin.data.api.user.entity.Merchant;
|
|
|
+import cn.rankin.data.api.user.entity.TerminalDevice;
|
|
|
+import cn.rankin.data.api.user.entity.TerminalUser;
|
|
|
+import cn.rankin.data.api.user.vo.TerminalUserAuthVo;
|
|
|
+import cn.rankin.userservice.code.UserServiceAPICode;
|
|
|
+import cn.rankin.userservice.dto.RemoteUser;
|
|
|
+import cn.rankin.userservice.proxy.RemoteAuthProxy;
|
|
|
+import cn.rankin.userservice.proxy.RemoteUserProxy;
|
|
|
+import cn.rankin.userservice.service.CampusService;
|
|
|
+import cn.rankin.userservice.service.MerchantService;
|
|
|
+import cn.rankin.userservice.service.TerminalDeviceService;
|
|
|
+import cn.rankin.userservice.service.TerminalUserService;
|
|
|
+import cn.rankin.userservice.utils.Converter;
|
|
|
+import cn.rankin.userservice.utils.StudentNo;
|
|
|
+import cn.rankin.userservice.utils.StudentNumberUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.transaction.Transactional;
|
|
|
+import javax.validation.Valid;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@RestController
|
|
|
+@RequestMapping(value = "/stmt/terminal/user")
|
|
|
+public class StmtTerminalUserController
|
|
|
+{
|
|
|
+ @Autowired
|
|
|
+ private TerminalUserService terminalUserService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CampusService campusService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MerchantService merchantService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RemoteUserProxy remoteUserProxy;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RemoteAuthProxy remoteAuthProxy;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TerminalDeviceService terminalDeviceService;
|
|
|
+
|
|
|
+ @RequestMapping(value = "/page", method = RequestMethod.GET)
|
|
|
+ public APIResult<Page<TerminalUser>> search(TerminalUserSearchDTO terminalUserSearchDTO) {
|
|
|
+ TerminalUser terminalUser = new TerminalUser();
|
|
|
+
|
|
|
+ String code = terminalUserSearchDTO.getCode();
|
|
|
+ String campusId = terminalUserSearchDTO.getCampusId();
|
|
|
+ if (!StringUtils.isEmpty(code)) {
|
|
|
+ terminalUser.setCode("%" + code + "%");
|
|
|
+ }else if (!StringUtils.isEmpty(campusId)) {
|
|
|
+ terminalUser.setCampusId(campusId);
|
|
|
+ }
|
|
|
+
|
|
|
+ String merchantId = terminalUserSearchDTO.getMerchantId();
|
|
|
+ if (!StringUtils.isEmpty(merchantId)) {
|
|
|
+ terminalUser.setMerchantId(merchantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ BaseStatusEnum status = terminalUserSearchDTO.getStatus();
|
|
|
+ if (status != null) {
|
|
|
+ terminalUser.setStatus(status);
|
|
|
+ }
|
|
|
+
|
|
|
+ LinkedHashMap<String, BaseOrderEnum> sort = new LinkedHashMap<>();
|
|
|
+ sort.put("gmtModified", BaseOrderEnum.DESC);
|
|
|
+
|
|
|
+ APIResult<Page<TerminalUser>> result = terminalUserService.search(terminalUser, terminalUserSearchDTO.getPageNo(), terminalUserSearchDTO.getPageSize(), sort);
|
|
|
+ if (result.getSuccess()) {
|
|
|
+ List<TerminalUser> terminalUserList = result.getData().getList();
|
|
|
+ setUserInfo(terminalUserList);
|
|
|
+ setDeciceInfo(terminalUserList);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @RequestMapping(method = RequestMethod.GET)
|
|
|
+ public APIResult<List<TerminalUser>> findByCondition(TerminalUserSearchDTO terminalUserSearchDTO) {
|
|
|
+ TerminalUser terminalUser = new TerminalUser();
|
|
|
+
|
|
|
+ String code = terminalUserSearchDTO.getCode();
|
|
|
+ String campusId = terminalUserSearchDTO.getCampusId();
|
|
|
+ if (!StringUtils.isEmpty(code)) {
|
|
|
+ terminalUser.setCode("%" + code + "%");
|
|
|
+ } else if (!StringUtils.isEmpty(campusId)) {
|
|
|
+ terminalUser.setCampusId(campusId);
|
|
|
+ }
|
|
|
+
|
|
|
+ String merchantId = terminalUserSearchDTO.getMerchantId();
|
|
|
+ if (!StringUtils.isEmpty(merchantId)) {
|
|
|
+ terminalUser.setMerchantId(merchantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ LinkedHashMap<String, BaseOrderEnum> sort = new LinkedHashMap<>();
|
|
|
+ sort.put("gmtModified", BaseOrderEnum.DESC);
|
|
|
+
|
|
|
+ List<TerminalUser> terminalUserList = terminalUserService.find(terminalUser, sort);
|
|
|
+ setUserInfo(terminalUserList);
|
|
|
+ return APIResult.ok(terminalUserList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/auth", method = RequestMethod.POST)
|
|
|
+ public APIResult updateAuth(@RequestBody AuthDTO dto) {
|
|
|
+ return remoteAuthProxy.saveOrUpdateAuth(dto);
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/auth/list", method = RequestMethod.GET)
|
|
|
+ public Page<TerminalUserAuthVo> findAuthListByCondition(TerminalUserSearchDTO terminalUserSearchDTO) {
|
|
|
+ Page<TerminalUserAuthVo> pageResult = new Page<>();
|
|
|
+ pageResult.setPageNo(terminalUserSearchDTO.getPageNo());
|
|
|
+ pageResult.setPageSize(terminalUserSearchDTO.getPageSize());
|
|
|
+
|
|
|
+ List<TerminalUserAuthVo> terminalUserAuthVos = new ArrayList<>();
|
|
|
+
|
|
|
+ //终端用户鉴权查询条件
|
|
|
+ AuthQueryDTO authQueryDTO = new AuthQueryDTO();
|
|
|
+ authQueryDTO.setPageNo(terminalUserSearchDTO.getPageNo());
|
|
|
+ authQueryDTO.setPageSize(terminalUserSearchDTO.getPageSize());
|
|
|
+
|
|
|
+
|
|
|
+ TerminalUser terminalUser = new TerminalUser();
|
|
|
+ String code = terminalUserSearchDTO.getCode();
|
|
|
+ if (!StringUtils.isEmpty(code)) {
|
|
|
+ log.info("/user/auth/list | request code={}",code);
|
|
|
+ terminalUser.setCode(code);
|
|
|
+ }
|
|
|
+ LinkedHashMap<String, BaseOrderEnum> sort = new LinkedHashMap<>();
|
|
|
+ sort.put("gmtModified", BaseOrderEnum.DESC);
|
|
|
+
|
|
|
+ List<TerminalUser> terminalUserList = terminalUserService.find(terminalUser, sort);
|
|
|
+
|
|
|
+ if(CollectionUtils.isEmpty(terminalUserList)){
|
|
|
+ log.info("terminalUserList is empty!");
|
|
|
+ return pageResult;
|
|
|
+ }else if(terminalUserList.size() == 1){
|
|
|
+ //查询到唯一用户时,设置资源库查询条件 | 其他情况默认查询全部
|
|
|
+ TerminalUser user = terminalUserList.get(0);
|
|
|
+ authQueryDTO.setUid(user.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ Page<AuthVo> authPage = remoteAuthProxy.findAuthList(authQueryDTO);
|
|
|
+
|
|
|
+ List<AuthVo> authList = authPage.getList();
|
|
|
+ if(CollectionUtils.isEmpty(authList)){
|
|
|
+ log.info("authList is empty!");
|
|
|
+ return pageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, TerminalUser> terminalUserMap = ListUtil.convert(terminalUserList, "id", TerminalUser.class);
|
|
|
+
|
|
|
+ authList.forEach(authVo -> {
|
|
|
+ TerminalUser termianlUser = terminalUserMap.get(authVo.getUid());
|
|
|
+ TerminalUserAuthVo vo = Converter.getTerminalUserAuthVo(termianlUser,authVo);
|
|
|
+ terminalUserAuthVos.add(vo);
|
|
|
+ });
|
|
|
+
|
|
|
+ //设置分页数据
|
|
|
+ pageResult.setTotalSize((int)authPage.getTotalSize());
|
|
|
+ pageResult.setList(terminalUserAuthVos);
|
|
|
+
|
|
|
+ return pageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @RequestMapping(method = RequestMethod.POST)
|
|
|
+ public APIResult<TerminalUser> create(HttpServletRequest request, @RequestBody @Valid TerminalUserDTO terminalUserDTO) {
|
|
|
+ String campusId = terminalUserDTO.getCampusId();
|
|
|
+ if (StringUtils.isEmpty(campusId)) {
|
|
|
+ return APIResult.error(UserServiceAPICode.PARAMETER_ERROR);
|
|
|
+ }
|
|
|
+
|
|
|
+ Campus campus = campusService.findOne(campusId);
|
|
|
+ if (campus == null) {
|
|
|
+ return APIResult.error(UserServiceAPICode.NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ String merchantId = campus.getMerchantId();
|
|
|
+ Merchant merchant = merchantService.findOne(merchantId);
|
|
|
+
|
|
|
+ if (merchant == null) {
|
|
|
+ return APIResult.error(UserServiceAPICode.NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 开始生成学号
|
|
|
+ Integer serialNo = terminalUserService.getSerialNo(campusId);
|
|
|
+ String code = StudentNumberUtil.getStudentNo(campus.getCode(), serialNo);
|
|
|
+
|
|
|
+ // 设置学号
|
|
|
+ terminalUserDTO.setCode(code);
|
|
|
+ terminalUserDTO.setSerialNo(serialNo);
|
|
|
+ terminalUserDTO.setMerchantId(merchantId);
|
|
|
+
|
|
|
+ // 设置名字
|
|
|
+ String name = terminalUserDTO.getName();
|
|
|
+ if (StringUtils.isEmpty(name)) {
|
|
|
+ terminalUserDTO.setName(StudentNumberUtil.toChinese(serialNo, "教室"));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 远程注册
|
|
|
+ String password = terminalUserDTO.getPassword();
|
|
|
+ APIResult<RemoteUser> remoteUserAPIResult = remoteUserProxy.register(code, password, HttpUtil.getClientIp(request), "0");
|
|
|
+ if (!remoteUserAPIResult.getSuccess()) {
|
|
|
+ log.error(JSON.toJSONString(remoteUserAPIResult));
|
|
|
+ return APIResult.error(UserServiceAPICode.REMOTE_USER_REGISTER_ERROR);
|
|
|
+ }else {
|
|
|
+ // 设置资源中心id为本地用户id
|
|
|
+ RemoteUser remoteUser = remoteUserAPIResult.getData();
|
|
|
+ terminalUserDTO.setId(remoteUser.getUid());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 存储数据库
|
|
|
+ APIResult<TerminalUser> result = terminalUserService.create(terminalUserDTO);
|
|
|
+ if (!result.getSuccess()) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ TerminalUser terminalUser = result.getData();
|
|
|
+ setUserInfo(terminalUser, campus, merchant);
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(method = RequestMethod.PUT)
|
|
|
+ public APIResult<TerminalUser> update(HttpServletRequest request, @RequestBody TerminalUserDTO terminalUserDTO) {
|
|
|
+ String id = terminalUserDTO.getId();
|
|
|
+ if (StringUtils.isEmpty(id)) {
|
|
|
+ return APIResult.error(UserServiceAPICode.PARAMETER_ERROR);
|
|
|
+ }
|
|
|
+
|
|
|
+ TerminalUser terminalUser = terminalUserService.find(id);
|
|
|
+ if (terminalUser == null) {
|
|
|
+ return APIResult.error(UserServiceAPICode.NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ String newPassword = terminalUserDTO.getPassword();
|
|
|
+ if (!StringUtils.isEmpty(newPassword)) {
|
|
|
+ String prePassword = terminalUser.getPassword();
|
|
|
+ if (!prePassword.equals(newPassword)) {
|
|
|
+ APIResult result = remoteUserProxy.changePassword(terminalUser, newPassword, HttpUtil.getClientIp(request), "0");
|
|
|
+ if (!result.getSuccess()) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ APIResult<TerminalUser> result = terminalUserService.update(terminalUserDTO);
|
|
|
+ if (result.getSuccess()) {
|
|
|
+ setUserInfo(result.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/{id}", method = RequestMethod.GET)
|
|
|
+ public APIResult<TerminalUser> getUser(@PathVariable("id") String id) {
|
|
|
+ TerminalUser terminalUser = terminalUserService.find(id);
|
|
|
+ if (terminalUser == null) {
|
|
|
+ return APIResult.error(UserServiceAPICode.NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ setUserInfo(terminalUser);
|
|
|
+ return APIResult.ok(terminalUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/code/{code}", method = RequestMethod.GET)
|
|
|
+ public APIResult<TerminalUser> loadUser(@PathVariable("code") String code) {
|
|
|
+ TerminalUser terminalUser = terminalUserService.loadUserByCode(code);
|
|
|
+ if (terminalUser == null) {
|
|
|
+ return APIResult.error(UserServiceAPICode.NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ setUserInfo(terminalUser);
|
|
|
+ return APIResult.ok(terminalUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/campus/ids", method = RequestMethod.GET)
|
|
|
+ public APIResult<List<TerminalUser>> findByCampusIds(@RequestParam("id") List<String> campusIds) {
|
|
|
+ List<TerminalUser> terminalUserList = terminalUserService.findByCampusIds(campusIds);
|
|
|
+ setUserInfo(terminalUserList);
|
|
|
+ return APIResult.ok(terminalUserList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/ids", method = RequestMethod.GET)
|
|
|
+ public APIResult<List<TerminalUser>> findByIds(@RequestParam("id") List<String> ids) {
|
|
|
+ List<TerminalUser> terminalUserList = terminalUserService.findByIds(ids);
|
|
|
+ setUserInfo(terminalUserList);
|
|
|
+ return APIResult.ok(terminalUserList);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 禁用终端用户
|
|
|
+ @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
|
|
|
+ public APIResult<Boolean> delete(@PathVariable("id") String id) {
|
|
|
+ return terminalUserService.delete(id);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static void setUserInfo(TerminalUser terminalUser, Campus campus, Merchant merchant) {
|
|
|
+ if (terminalUser == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (campus != null) {
|
|
|
+ terminalUser.setContactName(campus.getContactName());
|
|
|
+ terminalUser.setMobile(campus.getMobile());
|
|
|
+ terminalUser.setCityName(campus.getCityName());
|
|
|
+ terminalUser.setZoneName(campus.getZoneName());
|
|
|
+ terminalUser.setProvinceName(ProvinceUtil.get(campus.getProvinceCode()));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (merchant != null) {
|
|
|
+ terminalUser.setMerchantName(merchant.getName());
|
|
|
+ terminalUser.setMerchantContactMobile(merchant.getMobile());
|
|
|
+ terminalUser.setMerchantContactName(merchant.getContactName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setUserInfo(TerminalUser terminalUser) {
|
|
|
+ if (terminalUser == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Campus campus = campusService.findOne(terminalUser.getCampusId());
|
|
|
+ if (campus != null) {
|
|
|
+ terminalUser.setContactName(campus.getContactName());
|
|
|
+ terminalUser.setMobile(campus.getMobile());
|
|
|
+ terminalUser.setCityName(campus.getCityName());
|
|
|
+ terminalUser.setZoneName(campus.getZoneName());
|
|
|
+ terminalUser.setProvinceName(ProvinceUtil.get(campus.getProvinceCode()));
|
|
|
+ }
|
|
|
+
|
|
|
+ Merchant merchant = merchantService.findOne(campus.getMerchantId());
|
|
|
+ if (merchant != null) {
|
|
|
+ terminalUser.setMerchantSimple(merchant.getSimple());
|
|
|
+ terminalUser.setMerchantName(merchant.getName());
|
|
|
+ terminalUser.setMerchantContactMobile(merchant.getMobile());
|
|
|
+ terminalUser.setMerchantContactName(merchant.getContactName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setUserInfo(List<TerminalUser> terminalUserList) {
|
|
|
+ if (CollectionUtils.isEmpty(terminalUserList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> campusIdList = new ArrayList<>();
|
|
|
+ List<String> merchantIdList = new ArrayList<>();
|
|
|
+
|
|
|
+ terminalUserList.forEach(terminalUser -> {
|
|
|
+ campusIdList.add(terminalUser.getCampusId());
|
|
|
+ merchantIdList.add(terminalUser.getMerchantId());
|
|
|
+ });
|
|
|
+
|
|
|
+ Map<String, Campus> campusMap = campusService.getCampusMap(campusIdList);
|
|
|
+ Map<String, Merchant> merchantMap = merchantService.getMerchantMap(merchantIdList);
|
|
|
+
|
|
|
+ for (TerminalUser terminalUser : terminalUserList) {
|
|
|
+ Campus campus = campusMap.get(terminalUser.getCampusId());
|
|
|
+ if (campus != null) {
|
|
|
+ terminalUser.setContactName(campus.getContactName());
|
|
|
+ terminalUser.setMobile(campus.getMobile());
|
|
|
+ terminalUser.setCityName(campus.getCityName());
|
|
|
+ terminalUser.setZoneName(campus.getZoneName());
|
|
|
+ terminalUser.setAddress(campus.getAddress());
|
|
|
+ terminalUser.setProvinceName(ProvinceUtil.get(campus.getProvinceCode()));
|
|
|
+ }
|
|
|
+
|
|
|
+ Merchant merchant = merchantMap.get(terminalUser.getMerchantId());
|
|
|
+ if (merchant != null) {
|
|
|
+ terminalUser.setMerchantName(merchant.getName());
|
|
|
+ terminalUser.setMerchantContactMobile(merchant.getMobile());
|
|
|
+ terminalUser.setMerchantContactName(merchant.getContactName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置绑定设备信息
|
|
|
+ * @param terminalUserList
|
|
|
+ */
|
|
|
+ private void setDeciceInfo(List<TerminalUser> terminalUserList) {
|
|
|
+ if (CollectionUtils.isEmpty(terminalUserList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ terminalUserList.forEach(terminalUser ->{
|
|
|
+ TerminalDevice terminalDevice = terminalDeviceService.findByUserId(terminalUser.getId());
|
|
|
+ if(null != terminalDevice){
|
|
|
+ //1 已绑定设备
|
|
|
+ terminalUser.setDeviceStatus(1);
|
|
|
+ }else{
|
|
|
+ terminalUser.setDeviceStatus(0);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|