Explorar o código

优化 代码

java110 %!s(int64=4) %!d(string=hai) anos
pai
achega
0c50a35479

+ 12 - 0
java110-bean/src/main/java/com/java110/dto/user/UserDto.java

@@ -16,6 +16,9 @@ import java.util.List;
 public class UserDto extends PageDto implements Serializable {
 
     public static final String LEVEL_CD_MALL = "03";//商城用户
+    public static final String LEVEL_CD_ADMIN = "00";//商城用户
+    public static final String LEVEL_CD_STAFF = "01";//商城用户
+    public static final String LEVEL_CD_USER = "02";//商城用户
 
     private String userId;
 
@@ -38,6 +41,7 @@ public class UserDto extends PageDto implements Serializable {
     private String sex;
 
     private String levelCd;
+    private String[] levelCds;
 
     private String storeId;
 
@@ -316,4 +320,12 @@ public class UserDto extends PageDto implements Serializable {
     public void setUserFlag(String userFlag) {
         this.userFlag = userFlag;
     }
+
+    public String[] getLevelCds() {
+        return levelCds;
+    }
+
+    public void setLevelCds(String[] levelCds) {
+        this.levelCds = levelCds;
+    }
 }

+ 6 - 0
java110-db/src/main/resources/mapper/user/UserServiceDaoImplMapper.xml

@@ -619,6 +619,12 @@
         <if test="levelCd !=null and levelCd != ''">
             and u.level_cd= #{levelCd}
         </if>
+        <if test="levelCds != null">
+            and u.level_cd in
+            <foreach collection="levelCds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         <if test='userFlag !=null and userFlag =="1"'>
             and u.level_cd != '02'
         </if>

+ 4 - 0
java110-utils/src/main/java/com/java110/utils/constant/ServiceCodeConstant.java

@@ -258,6 +258,10 @@ public class ServiceCodeConstant {
      * 用户登录服务处理
      */
     public static final String SERVICE_CODE_USER_SERVICE_LOGIN = "user.service.login";
+    /**
+     * 用户登录服务处理
+     */
+    public static final String SERVICE_CODE_PC_USER_LOGIN = "login.pcUserLogin";
 
     /**
      * 管理员免密登录

+ 169 - 0
service-api/src/main/java/com/java110/api/listener/login/PcUserLoginListener.java

@@ -0,0 +1,169 @@
+package com.java110.api.listener.login;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.listener.AbstractServiceApiDataFlowListener;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.event.service.api.ServiceDataFlowEvent;
+import com.java110.core.factory.AuthenticationFactory;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.store.StoreUserDto;
+import com.java110.dto.user.UserDto;
+import com.java110.dto.userLogin.UserLoginDto;
+import com.java110.entity.center.AppService;
+import com.java110.intf.store.IStoreInnerServiceSMO;
+import com.java110.intf.user.IUserInnerServiceSMO;
+import com.java110.intf.user.IUserLoginInnerServiceSMO;
+import com.java110.po.userLogin.UserLoginPo;
+import com.java110.utils.constant.CommonConstant;
+import com.java110.utils.constant.ResponseConstant;
+import com.java110.utils.constant.ServiceCodeConstant;
+import com.java110.utils.exception.SMOException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户注册 侦听
+ * Created by wuxw on 2018/5/18.
+ */
+@Java110Listener("pcUserLoginListener")
+public class PcUserLoginListener extends AbstractServiceApiDataFlowListener {
+
+    private final static Logger logger = LoggerFactory.getLogger(PcUserLoginListener.class);
+
+
+    @Autowired
+    private IUserLoginInnerServiceSMO userLoginInnerServiceSMOImpl;
+
+    @Autowired
+    private IStoreInnerServiceSMO storeInnerServiceSMOImpl;
+
+    @Autowired
+    private IUserInnerServiceSMO userInnerServiceSMOImpl;
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeConstant.SERVICE_CODE_PC_USER_LOGIN;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.POST;
+    }
+
+
+    @Override
+    public int getOrder() {
+        return 0;
+    }
+
+
+    /**
+     * 请求参数格式:
+     * {
+     * "username":"admin",
+     * "passwd":"1234565"
+     * }
+     * 返回报文:
+     * {
+     * "userId":"",
+     * "token":"12dddd"
+     * }
+     *
+     * @param event
+     */
+    @Override
+    public void soService(ServiceDataFlowEvent event) {
+        //获取数据上下文对象
+        DataFlowContext dataFlowContext = event.getDataFlowContext();
+        String paramIn = dataFlowContext.getReqData();
+        Assert.isJsonObject(paramIn, "用户注册请求参数有误,不是有效的json格式 " + paramIn);
+        Assert.jsonObjectHaveKey(paramIn, "username", "用户登录,未包含username节点,请检查" + paramIn);
+        Assert.jsonObjectHaveKey(paramIn, "passwd", "用户登录,未包含passwd节点,请检查" + paramIn);
+        ResponseEntity responseEntity = null;
+        JSONObject paramInJson = JSONObject.parseObject(paramIn);
+        //根据AppId 查询 是否有登录的服务,查询登录地址调用
+        UserDto userDto = new UserDto();
+        userDto.setName(paramInJson.getString("username"));
+        userDto.setPassword(paramInJson.getString("passwd"));
+        userDto.setLevelCds(new String[]{UserDto.LEVEL_CD_ADMIN, UserDto.LEVEL_CD_STAFF});
+        List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
+        if (userDtos == null || userDtos.size() < 1) {
+            userDto.setTel(paramInJson.getString("username"));
+            userDtos = userInnerServiceSMOImpl.getUsers(userDto);
+        }
+        if (userDtos == null || userDtos.size() < 1) {
+            responseEntity = new ResponseEntity<String>("用户或密码错误", HttpStatus.UNAUTHORIZED);
+            dataFlowContext.setResponseEntity(responseEntity);
+            return;
+        }
+
+        //检查商户状态
+        StoreUserDto storeUserDto = new StoreUserDto();
+        storeUserDto.setUserId(userDtos.get(0).getUserId());
+        List<StoreUserDto> storeUserDtos = storeInnerServiceSMOImpl.getStoreUserInfo(storeUserDto);
+
+        if (storeUserDtos != null && storeUserDtos.size() > 0) {
+            String state = storeUserDtos.get(0).getState();
+            if ("48002".equals(state)) {
+                responseEntity = new ResponseEntity<String>("当前商户限制登录,请联系管理员", HttpStatus.UNAUTHORIZED);
+                dataFlowContext.setResponseEntity(responseEntity);
+                return;
+            }
+        }
+
+
+        try {
+            Map userMap = new HashMap();
+            userMap.put(CommonConstant.LOGIN_USER_ID, userDtos.get(0).getUserId());
+            userMap.put(CommonConstant.LOGIN_USER_NAME, userDtos.get(0).getUserName());
+            String token = AuthenticationFactory.createAndSaveToken(userMap);
+            JSONObject userInfo = BeanConvertUtil.beanCovertJson(userDtos.get(0));
+            userInfo.remove("userPwd");
+            userInfo.put("token", token);
+            //记录登录日志
+            UserLoginPo userLoginPo = new UserLoginPo();
+            userLoginPo.setLoginId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_loginId));
+            userLoginPo.setLoginTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+            userLoginPo.setPassword(userDtos.get(0).getPassword());
+            userLoginPo.setSource(UserLoginDto.SOURCE_WEB);
+            userLoginPo.setToken(token);
+            userLoginPo.setUserId(userInfo.getString("userId"));
+            userLoginPo.setUserName(userInfo.getString("userName"));
+            userLoginInnerServiceSMOImpl.saveUserLogin(userLoginPo);
+            responseEntity = new ResponseEntity<String>(userInfo.toJSONString(), HttpStatus.OK);
+            dataFlowContext.setResponseEntity(responseEntity);
+        } catch (Exception e) {
+            logger.error("登录异常:", e);
+            throw new SMOException(ResponseConstant.RESULT_CODE_INNER_ERROR, "系统内部错误,请联系管理员");
+        }
+    }
+
+    /**
+     * 对请求报文处理
+     *
+     * @param paramIn
+     * @return
+     */
+    private JSONObject refreshParamIn(String paramIn) {
+        JSONObject paramObj = JSONObject.parseObject(paramIn);
+        paramObj.put("userId", "-1");
+        paramObj.put("levelCd", "0");
+
+        return paramObj;
+    }
+
+
+}

+ 1 - 1
service-front/src/main/java/com/java110/front/smo/login/impl/LoginServiceSMOImpl.java

@@ -54,7 +54,7 @@ public class LoginServiceSMOImpl extends BaseComponentSMO implements ILoginServi
         }
 
         loginInfo.put("passwd", AuthenticationFactory.passwdMd5(loginInfo.getString("passwd")));
-        responseEntity = this.callCenterService(restTemplate, pd, loginInfo.toJSONString(), ServiceConstant.SERVICE_API_URL + "/api/user.service.login", HttpMethod.POST);
+        responseEntity = this.callCenterService(restTemplate, pd, loginInfo.toJSONString(), ServiceConstant.SERVICE_API_URL + "/api/login.pcUserLogin", HttpMethod.POST);
         if (responseEntity.getStatusCode() == HttpStatus.OK) {
             JSONObject userInfo = JSONObject.parseObject(responseEntity.getBody());
             pd.setToken(userInfo.getString("token"));