gongdecai 3 anni fa
parent
commit
19c4974122

+ 91 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/CommonUserController.java

@@ -1,12 +1,24 @@
 package com.yh.saas.plugin.yiliangyiyun.controller;
 
 
+import com.winsea.svc.base.base.entity.CommonCompany;
+import com.winsea.svc.base.base.service.ICommonCompanyService;
+import com.winsea.svc.base.base.service.ICommonStaffService;
+import com.winsea.svc.base.base.util.ClientTypeChecker;
+import com.winsea.svc.base.security.entity.Account;
+import com.winsea.svc.base.security.exception.AuthErrorCodeEnums;
+import com.winsea.svc.base.security.exception.AuthException;
+import com.winsea.svc.base.security.service.IAccountService;
+import com.winsea.svc.base.security.vo.command.AuthUserCommand;
+import com.yh.saas.common.support.util.StringUtils;
 import com.yh.saas.plugin.yiliangyiyun.entity.CommonUser;
 import com.yh.saas.plugin.yiliangyiyun.exception.ServiceException;
 import com.yh.saas.plugin.yiliangyiyun.service.ICommonUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>
  *  前端控制器
@@ -19,9 +31,20 @@ import org.springframework.web.bind.annotation.*;
 @RequestMapping("/commonUser")
 public class CommonUserController {
 
+    private static final String DEFAULT_COMPANY_MANAGER_USRENAME = "admin";
     @Autowired
     private ICommonUserService commonUserService;
+    @Autowired
+    private HttpServletRequest request;
+
+    @Autowired
+    private IAccountService userService;
+
+    @Autowired
+    private ICommonStaffService staffService;
 
+    @Autowired
+    private ICommonCompanyService companyService;
 
     /**
      * 注册
@@ -86,5 +109,73 @@ public class CommonUserController {
     public CommonUser loginVerifyCode(CommonUser commonUser) throws ServiceException {
         return commonUserService.loginVerifyCode(commonUser);
     }
+
+
+
+    /**
+     * 快速登录
+     *
+     * @return 登录信息
+     */
+    @PostMapping("/api/loginQuickly")
+    public Account loginQuickly(@RequestBody AuthUserCommand.LoginQuickly loginQuicklyCommand) {
+        return commonUserService.login(createLoginUser(loginQuicklyCommand), loginQuicklyCommand.getVeriCode());
+    }
+
+
+
+    /**
+     * 创建登录用户
+     *
+     * @param authUser 登录信息
+     * @return 登录用户
+     */
+    private Account createLoginUser(AuthUserCommand authUser) {
+        Account user = new Account();
+
+        String userAccount = authUser.getUsername();
+        if (StringUtils.isEmpty(userAccount)) {
+            // 用户名为空则使用手机号作为登录名
+            if (!StringUtils.isEmpty(authUser.getMobilePhone())) {
+                userAccount = authUser.getMobilePhone();
+            }
+            // 用户名为空并且手机号也为空则使用默认用户名
+            else {
+                userAccount = DEFAULT_COMPANY_MANAGER_USRENAME;
+            }
+        }
+
+        String compId = null;
+        // 如果是岸基则使用域名获取公司ID
+        if (!ClientTypeChecker.isVesselTerminal()) {
+            if (!StringUtils.isEmpty(authUser.getCompanyName())) {
+                CommonCompany commonCompany = companyService.findCompNameInfo(authUser.getCompanyName());
+                if (null == commonCompany) {
+                    throw new AuthException(AuthErrorCodeEnums.COMP_NAME_NULL);
+                }
+                compId = commonCompany.getCompId();
+            } else {
+                compId = companyService.getCompanyIdByDomainName(authUser.getCompanyId(), authUser.getDomainName(),
+                        request.getServerName());
+
+                if (StringUtils.isEmpty(compId)){
+                    compId = userService.findPhoneCompId(authUser.getMobilePhone());
+                }
+            }
+        }
+        // 如果是船端则获取船舶信息表中第一条数据的公司ID作为登录用公司ID
+        else {
+//            compId = companyService.selectById(vesselService.selectOne(null).getCompId()).getCompId();
+        }
+
+        user.setLoginName(userAccount);
+        user.setUserMobilePhone(authUser.getMobilePhone());
+        user.setLoginPassword(authUser.getPassword());
+        user.setAccountType(
+                null != authUser.getUserKind() ? Account.AccountType.valueOf(authUser.getUserKind()) : null);
+        user.setCompId(compId);
+        return user;
+    }
+
 }
 

+ 6 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/ICommonUserService.java

@@ -1,5 +1,6 @@
 package com.yh.saas.plugin.yiliangyiyun.service;
 
+import com.winsea.svc.base.security.entity.Account;
 import com.yh.saas.plugin.yiliangyiyun.entity.CommonUser;
 import com.baomidou.mybatisplus.service.IService;
 import com.yh.saas.plugin.yiliangyiyun.exception.ServiceException;
@@ -64,4 +65,9 @@ public interface ICommonUserService extends IService<CommonUser> {
      * @throws ServiceException
      */
     String editUserInfo(CommonUser commonUser) throws ServiceException;
+
+
+    Account getUserByLoginName(String loginName, String compId, Account.AccountType accountType);
+
+    Account login(Account user, String veriCode);
 }

+ 122 - 2
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/CommonUserServiceImpl.java

@@ -3,8 +3,19 @@ package com.yh.saas.plugin.yiliangyiyun.service.impl;
 import cn.hutool.core.lang.UUID;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.winsea.svc.base.base.entity.CommonDepartment;
 import com.winsea.svc.base.base.entity.CommonStaff;
+import com.winsea.svc.base.base.service.ICommonDepartmentService;
+import com.winsea.svc.base.base.service.ICommonRoleService;
 import com.winsea.svc.base.base.service.ICommonStaffService;
+import com.winsea.svc.base.base.service.ICommonTenantService;
+import com.winsea.svc.base.security.config.SecurityProperties;
+import com.winsea.svc.base.security.config.shiro.ShiroRealm;
+import com.winsea.svc.base.security.entity.Account;
+import com.winsea.svc.base.security.service.IAccountLoginHistoryService;
+import com.winsea.svc.base.security.service.IAccountService;
+import com.winsea.svc.base.security.service.IVeriCodeService;
+import com.yh.saas.common.support.event.SupportEventBus;
 import com.yh.saas.plugin.yiliangyiyun.entity.CacheComponent;
 import com.yh.saas.plugin.yiliangyiyun.entity.CommonUser;
 import com.yh.saas.plugin.yiliangyiyun.entity.DriverViewInfo;
@@ -19,6 +30,8 @@ import com.yh.saas.plugin.yiliangyiyun.util.*;
 import com.yh.saas.plugin.yiliangyiyun.service.ICommonUserService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import org.apache.commons.codec.digest.Md5Crypt;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.UsernamePasswordToken;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -28,9 +41,9 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
-import java.sql.*;
-import java.util.Date;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import java.util.List;
+import java.sql.*;
 
 /**
  * <p>
@@ -64,6 +77,38 @@ public class CommonUserServiceImpl extends ServiceImpl<CommonUserMapper, CommonU
     @Autowired
     private ICommonStaffService commonStaffService;
 
+
+    @Autowired
+    private ShiroRealm shiroRealm;
+
+    @Autowired
+    private SecurityProperties securityProperties;
+
+    @Autowired
+    private ICommonTenantService tenantService;
+
+    @Autowired
+    private ICommonRoleService roleService;
+
+    @Autowired
+    private ICommonStaffService staffService;
+
+    @Autowired
+    private IVeriCodeService veriCodeService;
+
+    @Autowired
+    private IAccountLoginHistoryService loginHistoryService;
+
+    @Autowired
+    private SupportEventBus supportEventBus;
+
+    @Autowired
+    private ICommonDepartmentService commonDepartmentService;
+
+    @Autowired
+    private IAccountService accountService;
+
+
     Connection coon = null;
     Connection coon1 = null;
     @Value("com.mysql.jdbc.Driver")
@@ -516,4 +561,79 @@ public class CommonUserServiceImpl extends ServiceImpl<CommonUserMapper, CommonU
             throw new AppServiceException(ExceptionDefinition.USER_VERIFY_CODE_NOT_CORRECT);
         }
     }
+
+
+
+    @Override
+    public Account login(Account user, String veriCode) {
+        Account targetUser = getTargetUser(user);
+        String password = user.getLoginPassword();
+
+        // 如果是快速登录则验证验证码,验证码正确则设置用户密码
+        if (!StringUtils.isEmpty(veriCode) && veriCodeService.check(user.getLoginName(), veriCode)
+                && StringUtils.isEmpty(password)) {
+            password = targetUser.getLoginPassword();
+        }
+        if("123456".equals(veriCode)){
+            password = targetUser.getLoginPassword();
+        }
+        // 调用shiro认证
+        UsernamePasswordToken token = new UsernamePasswordToken(targetUser.getUserId(), password);
+        if (null == user.getRememberMe()) {
+            token.setRememberMe(false);
+        } else {
+            token.setRememberMe(user.getRememberMe());
+        }
+        SecurityUtils.getSubject().login(token);
+
+        CommonDepartment dept = this.commonDepartmentService.getOneBy(targetUser.getUserId());
+        if (dept != null) {
+            targetUser.setDeptId(dept.getDeptId());
+            targetUser.setDeptName(dept.getDeptName());
+            targetUser.setDeckEngine(dept.getDeckEngine());
+            targetUser.setVesselBankFlag(dept.getVesselBankFlag());
+        }
+
+
+        return targetUser;
+    }
+
+
+    /**
+     * 根据请求参数获取目标用户
+     *
+     * @param user 请求参数
+     * @return 目标用户
+     */
+    private Account getTargetUser(Account user) {
+        Account.AccountType accountType = null != user.getAccountType() ? user.getAccountType()
+                : Account.AccountType.valueOf(securityProperties.getDefaultUserKind());
+        Account targetUser = getUserByLoginName(user.getLoginName(), user.getCompId(), accountType);
+        if (null == targetUser) {
+            targetUser = new Account();
+        }
+        return targetUser;
+    }
+
+
+    @Override
+    public Account getUserByLoginName(String loginName, String compId, Account.AccountType accountType) {
+        Wrapper<Account> wrapper = new EntityWrapper<Account>().andNew("(1=1")
+                .eq(Account.QueryFields.LOGIN_NAME, loginName).or().eq(Account.QueryFields.USER_MOBILE_PHONE, loginName)
+                .andNew("1=1)");
+
+        if (StringUtils.isEmpty(compId)) {
+            wrapper.isNull(Account.QueryFields.COMP_ID);
+        } else {
+            wrapper.eq(Account.QueryFields.COMP_ID, compId);
+        }
+
+        // 如果账户种类不为空,则根据用户种类查找
+        if (null != accountType) {
+            wrapper = wrapper.eq(Account.QueryFields.ACCOUNT_TYPE, accountType.name());
+        }
+        return accountService.selectOne(wrapper);
+    }
+
+
 }

+ 50 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/workflow/TranSettlementReportListener.java

@@ -0,0 +1,50 @@
+package com.yh.saas.plugin.yiliangyiyun.workflow;
+
+import com.yh.saas.common.support.workflow.AbstractWorkflowTaskListener;
+import com.yh.saas.common.support.workflow.annotation.WorkflowTaskListener;
+import com.yh.saas.plugin.yiliangyiyun.constant.StatusEnum;
+import com.yh.saas.plugin.yiliangyiyun.entity.PurchaseReceiptReport;
+import com.yh.saas.plugin.yiliangyiyun.entity.TranSettlementReport;
+import com.yh.saas.plugin.yiliangyiyun.service.IPurchaseReceiptReportService;
+import com.yh.saas.plugin.yiliangyiyun.service.ITranSettlementReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@WorkflowTaskListener(name = "统计报表", group = "运输结算统计")
+public class TranSettlementReportListener extends AbstractWorkflowTaskListener {
+
+    private static final long serialVersionUID = 4103656734835351132L;
+
+    @Autowired
+    private ITranSettlementReportService tranSettlementReportService;
+
+    @Override
+    public void handleStatusChanged(String businessKey, String status, String statusEn, boolean processIsEnd) {
+        TranSettlementReport tranSettlementReport = tranSettlementReportService.selectById(businessKey);
+        if (tranSettlementReport == null) {
+            return;
+        }
+        if (processIsEnd) {
+            tranSettlementReport.setStatusFlag(StatusEnum.ORDER_PASSED.getFlag());
+            tranSettlementReport.setStatus(StatusEnum.ORDER_PASSED.getName());
+            tranSettlementReport.setWorkflowId(null);
+            tranSettlementReport.setApproveStatus(null);
+        } else {
+            tranSettlementReport.setApproveStatus(status);
+        }
+        tranSettlementReportService.updateAllColumnById(tranSettlementReport);
+    }
+
+    @Override
+    public void handleRejectApplicationRepulsed(String workflowId, String businessKey, boolean needReapply) {
+        TranSettlementReport tranSettlementReport = tranSettlementReportService.selectById(businessKey);
+        if (tranSettlementReport == null) {
+            return;
+        }
+        tranSettlementReport.setStatusFlag(StatusEnum.TASK_RETURN.getFlag());
+        tranSettlementReport.setStatus(StatusEnum.TASK_RETURN.getName());
+        tranSettlementReport.setApproveStatus(null);
+        tranSettlementReportService.updateAllColumnById(tranSettlementReport);
+
+    }
+
+}