WF公務車新需求開發:駕駛員匯入

ZHOU_VIP發表於2017-04-01

描述:資源管理>>駕駛員管理>>匯入駕駛員資訊匯入


新需求要求:以前匯入類似新增就是在資料庫中增加記錄,現在要進行判斷了,

如果身份證已存在,再看駕駛證,如果駕駛證存在,則結束,不存在則用excel中的資料替換資料庫中的那條記錄;

如果身份證不存在,再看駕駛證,如果駕駛證存在,則結束,不存在則把excel這條記錄新增進資料庫。

Excel模板:


涉及的表:

駕駛員表 CLGL_DRIVER_INFO

使用者表 USER_BASICINFO

修改的程式碼:


DriverManagerController

@RequestMapping(value = "/importRecords", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public BaseResp importDriverInfo(@RequestBody List<DriverInfoImport> req){

    int rowNum = 1;
    for(int i=0; i<req.size(); i++){
        
        rowNum++;
        DriverInfoImport curr = req.get(i);
        if(!Util.isEmpty(curr.getBirthday())){
            try{
                DateUtil.stringToDate(curr.getBirthday(), "yyyy-MM-dd");
            }catch(ParseException e){
                throw new EcodeServiceException("匯入失敗:第"+rowNum+"行【出生年月】日期格式錯誤");
            }
            
        }
        
        Asserts.notEmpty(curr.getEntryDate(), "匯入失敗:第"+rowNum+"行【本單位上崗日期】不能為空");
        try{
            DateUtil.stringToDate(curr.getEntryDate(), "yyyy-MM-dd");
        }catch(ParseException e){
            throw new EcodeServiceException("匯入失敗:第"+rowNum+"行【本單位上崗日期】日期格式錯誤");
        }
        
    
}

    AbstractRequestExecutor executorDriver = new AbstractRequestExecutor("請求訪問批量匯入駕駛員資訊介面", "importSingleDriverInfo"){
        @SuppressWarnings("unchecked")
        protected <M> BaseResp batchOperate(List<M> records) throws Exception{
            
            return driverManagerService.addNewImportDriverInfo((List<DriverInfoImport>)records);
        }
    };

    return executorDriver.batchExecute(req);
}


IDriverManagerService

public BaseResp addNewImportDriverInfo(List<DriverInfoImport> records)throws Exception;


DriverManagerServiceImpl

@Override
public BaseResp addNewImportDriverInfo(List<DriverInfoImport> records) throws Exception{
    BaseResp resp = new BaseResp();

    StringBuffer sb = new StringBuffer();
    for(DriverInfoImport record : records){
        
        Integer lineNo = record.getLineNo();
        String userName = record.getUserName().trim();
        String idCardNo = record.getIdCardNo().trim();
        String drivingLicenseId = record.getDrivingLicenseId().trim();
        String sexDesc = record.getSexDesc();
        String allowDriveVehTypeDesc = record.getAllowDriveVehTypeDesc();
        String birthday = record.getBirthday().trim();
        String entryDate = record.getEntryDate().trim();
        
        Date bday = DateUtil.parseStrDate(birthday, "yyyy-MM-dd");
        Date edate = DateUtil.parseStrDate(entryDate, "yyyy-MM-dd");
        
        if(idCardNo.length()>18 || idCardNo.length()<15){
            sb.append("第[").append(lineNo).append("]行,身份證長度不正確<br>\n\r");
            continue;
        }
        
        if(Util.isEmpty(bday)){
            sb.append("第[").append(lineNo).append("]行,出生日期不正確<br>\n\r");
            continue;
        }
        
        if(Util.isEmpty(edate)){
            sb.append("第[").append(lineNo).append("]行,入單位日期不正確<br>\n\r");
            continue;
        }

        // 檢查使用者名稱不能重複
        /*Boolean userNameUnique = checkUserNameUnique(userName, null);
        if(!userNameUnique){
            sb.append("第[").append(lineNo).append("]行,使用者名稱資訊已存在<br>\n\r");
            continue;
        }*/
        
        boolean isUpdate=false;
        boolean isAdd=false;
        // 查詢使用者表身份證是否有值
        UserBasicinfo ub = checkIdCardUniqueBean(idCardNo, null);
        ClglDriverInfo driver2 = null;
        if(!Util.isEmpty(ub)){ //存在,更新
            // 存在該身份證號,檢查駕照編號不能重複
            Boolean drivingLicUnique = checkDrivingLicUnique(drivingLicenseId, null);
            if(!drivingLicUnique){ 
                sb.append("第[").append(lineNo).append("]行,駕駛證號碼已經存在<br>\n\r");
                continue;
            }else{
                driver2 = driverManagerDAO.queryDriverInfoByUserId(ub.getUserid());//根據userid查詢出駕駛員資訊
                isUpdate=true;
            }
            
        }else{ // 使用者表身份證不存在值,新增
            //檢查駕照編號不能重複
            Boolean drivingLicUnique = checkDrivingLicUnique(drivingLicenseId, null);
            if(!drivingLicUnique){ 
                
                sb.append("第[").append(lineNo).append("]行,駕駛證號碼已經存在<br>\n\r");
                continue;
            }else{
                isAdd=true;
            }
        }

        MemoryTable mem = MemoryTable.getInstance();

        List<DictionaryItem> sexList = mem.getDictionaryItem(DicTypeConst.SEX, Constant.DICT_NO_PARENT_ID);

        Boolean isTure = false;
        for(DictionaryItem item : sexList){
            if(item.getItemName().equals(sexDesc)){
                record.setSex(Short.valueOf(item.getItemValue()));
                isTure = true;
                break;
            }
        }
        if(!isTure){
            sb.append("第[").append(lineNo).append("]行,輸入的性別不正確<br>\n\r");
            continue;
        }

        isTure = false;
        List<DictionaryItem> allowDriveVehTypeList = mem.getDictionaryItem(DicTypeConst.DRIVER_ZJCX, Constant.DICT_NO_PARENT_ID);
        for(DictionaryItem item : allowDriveVehTypeList){
            if(item.getItemName().equals(allowDriveVehTypeDesc)){
                record.setAllowDriveVehType(Short.valueOf(item.getItemValue()));
                isTure = true;
                break;
            }
        }
        if(!isTure){
            sb.append("第[").append(lineNo).append("]行,輸入的準駕車型不正確<br>\n\r");
            continue;
        }
        if(isAdd){//資料新增
            
            Date crtDate = getOracleSysDate();
            LoginInfo loginInfo = Common.getLoginInfo();
            SysDeptInfo loginDept = mem.getSysDeptMap(loginInfo.getUserSysDept().getAppSysId(), loginInfo.getUserSysDept().getAppDeptId());

            int loginUserId = loginInfo.getAppUserInfo().getIntAppUserId();
            String loginUserName = loginInfo.getUserBasicInfo().getRealName();
            
            UserBasicinfo user = new UserBasicinfo();
            
            DriverEditReq driverEditReq = new DriverEditReq();
            driverEditReq = driverInfoImportToDriverEditReq(driverEditReq, record);
            setUserPo(user, false, driverEditReq, bday, loginUserId, loginUserName, crtDate, loginDept);
            driverManagerDAO.save(user);
            
            ClglDriverInfo driver = new ClglDriverInfo();
            setDriverPo(driver, false, driverEditReq, user.getUserid(), loginUserId, loginUserName, crtDate, loginDept);
            driver.setWorkStatus((short)0);
            driverManagerDAO.save(driver);
        }else if(isUpdate){// 更新
             
            //使用者名稱
            ub.setRealname(userName);
            //性別
            ub.setSex(Short.toString(record.getSex()));
            //身份證
            ub.setIdcardno(idCardNo);
            //駕駛證號
            driver2.setDrivingLicenseId(drivingLicenseId);
            //出生年月
            ub.setBirthday(DateUtil.formatDate(bday, "yyyyMMddHHmmss"));
            //手機號碼
            ub.setMobileCmpp(record.getMobileLong().trim());
            //本崗位上崗日期
            driver2.setEntryDate(DateUtil.parseStrDate(entryDate,"yyyy-MM-dd"));
            //準駕車型
            driver2.setAllowDriveVehType(record.getAllowDriveVehType());
            
            driverManagerDAO.update(ub);
            driverManagerDAO.update(driver2);
            
            
        }
    }

    if(sb.length() > 0){
        resp.setRetCode(Constant.RET_CODE_BATCH_DEL_PART_FAIL);
        resp.setRetMsg(sb.toString());
    }else{
        resp.setRetMsg(Constant.RET_SUCC_STR);
    }

    return resp;
}

// 使用者表資訊
private UserBasicinfo checkIdCardUniqueBean(String idCardNo, String userId) throws Exception{
    UserBasicinfo user = driverManagerDAO.queryUserInfoByIdCard(idCardNo, userId);
    return user;
}

public UserBasicinfo queryUserInfoByIdCard(String idCard, String userId) throws Exception{
    HibernateParams hParams = new HibernateParams();
    hParams.addSqlStrBuffer("from UserBasicinfo where idcardno = ? ");
    hParams.addParamObj(idCard);
    if(!Util.isEmpty(userId)){
        hParams.addSqlStrBuffer(" and userid <> ? ");
        hParams.addParamObj(userId.trim());
    }
    List<?> list = this.findByHql(hParams.getSqlStr(), hParams.getParamObj());
    return list.size() > 0?(UserBasicinfo)list.get(0):null;
}

// 檢查駕照編號唯一
private Boolean checkDrivingLicUnique(String drivingLicenseId, String userId) throws Exception{
    ClglDriverInfo driver = driverManagerDAO.queryDriverInfoByDrivingLic(drivingLicenseId, userId);
    return driver == null;
}

public ClglDriverInfo queryDriverInfoByDrivingLic(String drivinglic, String userId) throws Exception{
    HibernateParams hParams = new HibernateParams();
    hParams.addSqlStrBuffer("from ClglDriverInfo where drivingLicenseId = ? ");
    hParams.addParamObj(drivinglic);
    if(!Util.isEmpty(userId)){
        hParams.addSqlStrBuffer(" and userid <> ? ");
        hParams.addParamObj(userId.trim());
    }
    List<?> list = this.findByHql(hParams.getSqlStr(), hParams.getParamObj());
    return list.size() > 0?(ClglDriverInfo)list.get(0):null;
}

public ClglDriverInfo queryDriverInfoByUserId(String userId) throws Exception{
    HibernateParams hParams = new HibernateParams();
    hParams.addSqlStrBuffer("from ClglDriverInfo where userid = ? ");
    hParams.addParamObj(userId.trim());
    List<?> list = this.findByHql(hParams.getSqlStr(), hParams.getParamObj());
    return list.size() > 0?(ClglDriverInfo)list.get(0):null;
}

public void update(UserBasicinfo po) throws Exception;

public void update(ClglDriverInfo po) throws Exception;

@Override
public void update(UserBasicinfo po) throws Exception{
    super.update(po);
}

@Override
public void update(ClglDriverInfo po) throws Exception{
    super.update(po);
}

重點程式碼:


主要這邊有兩張表,駕駛員表 CLGL_DRIVER_INFO,使用者表 USER_BASICINFO

這兩張表的userid欄位是一樣的,所以可以根據userid查詢出駕駛員資訊,然後匯入excel的時候可以對駕駛員資訊進行替換


----------------------------------------------------------------------------------------------------------------------------------------------------------------

開發過程還出現了以下問題:

資料庫存的出生年月是這種格式:


我這樣儲存ub.setBirthday(birthday);在頁面上卻不顯示出生年月,估計是格式錯了

看了setUserPo(user,false,driverEditReq,才知道原來是這樣的


於是改成這樣即可:ub.setBirthday(DateUtil.formatDate(bday, "yyyyMMddHHmmss"));


相關文章