WF公務車新需求開發:駕駛員匯入
描述:資源管理>>駕駛員管理>>匯入駕駛員資訊匯入
新需求要求:以前匯入類似新增就是在資料庫中增加記錄,現在要進行判斷了,
如果身份證已存在,再看駕駛證,如果駕駛證存在,則結束,不存在則用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"));
相關文章
- WF公務車新需求開發(續)
- WF公務車新需求開發(再續)
- 解決公務車Bug:停車費管理中匯入停車費用時報資料庫操作異常資料庫
- 解決公務車Bug:加油管理中匯入加油費用時,提示:操作失敗
- 戴姆勒旗下Torc Robotics公司選擇亞馬遜雲服務開發自動駕駛卡車亞馬遜自動駕駛
- 解決公務車Bug:過路過橋費用管理中匯入路橋費用時,付費方式為蘇通卡時不能正常匯入
- 從需求出發的自動駕駛圖景自動駕駛
- 智慧駕駛演算法開發諮詢服務演算法
- 從資料看北京賓士GLB購買趨勢:駕駛需求讓渡於車內空間需求
- 使用csv批量匯入、匯出資料的需求處理
- Excel 匯入的開發經驗Excel
- 開發人員如何瞭解使用者和需求(轉)
- 那些需要自己開發的安全需求(服務端)服務端
- 微信公眾平臺開發入門
- 招聘Linux C/C++ GDK/GTK開發人員需求【長期】LinuxC++
- 美國汽車協會:72%駕駛員不信任自動泊車系統
- 遠端辦公需求爆發,迎來加速發展期!
- 車載乙太網開發諮詢服務
- 外貿業務員開發新客戶的方法
- Drive.ai無人叫車服務進德州,我們用15分鐘見識了這位「新手駕駛員」AI
- SG公務車:用車人職務級別改成可以手動輸入(續:不刪表資料,修改欄位型別)型別
- 1月網約車駕駛員證增加21.3% 中國218家網約車平臺取經營許可
- 美團叫車需求分析
- 軟銀旗下的自動駕駛公車又拿到融資,計劃3年後上路自動駕駛
- web學習:服務端開發的業務需求-路由解析Web服務端路由
- 和開發人員討論一個業務需求和簡單實現
- Drive.ai計劃啟動自動駕駛網約車服務AI自動駕駛
- 基於.Net開發的資料庫匯入匯出的開源專案資料庫
- 我是 Laravel 開發員,不是 PHP 開發員LaravelPHP
- 新車還擁有L2.5級駕駛輔助系統,包含APA自動泊車
- 惠安惠達專案新需求:首頁增加待命車明細
- 【Excel】Excel 拆分以及批次匯入指令碼開發Excel指令碼
- sqlloader匯入含有回車的字元資料SQL字元
- jar包中匯入新的類JAR
- Nodejs開發微信公眾號中控服務NodeJS
- 開發人員愛開發
- 趁Uber無人駕駛發展受挫,老對手Lyft要推出自動駕駛車輛自動駕駛
- KRAFTON正式公開新遊戲專案《inZOI》的開發工作計劃Raft遊戲