Explorar o código

修改用户设备信息

zhouxianguang %!s(int64=6) %!d(string=hai) anos
pai
achega
7a104a48b9

+ 4 - 4
rankin-user-service/src/main/java/cn/rankin/userservice/controller/StmtController.java

@@ -28,8 +28,8 @@ import java.util.*;
 
 
 @RestController
-@RequestMapping(value = "/stmt")
-public class StmtController
+@RequestMapping(value = "/stmt/campus")
+public class StmtCampusController
 {
     @Autowired
     private MerchantService merchantService;
@@ -37,7 +37,7 @@ public class StmtController
     @Autowired
     private CampusService campusService;
 
-    @RequestMapping(value = "/campus/page", method = RequestMethod.GET)
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
     public APIResult<Page<Campus>> page(CampusSearchDTO searchDTO)
     {
         Campus campus = new Campus();
@@ -75,7 +75,7 @@ public class StmtController
         return apiResult;
     }
 
-    @RequestMapping(value = "/campus/list", method = RequestMethod.GET)
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
     public APIResult<List<Campus>> search(CampusSearchDTO searchDTO)
     {
         Campus campus = new Campus();

+ 426 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/controller/StmtTerminalUserController.java

@@ -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);
+            }
+        });
+    }
+
+
+}