public String fileUpload() {
LOG.info("接收文件:" + filedataFileName);
int discode = 0;
List<String[]> list = null;
try {
list = parseFile(filedata);
} catch (Exception e) {
discode = 1;
resultString = ERROR;
LOG.error("文件内容格式不正确!", e);
}
try {
if (discode == 0)
saveList(list);
// int nunm = 100000;
//
// int part = (int) Math.ceil(1.0*list.size()/nunm);
// for (int j = 1; j <= part; j++) {
// final List<String[]> subList;
// if(j!=part){
// subList = list.subList((j-1)*nunm, j*nunm);
// }else{
// subList = list.subList((j-1)*nunm, list.size());
// }
//
// new Thread() {
// @Override
// public void run() {
// try {
// saveList(subList);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }.start();
// }
} catch (Exception e) {
resultString = ERROR;
LOG.error("数据入库保存失败!", e);
}
try {
String filename = saveFile(discode, filedata);
LOG.info("保存文件完毕:" + filename);
} catch (IOException e) {
LOG.error("文件保存失败!", e);
}
LOG.info("处理文件完毕:" + filedataFileName);
return SUCCESS;
}
//保存信息
private void saveList(List<String[]> list) throws Exception {
int busType = Constants.Dic.BUSTYPE_SYJY;
int initStutas = Constants.Dic.STUDENT_STUTAS_INIT;
String pwd = CommStringUtil.makePasswordByIdNumber("123456");
if (list != null && list.size() > 0) {
Collection<String> codes = studentService.getExitStudentCode(); // 查询所有导入的学员编号
Map<String, Integer> idnums = studentService.getExitStudent(); // 查询所有导入的idnum
Map<String, Integer> areaOrg = studentService.getAreasOrg(); // 查询地区和组织机构的关系
Collection<SaveUploadStuDto> stus = new HashSet<SaveUploadStuDto>();
for (String[] content : list) {
if(codes.contains(content[2])){ // 重复导入,跳过
repeatNum++;
continue;
}
SaveUploadStuDto stu = new SaveUploadStuDto();
stu.setStudyTimes(0);
stu.setStudentCode(content[2]);
stu.setApplyDate(content[6]);
stu.setBusType(busType);
stu.setStatus(initStutas);
stu.setBusOrg(areaOrg.get(content[5])); // 设置组织id
if(idnums.containsKey(content[1])) { // 系统中存在的学员 , 保存ext信息
stu.setStuId(idnums.get(content[1]));
stu.setName(null);
stu.setIdNumber(null);
stu.setTrianType(null);
stu.setPhone(null);
stu.setAreacode(null);
stu.setSex(null);
stu.setBirthdate(null);
stu.setPassword(null);
}else{ // 系统中不存在的学员, 保存学员信息和ext信息
stu.setStuId(null);
stu.setName(content[0]);
stu.setIdNumber(content[1]);
if(0 != content[3].length()){
stu.setTrianType(content[3]);
}else{
stu.setTrianType(null);
}
if(0 != content[4].length()){
stu.setPhone(content[4]);
}else{
stu.setPhone(null);
}
stu.setAreacode(content[5]);
stu.setSex(getSexByIdnum(stu.getIdNumber(), stu.getStudentCode()));
stu.setBirthdate(getBirthdate(stu.getIdNumber(), stu.getStudentCode()));
if("0000-00-00".equals(stu.getBirthdate())){
stu.setPassword(pwd); // 异常身份证,密码为123456
}else{
stu.setPassword(CommStringUtil.makePasswordByIdNumber(stu.getIdNumber()));
}
}
stus.add(stu);
}
if(stus.size() > 0){
successNum = stus.size();
studentService.saveSynStudents(stus);
}
}
}
@Override
public boolean saveSynStudents(Collection<SaveUploadStuDto> stus) {
return studentDao.saveSynStudents(stus);
}
private Connection getConn() throws Exception {
return ((PoolableConnection) dataSource.getConnection().getMetaData().getConnection()).getDelegate();
}
private static ARRAY getOracleArr(Connection conn, String OracleObj,
String Oraclelist, Collection<SaveUploadStuDto> stus)
throws Exception {
ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,conn);
StructDescriptor structdesc = new StructDescriptor(OracleObj, conn);
STRUCT[] structs = new STRUCT[stus.size()];
int i = 0;
for (SaveUploadStuDto stu : stus) {
try {
Object[] result = {
stu.getStuId(),stu.getBusOrg(),stu.getStudyTimes(),stu.getStudentCode(),stu.getApplyDate(),stu.getBusType(),
stu.getStatus(),stu.getName(),stu.getIdNumber(),stu.getTrianType(),stu.getPhone(),stu.getAreacode(),stu.getSex(),
stu.getBirthdate(),stu.getPassword()
};
structs[i] = new STRUCT(structdesc, conn, result);
} catch (Exception e) {
e.printStackTrace();
}
i++;
}
return new ARRAY(desc, conn, structs);
}
@Override
public boolean saveSynStudents(Collection<SaveUploadStuDto> stus) {
boolean rs = true;
try {
Connection conn = getConn();
ARRAY array_ = getOracleArr(conn, "SAVEUPLOADSTUDTO", "SAVEUPLOADSTUDTOLIST", stus);
CallableStatement stmt = conn.prepareCall("{call saveuploadstu(?, ?, ?)}");
conn.setAutoCommit(false);
stmt.setArray(1, array_);
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);
stmt.execute();
String mName = stmt.getString(2);
ResultSet insertedStu = (ResultSet) stmt.getObject(3);
while(insertedStu.next()){
/* Object s1 = insertedStu.getObject(1);
Object s2 = insertedStu.getObject(2);*/
}
System.out.println("从oracle存储过程返回的结果:____________" + mName+"____________操作成功!".equals(mName));
conn.commit();
stmt.close();
} catch (Exception e) {
e.printStackTrace();
rs = false;
}
return rs;
}
CREATE OR REPLACE TYPE "SAVEUPLOADSTUDTO" AS OBJECT
(
STUID NUMBER,
BUSORG NUMBER,
STUDYTIMES NUMBER,
STUCODE NVARCHAR2(20),
APPLYDATE NVARCHAR2(20),
BUSTYPE NUMBER,
STATUS NUMBER,
STUNAME NVARCHAR2(20),
IDNUMBER NVARCHAR2(20),
TRIANTYPE NVARCHAR2(20),
PHONE NUMBER,
AREACODE NVARCHAR2(20),
SEX NVARCHAR2(10),
BIRTHDATE NVARCHAR2(20),
PASSWORD NVARCHAR2(50)
)
CREATE OR REPLACE TYPE "SAVEUPLOADSTUDTOLIST" AS TABLE OF saveuploadstudto
CREATE OR REPLACE PACKAGE SYJY_PACKAGE AS
TYPE SAVE_STU_CURSOR IS REF CURSOR;
END SYJY_PACKAGE;
CREATE OR REPLACE PROCEDURE SAVEUPLOADSTU(LIST_ IN SAVEUPLOADSTUDTOLIST,
RS OUT VARCHAR2,
STU_CURSOR OUT SYJY_PACKAGE.SAVE_STU_CURSOR) IS
STU_ID NUMBER;
STU_EXT_ID NUMBER;
BEGIN
FOR I IN 1 .. LIST_.COUNT() LOOP
IF (LIST_(I).STUID IS NOT NULL) THEN
SELECT SEQ_STUDENT.NEXTVAL INTO STU_EXT_ID FROM DUAL;
INSERT INTO SYJY_STUDENTEXTINFO
(ID,
STUDENT_ID,
APPLYDATE,
BUSTYPE,
CREATETIME,
STUDENTCODE,
STATUS,
BUSORG_ID,
STUDYHOURS)
VALUES
(STU_EXT_ID,
LIST_ (I).STUID,
LIST_ (I).APPLYDATE,
LIST_ (I).BUSTYPE,
SYSDATE,
LIST_ (I).STUCODE,
LIST_ (I).STATUS,
LIST_ (I).BUSORG,
0);
ELSE
SELECT SEQ_STUDENT.NEXTVAL INTO STU_ID FROM DUAL;
SELECT SEQ_STUDENT.NEXTVAL INTO STU_EXT_ID FROM DUAL;
INSERT INTO SYJY_STUDENT
(ID,
BIRTHDATE,
IDNUMBER,
NAME,
PASSWORD,
PHONE,
SAVETIME,
AREACODE,
SEX,
TRIANTYPE)
VALUES
(STU_ID,
LIST_ (I).BIRTHDATE,
LIST_ (I).IDNUMBER,
LIST_ (I).STUNAME,
LIST_ (I).PASSWORD,
LIST_ (I).PHONE,
SYSDATE,
LIST_ (I).AREACODE,
LIST_ (I).SEX,
LIST_ (I).TRIANTYPE);
INSERT INTO SYJY_STUDENTEXTINFO
(ID,
STUDENT_ID,
APPLYDATE,
BUSTYPE,
CREATETIME,
STUDENTCODE,
STATUS,
BUSORG_ID,
STUDYHOURS)
VALUES
(STU_EXT_ID,
STU_ID,
LIST_ (I).APPLYDATE,
LIST_ (I).BUSTYPE,
SYSDATE,
LIST_ (I).STUCODE,
LIST_ (I).STATUS,
LIST_ (I).BUSORG,
0);
END IF;
END LOOP;
OPEN STU_CURSOR FOR
SELECT STU_ID, STU_EXT_ID FROM DUAL;
RS := '操作成功!';
END SAVEUPLOADSTU;
LOG.info("接收文件:" + filedataFileName);
int discode = 0;
List<String[]> list = null;
try {
list = parseFile(filedata);
} catch (Exception e) {
discode = 1;
resultString = ERROR;
LOG.error("文件内容格式不正确!", e);
}
try {
if (discode == 0)
saveList(list);
// int nunm = 100000;
//
// int part = (int) Math.ceil(1.0*list.size()/nunm);
// for (int j = 1; j <= part; j++) {
// final List<String[]> subList;
// if(j!=part){
// subList = list.subList((j-1)*nunm, j*nunm);
// }else{
// subList = list.subList((j-1)*nunm, list.size());
// }
//
// new Thread() {
// @Override
// public void run() {
// try {
// saveList(subList);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }.start();
// }
} catch (Exception e) {
resultString = ERROR;
LOG.error("数据入库保存失败!", e);
}
try {
String filename = saveFile(discode, filedata);
LOG.info("保存文件完毕:" + filename);
} catch (IOException e) {
LOG.error("文件保存失败!", e);
}
LOG.info("处理文件完毕:" + filedataFileName);
return SUCCESS;
}
//保存信息
private void saveList(List<String[]> list) throws Exception {
int busType = Constants.Dic.BUSTYPE_SYJY;
int initStutas = Constants.Dic.STUDENT_STUTAS_INIT;
String pwd = CommStringUtil.makePasswordByIdNumber("123456");
if (list != null && list.size() > 0) {
Collection<String> codes = studentService.getExitStudentCode(); // 查询所有导入的学员编号
Map<String, Integer> idnums = studentService.getExitStudent(); // 查询所有导入的idnum
Map<String, Integer> areaOrg = studentService.getAreasOrg(); // 查询地区和组织机构的关系
Collection<SaveUploadStuDto> stus = new HashSet<SaveUploadStuDto>();
for (String[] content : list) {
if(codes.contains(content[2])){ // 重复导入,跳过
repeatNum++;
continue;
}
SaveUploadStuDto stu = new SaveUploadStuDto();
stu.setStudyTimes(0);
stu.setStudentCode(content[2]);
stu.setApplyDate(content[6]);
stu.setBusType(busType);
stu.setStatus(initStutas);
stu.setBusOrg(areaOrg.get(content[5])); // 设置组织id
if(idnums.containsKey(content[1])) { // 系统中存在的学员 , 保存ext信息
stu.setStuId(idnums.get(content[1]));
stu.setName(null);
stu.setIdNumber(null);
stu.setTrianType(null);
stu.setPhone(null);
stu.setAreacode(null);
stu.setSex(null);
stu.setBirthdate(null);
stu.setPassword(null);
}else{ // 系统中不存在的学员, 保存学员信息和ext信息
stu.setStuId(null);
stu.setName(content[0]);
stu.setIdNumber(content[1]);
if(0 != content[3].length()){
stu.setTrianType(content[3]);
}else{
stu.setTrianType(null);
}
if(0 != content[4].length()){
stu.setPhone(content[4]);
}else{
stu.setPhone(null);
}
stu.setAreacode(content[5]);
stu.setSex(getSexByIdnum(stu.getIdNumber(), stu.getStudentCode()));
stu.setBirthdate(getBirthdate(stu.getIdNumber(), stu.getStudentCode()));
if("0000-00-00".equals(stu.getBirthdate())){
stu.setPassword(pwd); // 异常身份证,密码为123456
}else{
stu.setPassword(CommStringUtil.makePasswordByIdNumber(stu.getIdNumber()));
}
}
stus.add(stu);
}
if(stus.size() > 0){
successNum = stus.size();
studentService.saveSynStudents(stus);
}
}
}
@Override
public boolean saveSynStudents(Collection<SaveUploadStuDto> stus) {
return studentDao.saveSynStudents(stus);
}
private Connection getConn() throws Exception {
return ((PoolableConnection) dataSource.getConnection().getMetaData().getConnection()).getDelegate();
}
private static ARRAY getOracleArr(Connection conn, String OracleObj,
String Oraclelist, Collection<SaveUploadStuDto> stus)
throws Exception {
ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,conn);
StructDescriptor structdesc = new StructDescriptor(OracleObj, conn);
STRUCT[] structs = new STRUCT[stus.size()];
int i = 0;
for (SaveUploadStuDto stu : stus) {
try {
Object[] result = {
stu.getStuId(),stu.getBusOrg(),stu.getStudyTimes(),stu.getStudentCode(),stu.getApplyDate(),stu.getBusType(),
stu.getStatus(),stu.getName(),stu.getIdNumber(),stu.getTrianType(),stu.getPhone(),stu.getAreacode(),stu.getSex(),
stu.getBirthdate(),stu.getPassword()
};
structs[i] = new STRUCT(structdesc, conn, result);
} catch (Exception e) {
e.printStackTrace();
}
i++;
}
return new ARRAY(desc, conn, structs);
}
@Override
public boolean saveSynStudents(Collection<SaveUploadStuDto> stus) {
boolean rs = true;
try {
Connection conn = getConn();
ARRAY array_ = getOracleArr(conn, "SAVEUPLOADSTUDTO", "SAVEUPLOADSTUDTOLIST", stus);
CallableStatement stmt = conn.prepareCall("{call saveuploadstu(?, ?, ?)}");
conn.setAutoCommit(false);
stmt.setArray(1, array_);
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);
stmt.execute();
String mName = stmt.getString(2);
ResultSet insertedStu = (ResultSet) stmt.getObject(3);
while(insertedStu.next()){
/* Object s1 = insertedStu.getObject(1);
Object s2 = insertedStu.getObject(2);*/
}
System.out.println("从oracle存储过程返回的结果:____________" + mName+"____________操作成功!".equals(mName));
conn.commit();
stmt.close();
} catch (Exception e) {
e.printStackTrace();
rs = false;
}
return rs;
}
CREATE OR REPLACE TYPE "SAVEUPLOADSTUDTO" AS OBJECT
(
STUID NUMBER,
BUSORG NUMBER,
STUDYTIMES NUMBER,
STUCODE NVARCHAR2(20),
APPLYDATE NVARCHAR2(20),
BUSTYPE NUMBER,
STATUS NUMBER,
STUNAME NVARCHAR2(20),
IDNUMBER NVARCHAR2(20),
TRIANTYPE NVARCHAR2(20),
PHONE NUMBER,
AREACODE NVARCHAR2(20),
SEX NVARCHAR2(10),
BIRTHDATE NVARCHAR2(20),
PASSWORD NVARCHAR2(50)
)
CREATE OR REPLACE TYPE "SAVEUPLOADSTUDTOLIST" AS TABLE OF saveuploadstudto
CREATE OR REPLACE PACKAGE SYJY_PACKAGE AS
TYPE SAVE_STU_CURSOR IS REF CURSOR;
END SYJY_PACKAGE;
CREATE OR REPLACE PROCEDURE SAVEUPLOADSTU(LIST_ IN SAVEUPLOADSTUDTOLIST,
RS OUT VARCHAR2,
STU_CURSOR OUT SYJY_PACKAGE.SAVE_STU_CURSOR) IS
STU_ID NUMBER;
STU_EXT_ID NUMBER;
BEGIN
FOR I IN 1 .. LIST_.COUNT() LOOP
IF (LIST_(I).STUID IS NOT NULL) THEN
SELECT SEQ_STUDENT.NEXTVAL INTO STU_EXT_ID FROM DUAL;
INSERT INTO SYJY_STUDENTEXTINFO
(ID,
STUDENT_ID,
APPLYDATE,
BUSTYPE,
CREATETIME,
STUDENTCODE,
STATUS,
BUSORG_ID,
STUDYHOURS)
VALUES
(STU_EXT_ID,
LIST_ (I).STUID,
LIST_ (I).APPLYDATE,
LIST_ (I).BUSTYPE,
SYSDATE,
LIST_ (I).STUCODE,
LIST_ (I).STATUS,
LIST_ (I).BUSORG,
0);
ELSE
SELECT SEQ_STUDENT.NEXTVAL INTO STU_ID FROM DUAL;
SELECT SEQ_STUDENT.NEXTVAL INTO STU_EXT_ID FROM DUAL;
INSERT INTO SYJY_STUDENT
(ID,
BIRTHDATE,
IDNUMBER,
NAME,
PASSWORD,
PHONE,
SAVETIME,
AREACODE,
SEX,
TRIANTYPE)
VALUES
(STU_ID,
LIST_ (I).BIRTHDATE,
LIST_ (I).IDNUMBER,
LIST_ (I).STUNAME,
LIST_ (I).PASSWORD,
LIST_ (I).PHONE,
SYSDATE,
LIST_ (I).AREACODE,
LIST_ (I).SEX,
LIST_ (I).TRIANTYPE);
INSERT INTO SYJY_STUDENTEXTINFO
(ID,
STUDENT_ID,
APPLYDATE,
BUSTYPE,
CREATETIME,
STUDENTCODE,
STATUS,
BUSORG_ID,
STUDYHOURS)
VALUES
(STU_EXT_ID,
STU_ID,
LIST_ (I).APPLYDATE,
LIST_ (I).BUSTYPE,
SYSDATE,
LIST_ (I).STUCODE,
LIST_ (I).STATUS,
LIST_ (I).BUSORG,
0);
END IF;
END LOOP;
OPEN STU_CURSOR FOR
SELECT STU_ID, STU_EXT_ID FROM DUAL;
RS := '操作成功!';
END SAVEUPLOADSTU;