Selaa lähdekoodia

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@665 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d

administrator 11 vuotta sitten
vanhempi
commit
3149fce68d

+ 24 - 15
src/main/java/com/uas/platform/b2b/core/BaseUtil.java

@@ -13,25 +13,34 @@ import org.springframework.stereotype.Component;
 @Component
 public class BaseUtil implements ApplicationContextAware {
 	private static ApplicationContext context;
-	
-//	目录结构: -SYSPATH(saas)
-//			  	-PATH(WEB-INF)
-//			  -FILEPATH(自定义附件目录)
-	//系统class加载路径 WEB-INF目录
+
+	// 目录结构: -SYSPATH(saas)
+	// -PATH(WEB-INF)
+	// -FILEPATH(自定义附件目录)
+	// 系统class加载路径 WEB-INF目录
 	public static String PATH;
-	//系统目录,saas
+	// 系统目录,saas
 	public static String SYSPATH;
-	//系统的附件的路径,默认与项目同级
+	// 系统的附件的路径,默认与项目同级
 	public static String FILEPATH;
 
-	public void setApplicationContext(ApplicationContext applicationContext)
-			throws BeansException {
+	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
 		context = applicationContext;
 		setPath();
 		setSysPath();
 		setFilePath();
 	}
-	
+
+	/**
+	 * 获取bean
+	 * 
+	 * @param cls
+	 * @return
+	 */
+	public static <T> T getBean(Class<T> cls) {
+		return context.getBean(cls);
+	}
+
 	@SuppressWarnings({ "rawtypes", "static-access" })
 	public static void setPath() {
 		Class classes = context.getClass();
@@ -43,22 +52,22 @@ public class BaseUtil implements ApplicationContextAware {
 		}
 		File file = new File(strRealPath);
 		BaseUtil.PATH = file.getParent() + file.separator;
-		if(BaseUtil.PATH.contains("/")){
+		if (BaseUtil.PATH.contains("/")) {
 			BaseUtil.PATH = "/" + BaseUtil.PATH;
 		}
 	};
-	
+
 	@SuppressWarnings("static-access")
 	public static void setSysPath() {
-		if(BaseUtil.PATH != null) {
+		if (BaseUtil.PATH != null) {
 			File file = new File(BaseUtil.PATH);
 			BaseUtil.SYSPATH = file.getParent() + file.separator;
 		}
 	}
-	
+
 	@SuppressWarnings("static-access")
 	public static void setFilePath() {
-		if(BaseUtil.SYSPATH != null) {
+		if (BaseUtil.SYSPATH != null) {
 			File file = new File(BaseUtil.SYSPATH);
 			BaseUtil.FILEPATH = file.getParent() + file.separator;
 		}

+ 9 - 1
src/main/java/com/uas/platform/b2b/erp/controller/InquiryController.java

@@ -16,10 +16,12 @@ import com.uas.platform.b2b.erp.model.Inquiry;
 import com.uas.platform.b2b.erp.model.InquiryDecide;
 import com.uas.platform.b2b.erp.model.InquiryDetail;
 import com.uas.platform.b2b.erp.service.InquiryService;
+import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
 import com.uas.platform.b2b.model.Attach;
 import com.uas.platform.b2b.model.FileUpload;
 import com.uas.platform.b2b.service.AttachService;
 import com.uas.platform.b2b.service.PurchaseInquiryService;
+import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 
 /**
@@ -42,6 +44,8 @@ public class InquiryController {
 	@Autowired
 	private AttachService attachService;
 
+	private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
+
 	/**
 	 * 将买家ERP的采购询价写到平台
 	 * 
@@ -55,6 +59,7 @@ public class InquiryController {
 		String jsonStr = URLDecoder.decode(data, "UTF-8");
 		List<Inquiry> inquiries = FlexJsonUtils.fromJsonArray(jsonStr, Inquiry.class);
 		purchaseInquiryService.save(inquiryService.convertInquiry(inquiries));
+		logger.log("上传询价单", inquiries.size());
 	}
 
 	/**
@@ -65,7 +70,9 @@ public class InquiryController {
 	@RequestMapping(value = "/reply", method = RequestMethod.GET)
 	@ResponseBody
 	public List<InquiryDetail> getReply() {
-		return inquiryService.convertPurchaseInquiryReply(purchaseInquiryService.findNotUploadReply());
+		List<InquiryDetail> details = inquiryService.convertPurchaseInquiryReply(purchaseInquiryService.findNotUploadReply());
+		logger.log("下载询价单报价结果", details.size());
+		return details;
 	}
 
 	/**
@@ -106,6 +113,7 @@ public class InquiryController {
 		Map<String, Map<String, Object>> fileList = FlexJsonUtils.fromJson(jsonStr);
 		List<Attach> attachs = attachService.uploadZipAndSave(uploadItem, "inquiry", "客户采购询价单附件", fileList);
 		purchaseInquiryService.saveAttach(attachs);
+		logger.log("询价单附件上传", attachs.size());
 	}
 
 }

+ 5 - 0
src/main/java/com/uas/platform/b2b/erp/controller/ProductController.java

@@ -13,7 +13,9 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import com.uas.platform.b2b.erp.model.Prod;
 import com.uas.platform.b2b.erp.service.ProdService;
+import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
 import com.uas.platform.b2b.service.ProductService;
+import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 
 /**
@@ -32,6 +34,8 @@ public class ProductController {
 
 	@Autowired
 	private ProductService productService;
+	
+	private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
 
 	/**
 	 * 将ERP的产品资料写到平台
@@ -46,6 +50,7 @@ public class ProductController {
 		String jsonStr = URLDecoder.decode(data, "UTF-8");
 		List<Prod> prods = FlexJsonUtils.fromJsonArray(jsonStr, Prod.class);
 		productService.save(prodService.convertProduct(prods));
+		logger.log("上传物料资料", prods.size());
 	}
 
 }

+ 10 - 1
src/main/java/com/uas/platform/b2b/erp/controller/PurchaseController.java

@@ -15,7 +15,9 @@ import com.uas.platform.b2b.erp.model.Purchase;
 import com.uas.platform.b2b.erp.model.PurchaseDetailEnd;
 import com.uas.platform.b2b.erp.model.PurchaseReply;
 import com.uas.platform.b2b.erp.service.PurchaseService;
+import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
 import com.uas.platform.b2b.service.PurchaseOrderService;
+import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 
 /**
@@ -35,6 +37,8 @@ public class PurchaseController {
 	@Autowired
 	private PurchaseOrderService purchaseOrderService;
 
+	private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
+
 	/**
 	 * 将ERP的采购订单写到平台
 	 * 
@@ -48,6 +52,7 @@ public class PurchaseController {
 		String jsonStr = URLDecoder.decode(data, "UTF-8");
 		List<Purchase> purchases = FlexJsonUtils.fromJsonArray(jsonStr, Purchase.class);
 		purchaseOrderService.save(purchaseService.convertPurchase(purchases));
+		logger.log("上传采购单", purchases.size());
 	}
 
 	/**
@@ -58,7 +63,9 @@ public class PurchaseController {
 	@RequestMapping(value = "/reply", method = RequestMethod.GET)
 	@ResponseBody
 	public List<PurchaseReply> getReply() {
-		return purchaseService.convertPurchaseOrderReply(purchaseOrderService.findNotUploadReply());
+		List<PurchaseReply> replies = purchaseService.convertPurchaseOrderReply(purchaseOrderService.findNotUploadReply());
+		logger.log("下载采购单回复记录", replies.size());
+		return replies;
 	}
 
 	/**
@@ -74,6 +81,7 @@ public class PurchaseController {
 		String jsonStr = URLDecoder.decode(data, "UTF-8");
 		List<PurchaseReply> replies = FlexJsonUtils.fromJsonArray(jsonStr, PurchaseReply.class);
 		purchaseOrderService.reply(purchaseService.convertPurchaseReply(replies));
+		logger.log("上传采购单主动回复", replies.size());
 	}
 
 	/**
@@ -100,6 +108,7 @@ public class PurchaseController {
 		String jsonStr = URLDecoder.decode(data, "UTF-8");
 		List<PurchaseDetailEnd> ends = FlexJsonUtils.fromJsonArray(jsonStr, PurchaseDetailEnd.class);
 		purchaseOrderService.saveItems(purchaseService.convertPurchaseEnd(ends));
+		logger.log("上传结案、反结案采购单", ends.size());
 	}
 
 }

+ 11 - 0
src/main/java/com/uas/platform/b2b/erp/dao/ErpLogDao.java

@@ -0,0 +1,11 @@
+package com.uas.platform.b2b.erp.dao;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import com.uas.platform.b2b.erp.model.ErpLog;
+
+@Repository
+public interface ErpLogDao extends JpaRepository<ErpLog, Long> {
+
+}

+ 163 - 0
src/main/java/com/uas/platform/b2b/erp/model/ErpLog.java

@@ -0,0 +1,163 @@
+package com.uas.platform.b2b.erp.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.core.logging.BufferedLogable;
+
+/**
+ * 与ERP交互的日志
+ * 
+ * @author yingp
+ * 
+ */
+@Entity
+@Table(name = "log$erp")
+public class ErpLog extends BufferedLogable implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "log$erp_gen")
+	@SequenceGenerator(name = "log$erp_gen", sequenceName = "log$erp_seq", allocationSize = 1)
+	@Column(name = "log_id")
+	private Long id;
+
+	@Column(name = "log_enuu")
+	private Long enUU;
+
+	@NotNull
+	@Column(name = "log_useruu")
+	private Long userUU;
+
+	/**
+	 * 日志时间
+	 */
+	@Column(name = "log_time")
+	private Long time;
+
+	/**
+	 * ip
+	 */
+	@Column(name = "log_ip")
+	private String ip;
+
+	@Column(name = "log_message")
+	private String message;
+
+	/**
+	 * 传输的总数据量
+	 */
+	@Column(name = "log_total")
+	private Integer total;
+
+	@JsonIgnore
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getEnUU() {
+		return enUU;
+	}
+
+	public void setEnUU(Long enUU) {
+		this.enUU = enUU;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public Long getTime() {
+		return time;
+	}
+
+	public void setTime(Long time) {
+		this.time = time;
+	}
+
+	public String getIp() {
+		return ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public Integer getTotal() {
+		return total;
+	}
+
+	public void setTotal(Integer total) {
+		this.total = total;
+	}
+
+	public ErpLog() {
+
+	}
+
+	public ErpLog(String message, int total) {
+		this.enUU = SystemSession.getUser().getEnterprise().getUu();
+		this.message = message;
+		this.time = new Date().getTime();
+		this.total = total;
+		this.userUU = SystemSession.getUser().getUserUU();
+		this.ip = SystemSession.getUser().getIp();
+	}
+
+	public void bufferedLog(String bufferedMessage) {
+		String[] strArray = bufferedMessage.split(separator);
+		if (strArray.length == 6) {
+			this.time = Long.parseLong(strArray[0]);
+			this.ip = strArray[1];
+			this.enUU = Long.parseLong(strArray[2]);
+			this.userUU = Long.parseLong(strArray[3]);
+			this.message = strArray[4];
+			this.total = Integer.parseInt(strArray[5]);
+		}
+	}
+
+	@Override
+	public String bufferedMessage() {
+		StringBuffer sb = new StringBuffer();
+		sb.append(this.time).append(separator);
+		sb.append(this.ip).append(separator);
+		sb.append(this.enUU).append(separator);
+		sb.append(this.userUU).append(separator);
+		sb.append(this.message).append(separator);
+		sb.append(this.total);
+		return sb.toString();
+	}
+
+}

+ 8 - 0
src/main/java/com/uas/platform/b2b/erp/service/ErpLogService.java

@@ -0,0 +1,8 @@
+package com.uas.platform.b2b.erp.service;
+
+import com.uas.platform.b2b.erp.model.ErpLog;
+import com.uas.platform.core.logging.LogService;
+
+public interface ErpLogService extends LogService<ErpLog>{
+	
+}

+ 26 - 0
src/main/java/com/uas/platform/b2b/erp/service/impl/ErpLogServiceImpl.java

@@ -0,0 +1,26 @@
+package com.uas.platform.b2b.erp.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.uas.platform.b2b.erp.dao.ErpLogDao;
+import com.uas.platform.b2b.erp.model.ErpLog;
+import com.uas.platform.b2b.erp.service.ErpLogService;
+
+@Service
+public class ErpLogServiceImpl implements ErpLogService {
+
+	@Autowired
+	private ErpLogDao erpLogDao;
+
+	@Override
+	public void save(ErpLog log) {
+		erpLogDao.save(log);
+	}
+
+	@Override
+	public void save(Iterable<ErpLog> logs) {
+		erpLogDao.save(logs);
+	}
+
+}

+ 32 - 0
src/main/java/com/uas/platform/b2b/erp/support/ErpBufferedLogger.java

@@ -0,0 +1,32 @@
+package com.uas.platform.b2b.erp.support;
+
+import com.uas.platform.b2b.core.BaseUtil;
+import com.uas.platform.b2b.erp.model.ErpLog;
+import com.uas.platform.b2b.erp.service.ErpLogService;
+import com.uas.platform.core.logging.BufferedLogger;
+
+/**
+ * erp交互的异步日志记录的工具
+ * 
+ * @author yingp
+ *
+ */
+public class ErpBufferedLogger extends BufferedLogger<ErpLog> {
+
+	public ErpBufferedLogger() {
+		super(BaseUtil.FILEPATH, ErpLog.class, BaseUtil.getBean(ErpLogService.class));
+	}
+
+	/**
+	 * 记录erp交互日志
+	 * 
+	 * @param message
+	 *            消息
+	 * @param total
+	 *            数据量
+	 */
+	public void log(String message, int total) {
+		log(new ErpLog(message, total));
+	}
+	
+}

+ 31 - 0
src/main/java/com/uas/platform/b2b/erp/support/ErpLogTask.java

@@ -0,0 +1,31 @@
+package com.uas.platform.b2b.erp.support;
+
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import com.uas.platform.core.logging.BufferedLoggerManager;
+
+/**
+ * 定时任务<br>
+ * 将erp交互的日志文件的内容每隔30秒持久化一次
+ * 
+ * @author yingp
+ *
+ */
+@Component
+@EnableAsync
+@EnableScheduling
+public class ErpLogTask {
+
+	private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
+
+	@Scheduled(fixedRate = 30 * 1000)
+	@Async
+	public void execute() {
+		logger.switchOver();
+	}
+
+}

+ 2 - 0
src/main/java/com/uas/platform/b2b/filter/SecurityInterceptor.java

@@ -164,6 +164,7 @@ public class SecurityInterceptor extends AbstractSecurityInterceptor implements
 						}
 					}
 				}
+				authedUser.setIp(AgentUtils.getIp(request));
 				request.getSession().setAttribute("user", authedUser);
 				SystemSession.setUser(authedUser);
 				// 记录登录日志
@@ -222,6 +223,7 @@ public class SecurityInterceptor extends AbstractSecurityInterceptor implements
 				request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY,
 						SecurityContextHolder.getContext());
 				user.setCurrentEnterprise();
+				user.setIp(AgentUtils.getIp(request));
 				request.getSession().setAttribute("user", user);
 			} else
 				throw new UsernameNotFoundException(username + " 账号或密码错误");

+ 16 - 0
src/main/java/com/uas/platform/b2b/model/User.java

@@ -103,6 +103,13 @@ public class User implements Serializable {
 	@OrderBy("id")
 	@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
 	private Set<Role> roles;
+	
+	/**
+	 * 最近登录IP地址
+	 */
+	@Transient
+	@NotFound(action = NotFoundAction.IGNORE)
+	private String ip;
 
 	public Long getUserUU() {
 		return userUU;
@@ -241,4 +248,13 @@ public class User implements Serializable {
 		return getIssys() != null && getIssys() == Constant.YES;
 	}
 
+	@JsonIgnore
+	public String getIp() {
+		return ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+
 }

+ 1 - 0
src/main/java/com/uas/platform/b2b/support/CustomAuthenticationSuccessHandler.java

@@ -96,6 +96,7 @@ public class CustomAuthenticationSuccessHandler extends SimpleUrlAuthenticationS
 				}
 			}
 		}
+		user.setIp(AgentUtils.getIp(request));
 		request.getSession().setAttribute("user", user);
 		// 记录登录日志
 		SitePreference preference = getDefaultSitePreferenceForDevice(this.deviceResolver.resolveDevice(request));