Browse Source

Merge remote-tracking branch 'origin/dev/one' into dev/one

zhaops 6 năm trước cách đây
mục cha
commit
0cd1d7a237

+ 6 - 1
user-service/pom.xml

@@ -200,7 +200,12 @@
             <version>3.3.1</version>
             <scope>compile</scope>
         </dependency>
-
+<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
+<dependency>
+<groupId>org.apache.poi</groupId>
+<artifactId>poi</artifactId>
+<version>3.6</version>
+</dependency>
     </dependencies>
 
     <build>

+ 58 - 0
user-service/src/main/java/com/diagbot/dto/UserInfoExportDTO.java

@@ -0,0 +1,58 @@
+package com.diagbot.dto;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import lombok.Getter;
+import lombok.Setter;
+
+
+/**
+ * 
+ * @Description: 导出类
+ * @author wangfeng
+ * @date 2018年9月25日 上午11:08:24
+ */
+@Setter
+@Getter
+public class UserInfoExportDTO {
+	private static final long serialVersionUID = 1L;
+    private Long userId;//用户ID
+    private Date userGmtCreate;//记录创建时间
+    private String userName;// 用户名
+    private String linKman;//联系人
+    private String email;// 邮箱
+    private Long orgId;//机构ID
+    private Date orgGmtCreate;//记录创建时间
+    private String orgName;//机构名称
+    private Integer orgType;//机构属性
+    private String orgPrincipal;//负责人
+    private String orgAddress;//机构地址
+    private Long orgParentId;//上级机构id
+    private Integer orgSubNum;//下属机构数量
+    private String autPosition;//岗位信息
+    private Integer autIsReject;//是否通过认证 N:未通过,Y:已通过
+    private Integer autStatus;//认证状态
+    
+    public UserInfoExportDTO(Long userId, Date userGmtCreate, String userName, String linKman, String email, Long orgId,
+			String orgName, Integer orgType, String orgPrincipal, String orgAddress, Long orgParentId,
+			Integer orgSubNum, String autPosition, Integer autIsReject, Integer autStatus) {
+		this.userId = userId;
+		this.userGmtCreate=userGmtCreate;
+		this.userName=userName;
+		this.linKman=linKman;
+		this.email=email;
+		this.orgId=orgId;
+		this.orgName=orgName;
+		this.orgType=orgType;
+		this.orgPrincipal=orgPrincipal;
+		this.orgAddress=orgAddress;
+		this.orgParentId=orgParentId;
+		this.orgSubNum=orgSubNum;
+		this.autPosition=autPosition;
+		this.autIsReject=autIsReject;
+		this.autStatus=autStatus;
+	}
+}

+ 4 - 0
user-service/src/main/java/com/diagbot/mapper/UserMapper.java

@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.dto.UserInfoDTO;
+import com.diagbot.dto.UserInfoExportDTO;
 import com.diagbot.dto.UserOrgDTO;
 import com.diagbot.entity.User;
+import com.diagbot.vo.UserExportVO;
 import com.diagbot.vo.UserInfoOrganizationsVO;
 import org.apache.ibatis.annotations.Param;
 
@@ -41,5 +43,7 @@ public interface UserMapper extends BaseMapper<User> {
     public boolean auditUserInfoAll(@Param("auditMap") Map<String,Object> auditMap);
     
     public Integer updateById(Map<String,String> map);
+    
+    public List<UserInfoExportDTO> dependentuserInfoByTime(@Param("userExport") Map<String,Object> map);
 
 }

+ 5 - 0
user-service/src/main/java/com/diagbot/service/UserService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.UserInfoDTO;
+import com.diagbot.dto.UserInfoExportDTO;
 import com.diagbot.dto.UserOrgDTO;
 import com.diagbot.entity.User;
 import com.diagbot.vo.UserInfoOrganizationsVO;
@@ -11,6 +12,8 @@ import com.diagbot.vo.UserInfoOrganizationsVO;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.ibatis.annotations.Param;
+
 /**
  * <p>
  *  服务类
@@ -38,4 +41,6 @@ public interface UserService extends IService<User> {
     public List<UserOrgDTO> getUserOrgByIds(List<Long> userIds);
 
     public boolean auditUserInfoAll(Map<String,Object> auditMap);
+    
+    public List<UserInfoExportDTO> dependentuserInfoByTime(Map<String,Object> map);
 }

+ 7 - 0
user-service/src/main/java/com/diagbot/service/impl/UserServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.UserInfoDTO;
+import com.diagbot.dto.UserInfoExportDTO;
 import com.diagbot.dto.UserOrgDTO;
 import com.diagbot.entity.User;
 import com.diagbot.mapper.UserMapper;
@@ -74,4 +75,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 	    return baseMapper.auditUserInfoAll(auditMap);
     }
 
+	@Override
+	public List<UserInfoExportDTO> dependentuserInfoByTime(Map<String, Object> map) {
+		
+		return baseMapper.dependentuserInfoByTime(map);
+	}
+
 }

+ 152 - 0
user-service/src/main/java/com/diagbot/util/ExportBeanExcelUtil.java

@@ -0,0 +1,152 @@
+package com.diagbot.util;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+
+import com.diagbot.dto.RespDTO;
+
+@SuppressWarnings( { "deprecation" })
+	public class ExportBeanExcelUtil<T> {
+	    private final String MSG_SUCCESS = "操作成功!";
+	    private final String MSG_ERROR = "操作失败!";
+
+		    /**
+		     * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出
+		     *
+		     * title         表格标题名
+		     * headersName  表格属性列名数组
+		     * headersId    表格属性列名对应的字段---你需要导出的字段名(为了更灵活控制你想要导出的字段)
+		     *  dtoList     需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象
+		     *  out         与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
+		     */
+		    public   RespDTO exportExcel(String title, List<String> headersName,List<String> headersId,
+		                            List<T> dtoList,String lujing,String fileName) {
+		        /*(一)表头--标题栏*/
+		        Map<Integer, String> headersNameMap = new HashMap<>();
+		        int key=0;
+		        for (int i = 0; i < headersName.size(); i++) {
+		            if (!headersName.get(i).equals(null)) {
+		                headersNameMap.put(key, headersName.get(i));
+		                key++;
+		            }
+		        }
+		        /*(二)字段*/
+		        Map<Integer, String> titleFieldMap = new HashMap<>();
+		        int value = 0;
+		        for (int i = 0; i < headersId.size(); i++) {
+		            if (!headersId.get(i).equals(null)) {
+		                titleFieldMap.put(value, headersId.get(i));
+		                value++;
+		            }
+		        }
+		        /* (三)声明一个工作薄:包括构建工作簿、表格、样式*/
+		        HSSFWorkbook wb = new HSSFWorkbook();
+		        HSSFSheet sheet = wb.createSheet(title);
+		        sheet.setDefaultColumnWidth((short)15);
+		        // 生成一个样式
+		        HSSFCellStyle style = wb.createCellStyle();
+		        HSSFRow row = sheet.createRow(0);
+		        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+		        HSSFCell cell;
+		        Collection c = headersNameMap.values();//拿到表格所有标题的value的集合
+		        Iterator<String> it = c.iterator();//表格标题的迭代器
+		        /*(四)导出数据:包括导出标题栏以及内容栏*/
+		        //根据选择的字段生成表头
+		        short size = 0;
+		        while (it.hasNext()) {
+		            cell = row.createCell(size);
+		            cell.setCellValue(it.next().toString());
+		            cell.setCellStyle(style);
+		            size++;
+		        }
+		        //表格标题一行的字段的集合
+		        Collection zdC = titleFieldMap.values();
+		        Iterator<T> labIt = dtoList.iterator();//总记录的迭代器
+		        int zdRow =0;//列序号
+		        while (labIt.hasNext()) {//记录的迭代器,遍历总记录
+		            int zdCell = 0;
+		            zdRow++;
+		            row = sheet.createRow(zdRow);
+		            T l = (T) labIt.next();
+		            // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
+		            Field[] fields = l.getClass().getDeclaredFields();//获得JavaBean全部属性
+		            for (short i = 0; i < fields.length; i++) {//遍历属性,比对
+		                Field field = fields[i];
+		                String fieldName = field.getName();//属性名
+		                Iterator<String> zdIt = zdC.iterator();//一条字段的集合的迭代器
+		                while (zdIt.hasNext()) {//遍历要导出的字段集合
+		                    if (zdIt.next().equals(fieldName)) {//比对JavaBean的属性名,一致就写入,不一致就丢弃
+		                        String getMethodName = "get"
+		                                + fieldName.substring(0, 1).toUpperCase()
+		                                + fieldName.substring(1);//拿到属性的get方法
+		                        Class tCls = l.getClass();//拿到JavaBean对象
+		                        try {
+		                            Method getMethod = tCls.getMethod(getMethodName,
+		                                    new Class[] {});//通过JavaBean对象拿到该属性的get方法,从而进行操控
+		                            Object val = getMethod.invoke(l, new Object[] {});//操控该对象属性的get方法,从而拿到属性值
+		                            String textVal = null;
+		                            if (val!= null) {
+		                                textVal = String.valueOf(val);//转化成String
+		                            }else{
+		                                textVal = null;
+		                            }
+		                            row.createCell((short) zdCell).setCellValue(textVal);//写进excel对象
+		                            zdCell++;
+		                        } catch (SecurityException e) {
+		                            e.printStackTrace();
+		                        } catch (IllegalArgumentException e) {
+		                            e.printStackTrace();
+		                        } catch (NoSuchMethodException e) {
+		                            e.printStackTrace();
+		                        } catch (IllegalAccessException e) {
+		                            e.printStackTrace();
+		                        } catch (InvocationTargetException e) {
+		                            e.printStackTrace();
+		                        }
+		                    }
+		                }
+		            }
+		        }
+		        RespDTO resultMode = new RespDTO();
+		        try {
+		        	
+		        	 
+		            FileOutputStream exportXls = new FileOutputStream(lujing+fileName+".xls");
+		            wb.write(exportXls);
+		            exportXls.close();
+/*		            resultMode.setResult(true);
+		            resultMode.setMessage(MSG_SUCCESS);*/
+		            resultMode.onSuc(MSG_SUCCESS);
+		            System.out.println("导出成功!");
+		        } catch (FileNotFoundException e) {
+/*		            System.out.println("导出失败!");
+		            resultMode.setResult(false);
+			        resultMode.setMessage(MSG_ERROR);*/
+		        	 resultMode.onSuc(MSG_ERROR);
+		            e.printStackTrace();
+		        } catch (IOException e) {
+		        	 resultMode.onSuc(MSG_ERROR);
+		            System.out.println("导出失败!");
+		            e.printStackTrace();
+		        }
+		        
+		        return resultMode;
+		    }
+}

+ 23 - 0
user-service/src/main/java/com/diagbot/vo/UserExportVO.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import java.text.SimpleDateFormat;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 
+ * @Description: 导出功能传参
+ * @author wangfeng
+ * @date 2018年9月25日 上午10:41:08
+ */
+@Getter
+@Setter
+public class UserExportVO {
+	
+	private String startTime;
+	private String endTime;
+	private String filePath;//文件路径
+    private String fileName;//文件名
+
+}

+ 142 - 0
user-service/src/main/java/com/diagbot/web/ReportFormController.java

@@ -0,0 +1,142 @@
+package com.diagbot.web;
+
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.UserInfoDTO;
+import com.diagbot.dto.UserInfoExportDTO;
+import com.diagbot.facade.UserFacade;
+import com.diagbot.util.ExportBeanExcelUtil;
+import com.diagbot.vo.UserExportVO;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 
+ * @Description: 客户中心导出功能
+ * @author wangfeng
+ * @date 2018年9月25日 上午9:45:56
+ */
+@RestController
+@Api(value = "客户中心导出功能API", tags = { "客户中心导出功能API" })
+@RequestMapping("/report")
+@SuppressWarnings("unchecked")
+public class ReportFormController {
+	
+	@Autowired
+	private UserFacade userFacade;
+	
+	@ApiOperation(value = "导出用户信息和机构信息:[by:wangfeng]", notes = "根据时间 导出用户信息和机构信息")
+	@PostMapping("/exportUserInfo")
+	@SysLogger("/exportUserInfo")
+	@Transactional
+	public RespDTO export(final HttpServletRequest request, final HttpServletResponse response,UserExportVO userExportVO)
+			throws Exception {
+		Map<String, Object> userMap = new HashMap<String, Object>();
+		userMap.put("startTime", userExportVO.getStartTime());
+		userMap.put("endTime", userExportVO.getEndTime());
+		List<UserInfoExportDTO> datas = userFacade.dependentuserInfoByTime(userMap);
+		List<String> listName = new ArrayList<>();
+
+		listName.add("用户id");
+		listName.add("记录创建时间");
+		listName.add("用户名");
+		listName.add("联系人");
+		listName.add("邮箱");
+		listName.add("机构ID");
+		listName.add("机构名称");
+		listName.add("机构属性");
+		listName.add("负责人");
+		listName.add("机构地址");
+		listName.add("上级机构id");
+		listName.add("下属机构数量");
+		listName.add("岗位信息");
+		listName.add("是否通过认证 ");
+		listName.add("认证状态");
+		
+		List<String> listId = new ArrayList<>();
+		listId.add("userId");//用户ID
+		listId.add("userGmtCreate");//记录创建时间
+		listId.add("userName");// 用户名
+		listId.add("linKman");//联系人
+		listId.add("email");// 邮箱
+		listId.add("orgId");//机构ID
+		//listId.add("orgGmtCreate");//记录创建时间
+		listId.add("orgName");//机构名称
+		listId.add("orgType");//机构属性
+		listId.add("orgPrincipal");//负责人
+        listId.add("orgAddress");//机构地址
+        listId.add("orgParentId");//上级机构id
+        listId.add("orgSubNum");//下属机构数量
+        listId.add("autPosition");//岗位信息
+        listId.add("autIsReject");//是否通过认证 N:未通过,Y:已通过
+        listId.add("autStatus");//认证状态
+		
+		List<UserInfoExportDTO> list = new ArrayList<>();
+		for (int i = 0; i < datas.size(); i++) {
+			UserInfoExportDTO userInfo = datas.get(i); 
+			list.add(new UserInfoExportDTO(userInfo.getUserId(),
+					userInfo.getUserGmtCreate(),
+					userInfo.getUserName(),
+					userInfo.getLinKman(),
+					userInfo.getEmail(),
+					userInfo.getOrgId(),
+					userInfo.getOrgName(),
+					userInfo.getOrgType(),
+					userInfo.getOrgPrincipal(),
+					userInfo.getOrgAddress(),
+					userInfo.getOrgParentId(),
+					userInfo.getOrgSubNum(),
+					userInfo.getAutPosition(),
+					userInfo.getAutIsReject(),
+					userInfo.getAutStatus()));
+		}
+		response.setContentType("text/html;charset=UTF-8");
+		String filePath =userExportVO.getFilePath();//文件路径
+		SimpleDateFormat df = new SimpleDateFormat();//设置日期格式
+        System.out.println();// new Date()为获取当前系统时间
+		String fileName = userExportVO.getFileName();//文件名
+		ExportBeanExcelUtil ex = new ExportBeanExcelUtil();
+		RespDTO resul = ex.exportExcel("测试POI导出EXCEL文档", listName, listId, list,filePath,fileName);
+		 return resul;
+	}
+
+	// 发送响应流方法
+	public void setResponseHeader(HttpServletResponse response, String fileName) {
+		try {
+			try {
+				fileName = new String(fileName.getBytes(), "ISO8859-1");
+			} catch (UnsupportedEncodingException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			response.setContentType("application/octet-stream;charset=ISO8859-1");
+			response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+			response.addHeader("Pargam", "no-cache");
+			response.addHeader("Cache-Control", "no-cache");
+		} catch (Exception ex) {
+			ex.printStackTrace();
+		}
+	}
+
+}

+ 4 - 6
user-service/src/main/java/com/diagbot/web/UserInfoController.java

@@ -9,8 +9,6 @@ import com.diagbot.entity.Organization;
 import com.diagbot.entity.User;
 import com.diagbot.entity.UserAuthentication;
 import com.diagbot.entity.UserOrganization;
-import com.diagbot.exception.CommonErrorCode;
-import com.diagbot.exception.CommonException;
 import com.diagbot.facade.OrganizationFacade;
 import com.diagbot.facade.UserAuthenticationFacade;
 import com.diagbot.facade.UserFacade;
@@ -97,7 +95,7 @@ public class UserInfoController {
 	@PostMapping("/auditUserInfoAll")
 	@SysLogger("auditUserInfoAll")
 	@Transactional
-	public RespDTO<Boolean> auditUserInfoAll(@Valid @RequestBody UserInfoAuditVO userInfoAuditVO) {
+	public RespDTO<UserInfoAuditVO> auditUserInfoAll(@Valid @RequestBody UserInfoAuditVO userInfoAuditVO) {
 		Map<String, Object> auditMap = new HashMap<String, Object>();
 		auditMap.put("userId", userInfoAuditVO.getUserId());
 		auditMap.put("modifier",UserUtils.getCurrentPrincipleID());
@@ -108,10 +106,10 @@ public class UserInfoController {
 		// TODO 审核前先验证该用户的的认证状态
 		boolean res = userFacade.auditUserInfoAll(auditMap);
 
-		if (!res){
-			throw new CommonException(CommonErrorCode.UPDATE_INFO_FAIL);
+		if (res == true) {
+			return RespDTO.onSuc("审核通过!");
 		}
-		return RespDTO.onSuc(res);
+		return RespDTO.onSuc("审核失败!");
 	}
 
 	@ApiOperation(value = "删除用户信息和机构信息", notes = "用户信息和机构信息")

+ 36 - 0
user-service/src/main/resources/mapper/UserMapper.xml

@@ -235,5 +235,41 @@
 
 </update>
 
+<select id="dependentuserInfoByTime" parameterType="java.util.Map" resultType="com.diagbot.dto.UserInfoExportDTO" >
 
+	SELECT
+	u.id AS userId,
+	u.gmt_create AS userGmtCreate,
+	u.username AS userName,
+	u.linkman AS linKman,
+	u.email AS email,
+	org.id AS orgId,
+	org.gmt_create AS orgGmtCreate,
+	org.name AS orgName,
+	org.type,
+	org.principal AS orgPrincipal,
+	org.address,
+	org.parent_id,
+	org.sub_num,
+	aut.position,
+	aut.is_reject,
+	aut.status
+	FROM sys_user u
+	LEFT JOIN sys_user_organization uorg ON u.id = uorg.user_id
+	LEFT JOIN sys_organization org ON uorg.organization_id = org.id
+	LEFT JOIN sys_user_authentication aut ON u.id = aut.user_id
+	WHERE 
+	u.is_deleted = 'N' 
+	AND u.TYPE = "0" 
+    <if test="userExport.orgName != null">
+	   AND org.name LIKE CONCAT('%', #{userInfo.orgName}, '%') 
+	</if>
+	<if test="userExport.autStatus != null">
+	   AND aut.status = #{userInfo.autStatus}  
+	</if> 
+	<if test="userExport.startTime != null and userExport.endDate != null">
+	AND u.gmt_create BETWEEN #{userExport.startTime} and #{userExport.endTime}
+	</if>
+	ORDER BY u.gmt_create DESC
+</select>
 </mapper>