Commit 6d66a531 authored by reedmi's avatar reedmi

Merge remote-tracking branch 'os/custom-for-wangli'

parents 77efda47 4365dd18

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

/bin/
/target/
.classpath
.project
.settings
/filters/dev
upload/
jdbc.username=root
jdbc.password=
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.originspark.drp</groupId>
<artifactId>drp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>drp Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<junit.version>4.11</junit.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>1.7</jdk.version>
<hibernate.version>4.2.0.Final</hibernate.version>
<mysql.connector.version>5.1.21</mysql.connector.version>
<spring.version>3.2.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- DB related dependencies -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.1.GA</version>
</dependency>
<!-- SPRING -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<filters.env>dev</filters.env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<filters.env>prod</filters.env>
</properties>
</profile>
</profiles>
<build>
<finalName>drp</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<filters>
<filter>${basedir}/filters/${filters.env}/jdbc.properties</filter>
</filters>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-javac</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8080</port>
<path>/drp</path>
<uriEncoding>UTF-8</uriEncoding>
<finalName>drp</finalName>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.originspark.drp.controllers;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.originspark.drp.models.User;
import com.originspark.drp.service.projects.inventories.InventoryService;
import com.originspark.drp.service.projects.invoices.StockInInvoiceService;
import com.originspark.drp.service.projects.invoices.StockOutInvoiceService;
import com.originspark.drp.service.resources.VendorService;
import com.originspark.drp.service.resources.WareCategoryService;
import com.originspark.drp.service.resources.WareService;
import com.originspark.drp.service.users.UserService;
import com.originspark.drp.util.json.Jackson;
public class BaseController extends HandlerInterceptorAdapter {
@Autowired
protected UserService userService;
@Autowired
protected WareService wareService;
@Autowired
protected WareCategoryService wareCategoryService;
@Autowired
protected VendorService vendorService;
@Autowired
protected StockInInvoiceService stockInInvoiceService;
@Autowired
protected StockOutInvoiceService stockOutInvoiceService;
@Autowired
protected InventoryService inventoryService;
private static final ThreadLocal<HttpServletRequest> REQUEST = new ThreadLocal<HttpServletRequest>();
private static final ThreadLocal<HttpServletResponse> RESPONSE = new ThreadLocal<HttpServletResponse>();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
REQUEST.set(request);
RESPONSE.set(response);
return super.preHandle(request, response, handler);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
REQUEST.remove();
RESPONSE.remove();
if (ex != null) {
response.sendError(500);
}
super.afterCompletion(request, response, handler, ex);
}
public HttpServletRequest request() {
return REQUEST.get();
}
public HttpServletResponse response() {
return RESPONSE.get();
}
public HttpSession session() {
return request().getSession();
}
public User getCurrentUser() {
return (User)session().getAttribute("user");
}
// 一般用于create、update、delete的返回值
protected final static String ok(String message) {
Map<String, Object> modelMap = new HashMap<String, Object>(2);
modelMap.put("success", "true");
modelMap.put("message", message);
return Jackson.toJson(modelMap);
}
protected final static String ok(String message, Object object) {
Map<String, Object> modelMap = new HashMap<String, Object>(3);
modelMap.put("success", "true");
modelMap.put("message", message);
modelMap.put("object", object);
return Jackson.toJson(modelMap);
}
// 一般用于list分页数据的返回值
@SuppressWarnings("rawtypes")
protected final static String ok(List items, Long total) {
Map<String, Object> modelMap = new HashMap<String, Object>(3);
modelMap.put("success", "true");
modelMap.put("data", items);
modelMap.put("total", total);
return Jackson.toJson(modelMap);
}
// 一般用于list不分页的返回值
@SuppressWarnings("rawtypes")
protected final static String ok(List items) {
Map<String, Object> modelMap = new HashMap<String, Object>(2);
modelMap.put("success", "true");
modelMap.put("data", items);
return Jackson.toJson(modelMap);
}
// 失败信息的处理
protected final static String failure(String message) {
Map<String, Object> modelMap = new HashMap<String, Object>(2);
modelMap.put("success", "false");
modelMap.put("message", message);
return Jackson.toJson(modelMap);
}
}
package com.originspark.drp.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class MainController {
@RequestMapping("index")
public String index(){
return "index";
}
@RequestMapping(value="main",method=RequestMethod.GET)
public String main(){
return "main";
}
}
package com.originspark.drp.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.originspark.drp.models.User;
import com.originspark.drp.util.Blowfish;
import com.originspark.drp.util.SessionUtil;
import com.originspark.drp.util.json.PasswordJson;
@Controller
@RequestMapping("profile")
public class ProfileController extends BaseController {
@RequestMapping(value="/password/update",method = RequestMethod.GET)
@ResponseBody
public String updatePassword(@RequestParam String data){
System.out.println(request().getSession());
ObjectMapper mapper = new ObjectMapper();
try {
PasswordJson json = mapper.readValue(data, PasswordJson.class);
if(!json.getNewpwd().equals(json.getNewpwdagain())){
return failure("修改失败,密码两次输入不一致");
}
User user = SessionUtil.getCurrentUser(request());
Blowfish bf = new Blowfish();
String pwd = bf.decryptString(user.getPassword());
if(!json.getPwd().equals(pwd)){
return failure("修改失败,请输入正确的原始密码");
}
user.setPassword(json.getNewpwd());
userService.update(user);
} catch (Exception e) {
e.printStackTrace();
return failure("系统出现异常,修改失败");
}
return ok("密码修改成功");
}
}
package com.originspark.drp.controllers;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.originspark.drp.models.User;
import com.originspark.drp.util.SessionUtil;
import com.originspark.drp.util.enums.Status;
import com.originspark.drp.util.enums.UserType;
import com.originspark.drp.util.json.FilterRequest;
import com.originspark.drp.util.json.IdsJson;
import com.originspark.drp.util.json.JsonUtils;
@Controller
@RequestMapping("users")
public class UserController extends BaseController {
@RequestMapping(value="/{type}", method = RequestMethod.POST)
@ResponseBody
public String create(@PathVariable String type, @RequestBody User user) {
if(type == null || "".equals(type)) {
return ok("参数错误");
}
User currentUser = getCurrentUser();
if(currentUser == null || !UserType.MANAGER.equals(currentUser.getType())) {
return ok("权限不足");
}
user.setType(UserType.valueOf(type.toUpperCase()));
user.setPassword("123456");
userService.save(user);
return ok("创建成功");
}
@RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable String type, @PathVariable Long id) {
if(type == null || "".equals(type) || id == null || id < 1) {
return ok("参数错误");
}
User currentUser = getCurrentUser();
if(currentUser == null || !UserType.MANAGER.equals(currentUser.getType())) {
return ok("权限不足");
}
User leader = userService.findById(User.class, id);
leader.setStatus(Status.DESTORYED);
userService.update(leader);
return ok("注销成功");
}
@RequestMapping(value= "/{type}/deleteBatch",method = RequestMethod.GET)
@ResponseBody
public String deleteBatch(@PathVariable String type, HttpServletRequest request){
if(type == null || "".equals(type)) {
return ok("参数错误");
}
User currentUser = getCurrentUser();
if(currentUser == null || !UserType.MANAGER.equals(currentUser.getType())) {
return ok("权限不足");
}
String data = request.getParameter("data");
ObjectMapper mapper = new ObjectMapper();
IdsJson json=null;
try {
json = mapper.readValue(data, IdsJson.class);
} catch (Exception e) {
return failure("提交数据有误");
}
if(json == null){
return failure("没有需要审核的数据");
}
for(long id:json.getIds()){
User leader = userService.findById(User.class, id);
leader.setStatus(Status.DESTORYED);
userService.update(leader);
}
return ok("注销成功");
}
@RequestMapping(value = "/{type}/{id}", method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable String type, @PathVariable Long id, @RequestBody User user) {
if(type == null || "".equals(type) || id == null || id < 1) {
return ok("参数错误");
}
User currentUser = getCurrentUser();
if(currentUser == null || !UserType.MANAGER.equals(currentUser.getType())) {
return ok("权限不足");
}
User existingLeader = userService.findById(User.class, id);
if (existingLeader == null) {
return failure("您要更新的领导不存在");
}
existingLeader.setName(user.getName());
existingLeader.setCode(user.getCode());
existingLeader.setGender(user.getGender());
existingLeader.setPhone(user.getPhone());
existingLeader.setAddress(user.getAddress());
existingLeader.setEmail(user.getEmail());
existingLeader.setStatus(user.getStatus());
userService.update(existingLeader);
return ok("更新成功");
}
@RequestMapping(value="/{type}", method = RequestMethod.GET)
@ResponseBody
public String list(@PathVariable String type, @RequestParam int start, @RequestParam int limit,@RequestParam(required = false) Object filter) {
List<FilterRequest> filters = new ArrayList<FilterRequest>();
filters.add(new FilterRequest("type", type.toUpperCase()));
if (filter != null) {
filters.addAll(JsonUtils.getListFromJsonArray(filter));
}
List<User> data = userService.pagedDataSet(start, limit,filters);
Long count = userService.pagedDataCount(filters);
return ok(data, count);
}
}
package com.originspark.drp.controllers.account;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
// import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.originspark.drp.controllers.BaseController;
import com.originspark.drp.models.User;
import com.originspark.drp.service.account.AccountService;
import com.originspark.drp.util.Blowfish;
@Controller
@RequestMapping("account")
public class AccountController extends BaseController {
@Autowired
private AccountService service;
private Logger logger = Logger.getLogger(AccountController.class);
@RequestMapping(value = "login", method = RequestMethod.POST)
public ModelAndView login(@RequestParam("username") String username, @RequestParam("password") String password, HttpSession session) {
ModelAndView mav = new ModelAndView();
Blowfish bf = new Blowfish();
List<User> users = service.validate(username, password);
if (users.size() == 0) {
mav.setViewName("index");
mav.addObject("msg", "该用户不存在!");
} else {
int i;
for (i = 0; i < users.size(); i++) {
if (bf.decryptString(users.get(i).getPassword()).equals(password)) {
User user = users.get(i);
// 将当前登录用户的信息存入session
session.setAttribute("user", user);
mav.setViewName("redirect:/main");
logger.info("用户 " + user.getName() + " 登录系统,时间:" + new Date());
return mav;
}
}
if (i == users.size()) {
mav.setViewName("index");
mav.addObject("msg", "密码错误!");
}
}
return mav;
}
@RequestMapping(value = "logout")
public String logout(HttpServletRequest request) {
request.getSession().invalidate();
return "redirect:/index";
}
}
package com.originspark.drp.controllers.projects.costs;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.originspark.drp.controllers.BaseController;
import com.originspark.drp.models.projects.costs.StockInCost;
import com.originspark.drp.models.projects.invoices.StockInInvoice;
import com.originspark.drp.service.projects.costs.StockInCostService;
import com.originspark.drp.util.json.FilterRequest;
import com.originspark.drp.util.json.JsonUtils;
@Controller
@RequestMapping("stockInCost")
public class StockInCostController extends BaseController{
@Autowired
private StockInCostService service;
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String create(@RequestBody StockInCost stockInCost) {
StockInInvoice invoiceUI = stockInCost.getInvoice();
if(invoiceUI == null){
return failure("所选入库单不能为空");
}
StockInInvoice invoice = stockInInvoiceService.findById(invoiceUI.getId());
if(invoice == null){
return failure("你所选择的入库单不存在,请重新选择");
}
//检查该商品是否已经存在
boolean have = false;
for(StockInCost cost : invoice.getCosts()){
if(cost.getWare().getId() == stockInCost.getWare().getId()){
have = true;
break;
}
}
if(have) {
return failure("抱歉,不能重复添加商品");
}
stockInCost.setForDate(invoice.getForDate());
stockInCost.setCreatedOn(new Date());
stockInCost.setCreatedBy(getCurrentUser().getName());
stockInCost.setUpdatedOn(new Date());
stockInCost.setUpdatedBy(getCurrentUser().getName());
service.save(stockInCost);
return ok("创建成功");
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable Long id) {
StockInCost stockInCost = service.findById(StockInCost.class, id);
service.delete(stockInCost);
return ok("删除成功");
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable Long id, @RequestBody StockInCost stockInCost) {
StockInCost existingStockInCost = service.findById(StockInCost.class, id);
if (existingStockInCost == null) {
return failure("您要更新的记录不存在");
}
existingStockInCost.setUnitPrice(stockInCost.getUnitPrice());
existingStockInCost.setQuantity(stockInCost.getQuantity());
existingStockInCost.setUpdatedBy(getCurrentUser().getName());
service.update(existingStockInCost);
return ok("更新成功");
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String list(@RequestParam int start, @RequestParam int limit,@RequestParam(required = false) Object filter) {
List<FilterRequest> filters = new ArrayList<FilterRequest>();
if (filter != null) {
filters.addAll(JsonUtils.getListFromJsonArray(filter));
}
List<StockInCost> data = service.pagedDataSet(start, limit,filters);
Long count = service.pagedDataCount(filters);
return ok(data, count);
}
}
package com.originspark.drp.controllers.projects.costs;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.originspark.drp.controllers.BaseController;
import com.originspark.drp.models.projects.costs.StockOutCost;
import com.originspark.drp.models.projects.invoices.StockOutInvoice;
import com.originspark.drp.service.projects.costs.StockOutCostService;
import com.originspark.drp.util.SessionUtil;
import com.originspark.drp.util.json.FilterRequest;
import com.originspark.drp.util.json.JsonUtils;
@Controller
@RequestMapping("stockOutCost")
public class StockOutCostController extends BaseController{
@Autowired
private StockOutCostService service;
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String create(@RequestBody StockOutCost stockOutCost) {
StockOutInvoice invoiceUI = stockOutCost.getInvoice();
if(invoiceUI == null){
return failure("所选出库单不能为空");
}
StockOutInvoice invoice = stockOutInvoiceService.findById(invoiceUI.getId());
if(invoice == null){
return failure("你所选择的入库单不存在,请重新选择");
}
//检查该商品是否已经存在
boolean have = false;
for(StockOutCost cost : invoice.getCosts()){
if(cost.getWare().getId() == stockOutCost.getWare().getId()){
have = true;
break;
}
}
if(have){
return failure("抱歉,不能重复添加商品");
}
stockOutCost.setForDate(invoice.getForDate());
stockOutCost.setCreatedOn(new Date());
stockOutCost.setCreatedBy(getCurrentUser().getName());
stockOutCost.setUpdatedOn(new Date());
service.save(stockOutCost);
return ok("创建成功");
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable Long id) {
StockOutCost stockOutCost = service.findById(StockOutCost.class, id);
service.delete(stockOutCost);
return ok("删除成功");
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable Long id, @RequestBody StockOutCost stockOutCost,HttpServletRequest request) {
StockOutCost existingStockOutCost = service.findById(StockOutCost.class, id);
if (existingStockOutCost == null) {
return failure("您要更新的商品不存在");
}
existingStockOutCost.setQuantity(stockOutCost.getQuantity());
existingStockOutCost.setUnitPrice(stockOutCost.getUnitPrice());
existingStockOutCost.setUpdatedBy(SessionUtil.getCurrentUserName(request));
service.update(existingStockOutCost);
return ok("更新成功");
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String list(@RequestParam int start, @RequestParam int limit,@RequestParam(required = false) Object filter) {
List<FilterRequest> filters = new ArrayList<FilterRequest>();
if (filter != null) {
filters.addAll(JsonUtils.getListFromJsonArray(filter));
}
List<StockOutCost> data = service.pagedDataSet(start, limit,filters);
Long count = service.pagedDataCount(filters);
return ok(data, count);
}
}
package com.originspark.drp.controllers.projects.inventories;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.originspark.drp.controllers.BaseController;
import com.originspark.drp.util.FileUtil;
import com.originspark.drp.util.poi.exporter.CurrentInventoriesGenerator;
import com.originspark.drp.web.models.projects.inventories.CurrentInventoryUI;
@Controller
@RequestMapping("inventories")
public class InventoryController extends BaseController {
private Logger logger = Logger.getLogger(InventoryController.class);
@RequestMapping(value = "/current", method = RequestMethod.GET)
@ResponseBody
public String currentInventories(@RequestParam int start, @RequestParam int limit) {
List<CurrentInventoryUI> data = inventoryService.pagedCurrentInventories(start, limit);
Long count = inventoryService.pagedCurrentInventoriesCount();
return ok(data, count);
}
/*
@ResponseBody
@RequestMapping(value = "/{id}/inventories/monthend", method = RequestMethod.GET)
@AuthRoleGroup(type={RoleEnum.PROJECTMANAGER,RoleEnum.LEADER})
public String menthendInventories(@PathVariable Long id,@RequestParam String formonth){
Project project = projectService.findById(id);
if(project == null){
return failure("你所查询的项目不存在");
}
List<Ware> inventories = new ArrayList<Ware>();
//如果是项目
if(project.getProject() == null){
for(Project system : project.getSystems()){
inventories.addAll(projectService.getMonthEndInventories(system.getId(),formonth));
}
return ok(inventories);
}
inventories.addAll(projectService.getMonthEndInventories(id,formonth));
return ok(inventories);
}
@RequestMapping(value = "/{id}/inventories/monthend/export", method = RequestMethod.GET)
public void exportMonthendInventory(@PathVariable Long id,@RequestParam String formonth,HttpServletRequest request, HttpServletResponse response){
Project system = projectService.findById(id);
List<Ware> inventories = projectService.getMonthEndInventories(system.getId(),formonth);
//因为使用createTempFile(),所以会生成默认的名称后缀,所以加下划线分割
String fileName = formonth +"_";
File file = MonthendInventoryGenerator.generate(fileName, inventories, FileUtil.getResourcesPath(request));
if (file != null) {
try {
response.setContentType("application/x-excel;charset=UTF-8");
response.setHeader("content-Disposition", "attachment;filename=" + file.getName());// "attachment;filename=test.xls"
InputStream is = new FileInputStream(file);
IOUtils.copyLarge(is, response.getOutputStream());
} catch (IOException ex) {
throw new RuntimeException("IOError writing file to output stream");
}
}
}*/
@RequestMapping(value = "/{type}/export", method = RequestMethod.GET)
public void exportExcel(@PathVariable String type, @RequestParam(required = false) String ids, HttpServletResponse response) {
if (type == null || "".equals(type)) {
logger.error("库存导出错误");
return;
}
if ("current".equals(type)) {
// 实时库存的导出
List<CurrentInventoryUI> inventories = inventoryService.pagedCurrentInventories(-1, 0);
String fileName = "currentInventories_";
File file = CurrentInventoriesGenerator.generate(fileName, inventories, FileUtil.getResourcesPath(request()));
if (file != null) {
try {
response.setContentType("application/x-excel;charset=UTF-8");
response.setHeader("content-Disposition", "attachment;filename=" + file.getName());// "attachment;filename=test.xls"
InputStream is = new FileInputStream(file);
IOUtils.copyLarge(is, response.getOutputStream());
} catch (IOException ex) {
logger.error("商品导出错误");
}
}
} else if ("monthend".equals(type)) {
}
}
}
package com.originspark.drp.controllers.projects.invoices;
import com.originspark.drp.controllers.BaseController;
import com.originspark.drp.models.projects.invoices.AbstractInvoice;
import com.originspark.drp.util.enums.AuditState;
public class AbstractInvoiceController extends BaseController {
}
package com.originspark.drp.controllers.projects.invoices;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.originspark.drp.models.projects.invoices.StockInInvoice;
import com.originspark.drp.util.enums.Status;
import com.originspark.drp.util.json.FilterRequest;
import com.originspark.drp.util.json.IdsJson;
import com.originspark.drp.util.json.JsonUtils;
@Controller
@RequestMapping("invoices/in")
public class StockInInvoiceController extends AbstractInvoiceController {
private Logger logger = Logger.getLogger(StockInInvoiceController.class);
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String create(@RequestBody StockInInvoice invoice) {
invoice.setCreatedBy(getCurrentUser().getName());
StockInInvoice savedInvoice = stockInInvoiceService.save(invoice);
return ok("信息确认成功", savedInvoice.getId());
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable Long id, @RequestBody StockInInvoice invoice) {
StockInInvoice existingInvoice = stockInInvoiceService.findById(StockInInvoice.class, id);
if (existingInvoice == null) {
return failure("您要更新的入库单不存在");
}
existingInvoice.setForDate(invoice.getForDate());
existingInvoice.setCode(invoice.getCode());
existingInvoice.setTotalPrice(invoice.getTotalPrice());
existingInvoice.setUpdatedBy(getCurrentUser().getName());
stockInInvoiceService.update(existingInvoice);
return ok("更新成功", existingInvoice.getId());
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String list(@RequestParam int start, @RequestParam int limit, @RequestParam(required = false) Object filter) {
List<FilterRequest> filters = new ArrayList<FilterRequest>();
if (filter != null) {
filters.addAll(JsonUtils.getListFromJsonArray(filter));
}
List<StockInInvoice> data = stockInInvoiceService.pagedDataSet(start, limit, filters);
Long count = stockInInvoiceService.pagedDataCount(filters);
return ok(data, count);
}
@RequestMapping(value = "/deleteBatch", method = RequestMethod.GET)
@ResponseBody
public String deleteBatch() {
String data = request().getParameter("data");
ObjectMapper mapper = new ObjectMapper();
IdsJson json = null;
try {
json = mapper.readValue(data, IdsJson.class);
} catch (Exception e) {
return failure("提交数据有误");
}
if (json == null) {
return failure("没有需要删除的数据");
}
for (Long id : json.getIds()) {
if(id==null){
continue;
}
StockInInvoice invoice = stockInInvoiceService.findById(StockInInvoice.class, id);
if(invoice != null && invoice.getCosts().isEmpty()){
invoice.setStatus(Status.DESTORYED);
stockInInvoiceService.update(invoice);
}
}
return ok("删除成功(注释:部分合价不为0的入库单已忽略)");
}
}
package com.originspark.drp.controllers.projects.invoices;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.originspark.drp.models.projects.invoices.StockOutInvoice;
import com.originspark.drp.util.enums.Status;
import com.originspark.drp.util.json.FilterRequest;
import com.originspark.drp.util.json.IdsJson;
import com.originspark.drp.util.json.JsonUtils;
@Controller
@RequestMapping("invoices/out")
public class StockOutInvoiceController extends AbstractInvoiceController {
private Logger logger = Logger.getLogger(StockOutInvoiceController.class);
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String create(@RequestBody StockOutInvoice invoice) {
invoice.setCreatedBy(getCurrentUser().getName());
StockOutInvoice savedInvoice = stockOutInvoiceService.save(invoice);
return ok("信息确认成功", savedInvoice.getId());
}
@RequestMapping(value = "/deleteBatch", method = RequestMethod.GET)
@ResponseBody
public String deleteBatch(HttpServletRequest request) {
String data = request.getParameter("data");
ObjectMapper mapper = new ObjectMapper();
IdsJson json = null;
try {
json = mapper.readValue(data, IdsJson.class);
} catch (Exception e) {
return failure("提交数据有误");
}
if (json == null) {
return failure("没有需要审核的数据");
}
for (Long id : json.getIds()) {
if(id == null){
continue;
}
StockOutInvoice invoice = stockOutInvoiceService.findById(StockOutInvoice.class, id);
if (invoice != null && invoice.getCosts().isEmpty()) {
invoice.setStatus(Status.DESTORYED);
stockOutInvoiceService.update(invoice);
}
}
return ok("删除成功(注释:部分合价不为0的入库单已忽略)");
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable Long id, @RequestBody StockOutInvoice invoice) {
StockOutInvoice existingInvoice = stockOutInvoiceService.findById(StockOutInvoice.class, id);
if (existingInvoice == null) {
return failure("您要更新的出库单不存在");
}
existingInvoice.setForDate(invoice.getForDate());
existingInvoice.setCode(invoice.getCode());
existingInvoice.setTotalPrice(invoice.getTotalPrice());
existingInvoice.setUpdatedBy(getCurrentUser().getName());
stockOutInvoiceService.update(existingInvoice);
return ok("更新成功", existingInvoice.getId());
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String list(@RequestParam int start, @RequestParam int limit, @RequestParam(required = false) Object filter) {
List<FilterRequest> filters = new ArrayList<FilterRequest>();
if (filter != null) {
filters.addAll(JsonUtils.getListFromJsonArray(filter));
}
List<StockOutInvoice> data = stockOutInvoiceService.pagedDataSet(start, limit, filters);
Long count = stockOutInvoiceService.pagedDataCount(filters);
return ok(data, count);
}
}
package com.originspark.drp.controllers.resources;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.originspark.drp.controllers.BaseController;
import com.originspark.drp.models.resources.Vendor;
import com.originspark.drp.util.json.FilterRequest;
import com.originspark.drp.util.json.IdsJson;
import com.originspark.drp.util.json.JsonUtils;
@Controller
@RequestMapping("vendor")
public class VendorController extends BaseController {
private Logger logger = Logger.getLogger(VendorController.class);
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String create(@RequestBody Vendor vendor) {
String contactMan = vendor.getContactMan();
if (StringUtils.isEmpty(contactMan)) {
return failure("联系人不能为空");
}
if (vendorService.have(vendor)) {
return failure("该供应商已经存在,不可重复添加");
}
vendor.setCreatedBy(getCurrentUser().getName());
vendorService.save(vendor);
logger.info(">添加成功:"+vendor.toString());
return ok("创建成功");
}
@RequestMapping(value = "/deleteBatch", method = RequestMethod.GET)
@ResponseBody
public String deleteBatch(HttpServletRequest request) {
String data = request.getParameter("data");
ObjectMapper mapper = new ObjectMapper();
IdsJson json = null;
try {
json = mapper.readValue(data, IdsJson.class);
} catch (Exception e) {
return failure("提交数据有误");
}
if (json == null) {
return failure("没有需要审核的数据");
}
for (long id : json.getIds()) {
Vendor vendor = vendorService.findById(Vendor.class, id);
if (vendor != null && vendor.getWares().isEmpty()) {
vendorService.delete(vendor);
logger.info(">删除成功:"+vendor.toString());
}
}
return ok("删除成功");
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable Long id, @RequestBody Vendor vendor,HttpServletRequest request) {
Vendor existingVendor = vendorService.findById(Vendor.class, id);
if (existingVendor == null) {
return failure("您要更新的供应商不存在");
}
String contactMan = vendor.getContactMan();
if (StringUtils.isEmpty(contactMan)) {
return failure("联系人不能为空");
}
if (vendorService.have(vendor)) {
return failure("该供应商已经存在,不可重复添加");
}
existingVendor.setName(vendor.getName());
existingVendor.setContactMan(vendor.getContactMan());
existingVendor.setAddress(vendor.getAddress());
existingVendor.setPhone(vendor.getPhone());
existingVendor.setNote(vendor.getNote());
existingVendor.setUpdatedBy(getCurrentUser().getName());
vendorService.update(existingVendor);
return ok("更新成功");
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String list(@RequestParam int start, @RequestParam int limit, @RequestParam(required = false) Object filter) {
List<FilterRequest> filters = new ArrayList<FilterRequest>();
if (filter != null) {
filters.addAll(JsonUtils.getListFromJsonArray(filter));
}
List<Vendor> data = vendorService.pagedDataSet(start, limit, filters);
Long count = vendorService.pagedDataCount(filters);
return ok(data, count);
}
}
package com.originspark.drp.controllers.resources;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.originspark.drp.controllers.BaseController;
import com.originspark.drp.models.User;
import com.originspark.drp.models.resources.WareCategory;
import com.originspark.drp.util.enums.Status;
import com.originspark.drp.web.models.resources.WareCategoryForm;
@Controller
@RequestMapping("wares/categories")
public class WareCategoryController extends BaseController {
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String list() {
List<WareCategory> data = wareCategoryService.treeViewData();
return ok(data);
}
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String create(@RequestBody WareCategoryForm categoryForm) {
if(StringUtils.isEmpty(categoryForm.getName())) {
return failure("分类名称不能为空");
}
WareCategory category = new WareCategory();
category.setName(categoryForm.getName());
category.setCode(categoryForm.getCode());
wareCategoryService.save(category);
return ok("创建成功");
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable Long id, @RequestBody WareCategoryForm form) {
WareCategory existingCategory = wareCategoryService.findById(WareCategory.class, id);
if (existingCategory == null) {
return failure("您要更新的分类不存在");
}
existingCategory.setName(form.getName());
existingCategory.setCode(form.getCode());
wareCategoryService.update(existingCategory);
return ok("更新成功");
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable Long id) {
WareCategory existingCategory = wareCategoryService.findById(WareCategory.class, id);
if (existingCategory == null) {
return failure("您要删除的分类不存在");
}
existingCategory.setStatus(Status.DESTORYED);
wareCategoryService.update(existingCategory);
return ok("删除成功");
}
}
package com.originspark.drp.controllers.resources;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.originspark.drp.controllers.BaseController;
import com.originspark.drp.models.resources.Vendor;
import com.originspark.drp.models.resources.Ware;
import com.originspark.drp.util.FileUtil;
import com.originspark.drp.util.SessionUtil;
import com.originspark.drp.util.enums.Status;
import com.originspark.drp.util.json.FilterRequest;
import com.originspark.drp.util.json.IdsJson;
import com.originspark.drp.util.json.JsonUtils;
import com.originspark.drp.util.poi.exporter.WareGenerator;
import com.originspark.drp.util.poi.importer.WareImporter;
@Controller
@RequestMapping("ware")
public class WareController extends BaseController {
private Logger logger = Logger.getLogger(WareController.class);
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String create(@RequestBody Ware ware) {
//validation
String name = ware.getName();
if(name == null || name.trim().equals("")){
logger.warn(">添加失败:商品名称不能为空");
return failure("商品名称不能为空");
}
String unit = ware.getUnit();
if(unit == null || unit.trim().equals("")){
logger.warn(">添加失败:商品单位不能为空");
return failure("商品单位不能为空");
}
if(wareService.have(ware)){
logger.warn(">添加失败:该商品已存在,不能重复添加");
return failure("该商品已存在,不能重复添加");
}
ware.setCreatedBy(SessionUtil.getCurrentUserName(request()));
Ware savedWare = wareService.save(ware);
logger.info(">添加成功:"+savedWare.toString());
return ok("创建成功");
}
@RequestMapping(value = "/deleteBatch", method = RequestMethod.GET)
@ResponseBody
public String deleteBatch() {
String data = request().getParameter("data");
ObjectMapper mapper = new ObjectMapper();
IdsJson json = null;
try {
json = mapper.readValue(data, IdsJson.class);
} catch (Exception e) {
return failure("提交数据有误");
}
if (json == null) {
return failure("没有需要删除的数据");
}
for (long id : json.getIds()) {
Ware ware = wareService.findById(Ware.class, id);
if(ware != null && ware.getInCosts().isEmpty() && ware.getOutCosts().isEmpty() && ware.getInventories().isEmpty()){
ware.setStatus(Status.DESTORYED);
wareService.save(ware);
}
}
return ok("删除成功");
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable Long id, @RequestBody Ware ware) {
Ware existingWare = wareService.findById(Ware.class, id);
//validation
if (existingWare == null) {
return failure("您要更新的商品不存在");
}
String name = ware.getName();
if(name == null || name.trim().equals("")){
logger.warn(">更新失败:商品名称不能为空");
return failure("商品名称不能为空");
}
String unit = ware.getUnit();
if(unit == null || unit.trim().equals("")){
logger.warn(">更新失败:商品单位不能为空");
return failure("商品单位不能为空");
}
if(wareService.have(ware)){
logger.warn(">更新失败:该商品已存在,不能重复添加");
return failure("该商品已存在,不能重复添加");
}
existingWare.setName(ware.getName());
existingWare.setBrand(ware.getBrand());
existingWare.setModel(ware.getModel());
existingWare.setUnit(ware.getUnit());
existingWare.setNote(ware.getNote());
existingWare.setVendor(ware.getVendor());
existingWare.setCategory(ware.getCategory());
existingWare.setUpdatedBy(SessionUtil.getCurrentUserName(request()));
wareService.update(existingWare);
logger.info(">更新成功:"+existingWare.toString());
return ok("更新成功");
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String list(@RequestParam int start, @RequestParam int limit, @RequestParam(required = false) Object filter, HttpServletRequest request) {
List<FilterRequest> filters = new ArrayList<FilterRequest>();
if (filter != null) {
filters.addAll(JsonUtils.getListFromJsonArray(filter));
}
List<Ware> data = wareService.pagedDataSet(start, limit, filters);
Long count = wareService.pagedDataCount(filters);
return ok(data, count);
}
// 参考http://www.360doc.com/content/12/1219/17/7471983_255118342.shtml
@RequestMapping(value = "/uploadExcel", method = RequestMethod.POST)
public void uploadExcel(@RequestParam("attach") MultipartFile attach, HttpServletRequest request, HttpServletResponse response) throws IOException {
// 保存文件
String realpath = FileUtil.getUploadPath(request);
File file = new File(realpath + "/" + attach.getOriginalFilename());
FileUtils.copyInputStreamToFile(attach.getInputStream(), file);
Map<String, Object> result = new HashMap<String, Object>(0);
response.setContentType("text/html;charset=UTF-8");
ObjectMapper mapper = new ObjectMapper();
// 导入数据
try {
List<Ware> wares = WareImporter.importExcel(file);
for (Ware ware : wares) {
// 先判断供应商
Vendor vendor = ware.getVendor();
if (vendor != null) {
String name = vendor.getName();
Vendor foundVendor = vendorService.findByName(name);
if (foundVendor != null) {
ware.setVendor(foundVendor);
} else {
vendorService.save(vendor);
ware.setVendor(vendor);
}
}
if (wareService.have(ware)) {
continue;
}
wareService.save(ware);
}
} catch (Exception e) {
e.printStackTrace();
result.put("success", false);
mapper.writeValue(response.getOutputStream(), result);
return;
}
// 返回信息
result.put("success", true);
mapper.writeValue(response.getOutputStream(), result);
}
@RequestMapping(value = "/export", method = RequestMethod.GET)
public void exportExcel(@RequestParam(required=true) String ids,HttpServletRequest request, HttpServletResponse response){
String wareIds[] = ids.split(",");
List<Ware> wares = new ArrayList<Ware>();
for (String wareId : wareIds) {
Long id = Long.valueOf(wareId);
Ware ware = wareService.findById(Ware.class, id);
wares.add(ware);
}
String fileName = "ware_";
File file = WareGenerator.generate(fileName, wares, FileUtil.getResourcesPath(request));
if (file != null) {
try {
response.setContentType("application/x-excel;charset=UTF-8");
response.setHeader("content-Disposition", "attachment;filename=" + file.getName());// "attachment;filename=test.xls"
InputStream is = new FileInputStream(file);
IOUtils.copyLarge(is, response.getOutputStream());
} catch (IOException ex) {
logger.error("商品导出错误");
}
}
}
}
package com.originspark.drp.dao;
public interface BaseDAO<T> {
T findById(Class<T> c,Long id);
T getReferance(Class<T> c,Long id);
T save(T entity);
T update(T entity);
void delete(T entity);
}
package com.originspark.drp.dao;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public abstract class BaseDAOSupport<T> implements BaseDAO<T>{
@PersistenceContext
protected EntityManager em;
public void delete(T entity) {
em.remove(entity);
}
@Transactional(readOnly=true)
public T findById(Class<T> c,Long id) {
return em.find(c, id);
}
public T save(T entity) {
em.persist(entity);
return entity;
}
public T update(T entity) {
return em.merge(entity);
}
@Transactional(readOnly=true)
public T getReferance(Class<T> c,Long id){
return em.getReference(c, id);
}
}
package com.originspark.drp.models;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import com.originspark.drp.util.enums.Status;
@MappedSuperclass
public abstract class AbstractModel {
@Id
@GeneratedValue
private Long id;
/**
* 维护信息:记录创建日期
*/
@Column(name="createdOn", nullable=false)
private Date createdOn;
/**
* 维护信息:记录创建者
*/
@Column(name="createdBy",length=10)
private String createdBy;
/**
* 维护信息:记录更新日期
*/
@Column(name="updatedOn", nullable=false)
private Date updatedOn;
/**
* 维护信息:记录更新者
*/
@Column(name="updatedBy",length=10)
private String updatedBy;
/**
* 状态
*/
@Enumerated(EnumType.STRING)
private Status status;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getCreatedOn() {
return createdOn;
}
public void setCreatedOn(Date createdOn) {
this.createdOn = createdOn;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getUpdatedOn() {
return updatedOn;
}
public void setUpdatedOn(Date updatedOn) {
this.updatedOn = updatedOn;
}
public String getUpdatedBy() {
return updatedBy;
}
public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
@PrePersist
private void prePersist() {
createdOn = new Date();
updatedOn = createdOn;
}
@PreUpdate
private void preUpdate(){
updatedOn = new Date();
}
@Override
public String toString() {
return "id="+id+", updateOn="+updatedOn;
}
}
\ No newline at end of file
package com.originspark.drp.models;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.originspark.drp.util.Blowfish;
import com.originspark.drp.util.enums.Gender;
import com.originspark.drp.util.enums.UserType;
@Entity
@Table(name="users")
public class User extends AbstractModel {
@Enumerated(EnumType.STRING)
private UserType type;
/**
* 编号
*/
private String code;
/**
* 姓名
*/
private String name;
/**
* 登录账号
*/
private String username;
/**
* 密码
*/
@JsonIgnore
private String password;
/**
* 联系电话
*/
private String phone;
/**
* 地址
*/
private String address;
/**
* 电子邮件
*/
private String email;
/**
* 性别
*/
@Enumerated(EnumType.STRING)
private Gender gender;
public UserType getType() {
return type;
}
public void setType(UserType type) {
this.type = type;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
Blowfish bf = new Blowfish();
String pwd = bf.encryptString(password);
this.password = pwd;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public static enum COLUMNS {
TYPE, CODE, NAME, PHONE, ADDRESS, EMAIL, GENDER, STATUS
}
}
package com.originspark.drp.models.projects.costs;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.originspark.drp.models.AbstractModel;
@MappedSuperclass
public abstract class AbstractCost extends AbstractModel {
private static SimpleDateFormat forYearMonthFormatter = new SimpleDateFormat("yyyy-MM");
/**
* 该字段和对应invoice的时间字段保持一致,为冗余字段,
* 只为简化盘点计算,forYearMonth同理
* 日期:年-月-日
*/
@Temporal(TemporalType.DATE)
private Date forDate;
/**
* 日期:年-月
*/
@JsonIgnore
@Column(columnDefinition = "char(7)", nullable = false)
private String forYearMonth;
/**
* 单价
*/
@Column(name="unitPrice", precision = 10, scale = 3, nullable = true)
private BigDecimal unitPrice = BigDecimal.ZERO;
/**
* 数量
*/
@Column(name="quantity", precision = 10, scale = 0, nullable = false)
private BigDecimal quantity = BigDecimal.ZERO;
/**
* 合价
*/
private BigDecimal total = BigDecimal.ZERO;
public static enum COLUMNS {
INVOICE
}
public BigDecimal getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(BigDecimal unitPrice) {
if(unitPrice == null){
this.unitPrice = BigDecimal.ZERO;
}
this.unitPrice = unitPrice;
}
public BigDecimal getQuantity() {
return quantity;
}
public void setQuantity(BigDecimal quantity) {
this.quantity = quantity;
}
public BigDecimal getTotal() {
return total;
}
public void setTotal(BigDecimal total) {
this.total = total;
}
public Date getForDate() {
return forDate;
}
public void setForDate(Date forDate) {
this.forDate = forDate;
if (forDate != null) {
setForYearMonth(forYearMonthFormatter.format(forDate));
}
}
public String getForYearMonth() {
return forYearMonth;
}
public void setForYearMonth(String forYearMonth) {
this.forYearMonth = forYearMonth;
}
@Override
public String toString() {
return super.toString()+", unitPrice="+unitPrice+", quantity="+quantity;
}
@PrePersist
public void prePersist(){
if(getUnitPrice() == null || getQuantity() == null){
setTotal(BigDecimal.ZERO);
}
setTotal(getUnitPrice().multiply(getQuantity()));
}
@PreUpdate
public void PreUpdate(){
if(getUnitPrice() == null || getQuantity() == null){
setTotal(BigDecimal.ZERO);
}
setTotal(getUnitPrice().multiply(getQuantity()));
}
}
package com.originspark.drp.models.projects.costs;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.originspark.drp.models.projects.invoices.StockInInvoice;
import com.originspark.drp.models.resources.Ware;
@Entity
@Table(name="cost_stock_in")
public class StockInCost extends AbstractCost {
/**
* 货品
*/
@ManyToOne
private Ware ware;
@ManyToOne
private StockInInvoice invoice;
public Ware getWare() {
return ware;
}
public void setWare(Ware ware) {
this.ware = ware;
}
public StockInInvoice getInvoice() {
return invoice;
}
public void setInvoice(StockInInvoice invoice) {
this.invoice = invoice;
}
@Override
public String toString() {
return "StockInCost(入库量) => ["+super.toString()+", ware.id="+ware.getId()+", invoice.id="+invoice.getId()+"]";
}
}
package com.originspark.drp.models.projects.costs;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.originspark.drp.models.projects.invoices.StockOutInvoice;
import com.originspark.drp.models.resources.Ware;
@Entity
@Table(name="cost_stock_out")
public class StockOutCost extends AbstractCost {
/**
* 货品
*/
@ManyToOne
private Ware ware;
@ManyToOne
private StockOutInvoice invoice;
public Ware getWare() {
return ware;
}
public void setWare(Ware ware) {
this.ware = ware;
}
public StockOutInvoice getInvoice() {
return invoice;
}
public void setInvoice(StockOutInvoice invoice) {
this.invoice = invoice;
}
@Override
public String toString() {
return "StockInCost(出库量) => ["+super.toString()+", invoice.id="+invoice.getId()+"]";
}
}
package com.originspark.drp.models.projects.inventories;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.originspark.drp.models.resources.Ware;
@Entity
@Table(name="inventories_monthend")
public class MonthendInventory {
@Id
@GeneratedValue
private Long id;
/**
* 年月
*/
@Column(columnDefinition = "char(7)", nullable = false)
private String forYearMonth;
/**
* 商品
*/
@ManyToOne
private Ware ware;
/**
* 上月结存
*/
@Column(name="lastMonthLeft", precision = 10, scale = 0, nullable = false)
private BigDecimal lastMonthLeft;
/**
* 本月入库数量
*/
@Column(name="monthIn", precision = 10, scale = 0, nullable = false)
private BigDecimal monthIn;
/**
* 本月出库数量
*/
@Column(name="monthOut", precision = 10, scale = 0, nullable = false)
private BigDecimal monthOut;
/**
* 本月结存数量
*/
@Column(name="monthLeft", precision = 10, scale = 0, nullable = false)
private BigDecimal monthLeft;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getForYearMonth() {
return forYearMonth;
}
public void setForYearMonth(String forYearMonth) {
this.forYearMonth = forYearMonth;
}
public Ware getWare() {
return ware;
}
public void setWare(Ware ware) {
this.ware = ware;
}
public BigDecimal getMonthIn() {
return monthIn;
}
public void setMonthIn(BigDecimal monthIn) {
this.monthIn = monthIn;
}
public BigDecimal getMonthOut() {
return monthOut;
}
public void setMonthOut(BigDecimal monthOut) {
this.monthOut = monthOut;
}
public BigDecimal getMonthLeft() {
return lastMonthLeft.add(monthIn).subtract(monthOut);
}
public void setMonthLeft(BigDecimal monthLeft) {
this.monthLeft = monthLeft;
}
public BigDecimal getLastMonthLeft() {
return lastMonthLeft;
}
public void setLastMonthLeft(BigDecimal lastMonthLeft) {
this.lastMonthLeft = lastMonthLeft;
}
}
package com.originspark.drp.models.projects.invoices;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.originspark.drp.models.AbstractModel;
/**
* 单据
*/
@MappedSuperclass
public abstract class AbstractInvoice extends AbstractModel{
private static SimpleDateFormat forYearMonthFormatter = new SimpleDateFormat("yyyy-MM");
/**
* 编号
*/
private String code;
/**
* 日期
*/
@Temporal(TemporalType.DATE)
private Date forDate;
@JsonIgnore
@Column(columnDefinition = "char(7)", nullable = false)
private String forYearMonth;
/**
* 汇总价格
*/
@Column(precision = 15, scale = 2, nullable = false)
private BigDecimal totalPrice = BigDecimal.ZERO;
/**
* 负责人
*/
private String manager;
/**
* 库管
*/
private String wareKeeper;
/**
* 经手人
*/
private String regulator;
/**
* 领用人
*/
private String receiveMan;
public static enum COLUMNS {
STARTDATE,ENDDATE,CODE,
MINTOTAL,MAXTOTAL,PROJECT,SYSTEM,
WARENAME,RECEIVEMANNAME,
REGULATORNAME,WAREKEEPERNAME,MANAGERNAME
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getManager() {
return manager;
}
public void setManager(String manager) {
this.manager = manager;
}
public String getWareKeeper() {
return wareKeeper;
}
public void setWareKeeper(String wareKeeper) {
this.wareKeeper = wareKeeper;
}
public String getRegulator() {
return regulator;
}
public void setRegulator(String regulator) {
this.regulator = regulator;
}
public Date getForDate() {
return forDate;
}
public void setForDate(Date forDate) {
this.forDate = forDate;
if (forDate != null) {
setForYearMonth(forYearMonthFormatter.format(forDate));
}
}
public String getForYearMonth() {
return forYearMonth;
}
public void setForYearMonth(String forYearMonth) {
this.forYearMonth = forYearMonth;
}
public BigDecimal getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(BigDecimal totalPrice) {
this.totalPrice = totalPrice;
}
public String getReceiveMan() {
return receiveMan;
}
public void setReceiveMan(String receiveMan) {
this.receiveMan = receiveMan;
}
@Override
public String toString() {
return super.toString()+", code="+code+", forDate="+forDate+", totalPrice="+totalPrice;
}
}
\ No newline at end of file
package com.originspark.drp.models.projects.invoices;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.originspark.drp.models.projects.costs.StockInCost;
/**
* 入库单
*/
@Entity
@Table(name="invoice_stock_in")
public class StockInInvoice extends AbstractInvoice{
/**
* 商品采购列表
*/
@JsonIgnore
@OneToMany(mappedBy="invoice")
private List<StockInCost> costs;
public List<StockInCost> getCosts() {
return costs;
}
public void setCosts(List<StockInCost> costs) {
this.costs = costs;
}
public int getCostCount(){
return getCosts().size();
}
@Override
public String toString() {
return "StockInInvoice(入库单) => ["+super.toString()+"]";
}
}
package com.originspark.drp.models.projects.invoices;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.originspark.drp.models.projects.costs.StockOutCost;
/**
* 出库单
*/
@Entity
@Table(name="invoice_stock_out")
public class StockOutInvoice extends AbstractInvoice{
/**
* 商品列表
*/
@JsonIgnore
@OneToMany(mappedBy="invoice")
private List<StockOutCost> costs;
//TODO 将receiveMan、receiveAddress、receivePhone抽取为trader?
/**
* 联系地址
*/
private String receiveAddress;
/**
* 联系电话
*/
private String receivePhone;
public List<StockOutCost> getCosts() {
return costs;
}
public void setCosts(List<StockOutCost> costs) {
this.costs = costs;
}
public String getReceiveAddress() {
return receiveAddress;
}
public void setReceiveAddress(String receiveAddress) {
this.receiveAddress = receiveAddress;
}
public String getReceivePhone() {
return receivePhone;
}
public void setReceivePhone(String receivePhone) {
this.receivePhone = receivePhone;
}
public int getCostCount(){
return getCosts().size();
}
}
package com.originspark.drp.models.resources;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.originspark.drp.models.AbstractModel;
/**
* 销售商
*/
@Entity
@Table(name="traders")
public class Trader extends AbstractModel {
/**
* 名称
*/
private String name;
/**
* 联系电话
*/
private String phone;
/**
* 地址
*/
private String address;
/**
* 联系人
*/
@Column(name="contactMan")
private String contactMan;
/**
* 备注
*/
private String note;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getContactMan() {
return contactMan;
}
public void setContactMan(String contactMan) {
this.contactMan = contactMan;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
package com.originspark.drp.models.resources;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.originspark.drp.models.AbstractModel;
/**
* 供应商
*/
@Entity
@Table(name="vendors")
public class Vendor extends AbstractModel{
/**
* 联系人
*/
@Column(name="contactMan")
private String contactMan;
/**
* 联系电话
*/
private String phone;
/**
* 公司名称
*/
private String name;
/**
* 公司地址
*/
private String address;
/**
* 备注
*/
private String note;
/**
* 商品
*/
@JsonIgnore
@OneToMany(mappedBy="vendor")
private List<Ware> wares;
public static enum COLUMNS {
NAME,ADDRESS,PHONE,CONTACTMAN
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getContactMan() {
return contactMan;
}
public void setContactMan(String contactMan) {
this.contactMan = contactMan;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public List<Ware> getWares() {
return wares;
}
public void setWares(List<Ware> wares) {
this.wares = wares;
}
public int getCountOfWares(){
return getWares().size();
}
}
package com.originspark.drp.models.resources;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.originspark.drp.models.AbstractModel;
import com.originspark.drp.models.projects.costs.StockInCost;
import com.originspark.drp.models.projects.costs.StockOutCost;
import com.originspark.drp.models.projects.inventories.MonthendInventory;
/**
* 产品
*/
@Entity
@Table(name = "wares")
public class Ware extends AbstractModel {
/**
* 品名
*/
private String name;
/**
* 品牌
*/
private String brand;
/**
* 规格
*/
private String model;
/**
* 单位
*/
private String unit;
/**
* 生产日期
*/
@Temporal(TemporalType.DATE)
private Date produceOn;
/**
* 保质期
*/
private String storage;
/**
* 备注
*/
private String note;
@ManyToOne
private WareCategory category;
/**
* 供应商
*/
@ManyToOne
private Vendor vendor;
@JsonIgnore
@OneToMany(mappedBy="ware")
private List<StockInCost> inCosts;
@JsonIgnore
@OneToMany(mappedBy="ware")
private List<StockOutCost> outCosts;
@JsonIgnore
@OneToMany(mappedBy="ware")
private List<MonthendInventory> inventories;
public static enum COLUMNS {
NAME, BRAND, MODEL, UNIT, VENDOR
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public Date getProduceOn() {
return produceOn;
}
public void setProduceOn(Date produceOn) {
this.produceOn = produceOn;
}
public String getStorage() {
return storage;
}
public void setStorage(String storage) {
this.storage = storage;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public WareCategory getCategory() {
return category;
}
public void setCategory(WareCategory category) {
this.category = category;
}
public Vendor getVendor() {
return vendor;
}
public void setVendor(Vendor vendor) {
this.vendor = vendor;
}
public List<StockInCost> getInCosts() {
return inCosts;
}
public void setInCosts(List<StockInCost> inCosts) {
this.inCosts = inCosts;
}
public List<StockOutCost> getOutCosts() {
return outCosts;
}
public void setOutCosts(List<StockOutCost> outCosts) {
this.outCosts = outCosts;
}
public List<MonthendInventory> getInventories() {
return inventories;
}
public void setInventories(List<MonthendInventory> inventories) {
this.inventories = inventories;
}
public int getCountOfInCosts(){
return getInCosts().size();
}
public int getCountOfOutCosts(){
return getOutCosts().size();
}
public int getCountOfInventories(){
return getInventories().size();
}
@Override
public String toString() {
return "Ware(商品) => [" + super.toString() + ", name=" + name + ", brand=" + brand + ", model=" + model + ", unit=" + unit + "]";
}
@JsonProperty("vendor")
public Map<String, Object> getVendorUI() {
Map<String, Object> vendorUI = new HashMap<String, Object>();
Vendor vendor = getVendor();
if (vendor != null) {
vendorUI.put("id", vendor.getId());
vendorUI.put("contactMan", vendor.getContactMan());
}
return vendorUI;
}
@JsonProperty("category")
public Map<String, Object> getCategoryUI() {
Map<String, Object> categoryUI = new HashMap<String, Object>();
WareCategory category = getCategory();
if (category != null) {
categoryUI.put("id", category.getId());
categoryUI.put("name", category.getName());
}
return categoryUI;
}
}
package com.originspark.drp.models.resources;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.originspark.drp.models.AbstractModel;
/**
* 商品类别
* @author ReedMi
*/
@Entity
@Table(name = "ware_categories")
public class WareCategory extends AbstractModel {
private String name;
private String code;
@ManyToOne
private WareCategory parent;
@OneToMany(mappedBy = "parent")
private List<WareCategory> chidren;
@JsonIgnore
@OneToMany(mappedBy = "category")
private List<Ware> wares;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public WareCategory getParent() {
return parent;
}
public void setParent(WareCategory parent) {
this.parent = parent;
}
public List<WareCategory> getChidren() {
return chidren;
}
public void setChidren(List<WareCategory> chidren) {
this.chidren = chidren;
}
public List<Ware> getWares() {
return wares;
}
public void setWares(List<Ware> wares) {
this.wares = wares;
}
public boolean getLoaded() {
if (getChidren().isEmpty()) {
return true;
}
return false;
}
}
package com.originspark.drp.processor;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;
public class UTF8StringBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
if(bean instanceof StringHttpMessageConverter){
MediaType mediaType = new MediaType("text", "plain", Charset.forName("UTF-8"));
List<MediaType> types = new ArrayList<MediaType>();
types.add(mediaType);
((StringHttpMessageConverter) bean).setSupportedMediaTypes(types);
}
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
// do nothing
return bean;
}
}
\ No newline at end of file
package com.originspark.drp.service.account;
import java.util.List;
import com.originspark.drp.models.User;
public interface AccountService{
public List<User> validate(String username,String password);
}
package com.originspark.drp.service.account;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.originspark.drp.models.User;
import com.originspark.drp.util.enums.Status;
@Transactional
@Service
public class AccountServiceBean implements AccountService {
@PersistenceContext
protected EntityManager em;
@Override
public List<User> validate(String username, String password) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> dataQuery = cb.createQuery(User.class);
Root<User> user = dataQuery.from(User.class);
dataQuery.select(user);
List<Predicate> criteria = new ArrayList<Predicate>();
criteria.add(cb.equal(user.get("name"), username));
criteria.add(cb.equal(user.get("status"), Status.ACTIVE));
Predicate[] predicates = new Predicate[criteria.size()];
predicates = criteria.toArray(predicates);
dataQuery.where(cb.and(predicates));
return em.createQuery(dataQuery).getResultList();
}
}
package com.originspark.drp.service.projects.costs;
import java.util.List;
import java.util.Map;
import com.originspark.drp.dao.BaseDAO;
import com.originspark.drp.models.projects.costs.StockInCost;
import com.originspark.drp.util.json.FilterRequest;
public interface StockInCostService extends BaseDAO<StockInCost> {
List<StockInCost> pagedDataSet(int start, int limit, List<FilterRequest> filters);
Long pagedDataCount(List<FilterRequest> filters);
Map<String, String> validate();
}
package com.originspark.drp.service.projects.costs;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.originspark.drp.dao.BaseDAOSupport;
import com.originspark.drp.models.projects.costs.StockInCost;
import com.originspark.drp.models.projects.costs.AbstractCost.COLUMNS;
import com.originspark.drp.util.json.FilterRequest;
@Transactional
@Service
public class StockInCostServiceBean extends BaseDAOSupport<StockInCost> implements
StockInCostService {
@Override
public List<StockInCost> pagedDataSet(int start, int limit,
List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StockInCost> dataQuery = cb.createQuery(StockInCost.class);
Root<StockInCost> stockInCost = dataQuery.from(StockInCost.class);
dataQuery.select(stockInCost);
Predicate[] predicates = toPredicates(cb, stockInCost, filters);
if (predicates != null) {
dataQuery.where(cb.and(predicates));
}
dataQuery.orderBy(cb.desc(stockInCost.get("id")));
return em.createQuery(dataQuery).setFirstResult(start)
.setMaxResults(limit).getResultList();
}
@Override
public Long pagedDataCount(List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
Root<StockInCost> stockInCost = countQuery.from(StockInCost.class);
countQuery.select(cb.count(stockInCost));
Predicate[] predicates = toPredicates(cb, stockInCost, filters);
if (predicates != null) {
countQuery.where(cb.and(predicates));
}
return em.createQuery(countQuery).getSingleResult();
}
public static Predicate[] toPredicates(CriteriaBuilder cb, Root<StockInCost> stockInCost,
List<FilterRequest> filters) {
List<Predicate> criteria = new ArrayList<Predicate>();
try {
for (FilterRequest filter : filters) {
COLUMNS column = COLUMNS.valueOf(filter.getProperty()
.toUpperCase());
String value = filter.getValue();
switch (column) {
case INVOICE:
if(value != null && !value.equals("")){
criteria.add(cb.equal(stockInCost.get("invoice").<Long>get("id"),Long.parseLong(value)));
}
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
if (criteria.size() == 0) {
return null;
} else {
Predicate[] predicates = new Predicate[criteria.size()];
predicates = criteria.toArray(predicates);
return predicates;
}
}
@Override
public Map<String, String> validate() {
// TODO
/**
* 对ware的数据进行验证
*/
return null;
}
}
package com.originspark.drp.service.projects.costs;
import java.util.List;
import java.util.Map;
import com.originspark.drp.dao.BaseDAO;
import com.originspark.drp.models.projects.costs.StockOutCost;
import com.originspark.drp.util.json.FilterRequest;
public interface StockOutCostService extends BaseDAO<StockOutCost> {
List<StockOutCost> pagedDataSet(int start, int limit, List<FilterRequest> filters);
Long pagedDataCount(List<FilterRequest> filters);
Map<String, String> validate();
}
package com.originspark.drp.service.projects.costs;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.originspark.drp.dao.BaseDAOSupport;
import com.originspark.drp.models.projects.costs.StockOutCost;
import com.originspark.drp.models.projects.costs.AbstractCost.COLUMNS;
import com.originspark.drp.util.json.FilterRequest;
@Transactional
@Service
public class StockOutCostServiceBean extends BaseDAOSupport<StockOutCost> implements
StockOutCostService {
@Override
public List<StockOutCost> pagedDataSet(int start, int limit,
List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StockOutCost> dataQuery = cb.createQuery(StockOutCost.class);
Root<StockOutCost> stockOutCost = dataQuery.from(StockOutCost.class);
dataQuery.select(stockOutCost);
Predicate[] predicates = toPredicates(cb, stockOutCost, filters);
if (predicates != null) {
dataQuery.where(cb.and(predicates));
}
dataQuery.orderBy(cb.desc(stockOutCost.get("id")));
return em.createQuery(dataQuery).setFirstResult(start)
.setMaxResults(limit).getResultList();
}
@Override
public Long pagedDataCount(List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
Root<StockOutCost> stockOutCost = countQuery.from(StockOutCost.class);
countQuery.select(cb.count(stockOutCost));
Predicate[] predicates = toPredicates(cb, stockOutCost, filters);
if (predicates != null) {
countQuery.where(cb.and(predicates));
}
return em.createQuery(countQuery).getSingleResult();
}
public static Predicate[] toPredicates(CriteriaBuilder cb, Root<StockOutCost> stockOutCost,
List<FilterRequest> filters) {
List<Predicate> criteria = new ArrayList<Predicate>();
try {
for (FilterRequest filter : filters) {
COLUMNS column = COLUMNS.valueOf(filter.getProperty()
.toUpperCase());
String value = filter.getValue();
switch (column) {
case INVOICE:
if(value != null && !value.equals("")){
criteria.add(cb.equal(stockOutCost.get("invoice").<Long>get("id"),Long.parseLong(value)));
}
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
if (criteria.size() == 0) {
return null;
} else {
Predicate[] predicates = new Predicate[criteria.size()];
predicates = criteria.toArray(predicates);
return predicates;
}
}
@Override
public Map<String, String> validate() {
// TODO
/**
* 对ware的数据进行验证
*/
return null;
}
}
package com.originspark.drp.service.projects.inventories;
import java.util.List;
import com.originspark.drp.dao.BaseDAO;
import com.originspark.drp.web.models.projects.inventories.CurrentInventoryUI;
public interface InventoryService extends BaseDAO {
List<CurrentInventoryUI> pagedCurrentInventories(int start, int limit);
Long pagedCurrentInventoriesCount();
}
package com.originspark.drp.service.projects.inventories;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Query;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.originspark.drp.dao.BaseDAOSupport;
import com.originspark.drp.web.models.projects.inventories.CurrentInventoryUI;
@SuppressWarnings("rawtypes")
@Transactional
@Service
public class InventoryServiceBean extends BaseDAOSupport implements InventoryService {
// 实时入库量统计
final String CURRENT_IN_SQL = "(SELECT DISTINCT(ware) as wid, sum(quantity) as incount, SUM(total) as outcome FROM cost_stock_in GROUP BY ware) as t1";
// 实时出库量统计
final String CURRENT_OUT_SQL = "(SELECT DISTINCT(ware) as wid, sum(quantity) as outcount, SUM(total) as income FROM cost_stock_out GROUP BY ware) as t2";
// 实时库存量统计
final String CURRENT_SUM_SQL = "SELECT t3.name, t3.model, t3.unit, t3.brand, t1.outcome, t1.incount, t2.income, t2.outcount FROM "
+ CURRENT_IN_SQL + " LEFT JOIN " + CURRENT_OUT_SQL + " ON t1.wid = t2.wid"
+ " JOIN wares as t3 WHERE t1.wid = t3.id ORDER BY t2.income - t1.outcome DESC";
// 实时库存量总数计算
final String CURRENT_COUNT = "SELECT COUNT(DISTINCT(ware)) FROM cost_stock_in";
@SuppressWarnings("unchecked")
@Override
public List<CurrentInventoryUI> pagedCurrentInventories(int start, int limit) {
Query query = em.createNativeQuery(CURRENT_SUM_SQL);
List<Object[]> res;
if (start >= 0 && limit > 0) {
res = query.setFirstResult(start).setMaxResults(limit).getResultList();
} else {
res = query.getResultList();
}
List<CurrentInventoryUI> currentInventories = new ArrayList<CurrentInventoryUI>();
Object[] objAry;
for (int i = 0, length = res.size(); i < length; i++) {
CurrentInventoryUI inventory = new CurrentInventoryUI();
objAry = res.get(i);
inventory.setName(objAry[0] + "");
inventory.setModel(objAry[1] + "");
inventory.setUnit(objAry[2] + "");
inventory.setBrand(objAry[3] + "");
inventory.setOutcome(objAry[4] == null ? BigDecimal.ZERO : (BigDecimal) objAry[4]);
inventory.setIncount(objAry[5] == null ? 0L : ((BigDecimal) objAry[5]).longValue());
inventory.setIncome(objAry[6] == null ? BigDecimal.ZERO : (BigDecimal) objAry[6]);
inventory.setOutcount(objAry[7] == null ? 0L : ((BigDecimal) objAry[7]).longValue());
currentInventories.add(inventory);
}
return currentInventories;
}
@Override
public Long pagedCurrentInventoriesCount() {
Query query = em.createNativeQuery(CURRENT_COUNT);
BigInteger count = (BigInteger) query.getSingleResult();
return count.longValue();
}
}
package com.originspark.drp.service.projects.invoices;
import java.util.List;
import java.util.Map;
import com.originspark.drp.dao.BaseDAO;
import com.originspark.drp.models.projects.invoices.StockInInvoice;
import com.originspark.drp.util.json.FilterRequest;
public interface StockInInvoiceService extends BaseDAO<StockInInvoice> {
List<StockInInvoice> pagedDataSet(int start, int limit, List<FilterRequest> filters);
Long pagedDataCount(List<FilterRequest> filters);
Map<String, String> validate();
StockInInvoice findById(Long id);
}
package com.originspark.drp.service.projects.invoices;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.originspark.drp.dao.BaseDAOSupport;
import com.originspark.drp.models.projects.costs.StockInCost;
import com.originspark.drp.models.projects.invoices.AbstractInvoice.COLUMNS;
import com.originspark.drp.models.projects.invoices.StockInInvoice;
import com.originspark.drp.util.StringUtil;
import com.originspark.drp.util.enums.AuditState;
import com.originspark.drp.util.json.FilterRequest;
@Transactional
@Service
public class StockInInvoiceServiceBean extends BaseDAOSupport<StockInInvoice> implements
StockInInvoiceService {
@Override
public List<StockInInvoice> pagedDataSet(int start, int limit,
List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StockInInvoice> dataQuery = cb.createQuery(StockInInvoice.class);
Root<StockInInvoice> stockin = dataQuery.from(StockInInvoice.class);
dataQuery.select(stockin);
StockInCost[] inCosts = findByWareName(filters);
if(inCosts == null){
return null;
}
List<Predicate[]> predicates = toPredicates(cb, stockin, filters, inCosts);
if (predicates != null) {
Predicate[] andPredicates = predicates.get(0);
Predicate[] orPredicates = predicates.get(1);
if(andPredicates.length != 0 && orPredicates.length == 0){
dataQuery.where(cb.and(andPredicates));
}else if(andPredicates.length == 0 && orPredicates.length != 0){
dataQuery.where(cb.or(orPredicates));
}else{
dataQuery.where(cb.and(andPredicates),cb.or(orPredicates));
}
}
dataQuery.orderBy(cb.asc(stockin.get("status")), cb.desc(stockin.get("forDate")), cb.desc(stockin.get("id")));
return em.createQuery(dataQuery).setFirstResult(start)
.setMaxResults(limit).getResultList();
}
@Override
public Long pagedDataCount(List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
Root<StockInInvoice> stockin = countQuery.from(StockInInvoice.class);
countQuery.select(cb.count(stockin));
StockInCost[] inCosts = findByWareName(filters);
if(inCosts == null){
return 0L;
}
List<Predicate[]> predicates = toPredicates(cb, stockin, filters, findByWareName(filters));
if (predicates != null) {
Predicate[] andPredicates = predicates.get(0);
Predicate[] orPredicates = predicates.get(1);
if(andPredicates.length != 0 && orPredicates.length == 0){
countQuery.where(cb.and(andPredicates));
}else if(andPredicates.length == 0 && orPredicates.length != 0){
countQuery.where(cb.or(orPredicates));
}else{
countQuery.where(cb.and(andPredicates), cb.or(orPredicates));
}
}
return em.createQuery(countQuery).getSingleResult();
}
public static List<Predicate[]> toPredicates(CriteriaBuilder cb, Root<StockInInvoice> stockin,
List<FilterRequest> filters, StockInCost...costs) {
List<Predicate> andCriteria= new ArrayList<Predicate>();
List<Predicate> orCriteria= new ArrayList<Predicate>();
try {
for (FilterRequest filter : filters) {
COLUMNS column = COLUMNS.valueOf(filter.getProperty()
.toUpperCase());
String value = filter.getValue();
switch (column) {
case STARTDATE:
if (value != null && !value.equals("")) {
Date startDate = StringUtil.String2Date(value);
andCriteria.add(cb.greaterThanOrEqualTo(stockin.<Date>get("forDate"), startDate));
}
break;
case ENDDATE:
if (value != null && !value.equals("")) {
Date endDate = StringUtil.String2Date(value);
andCriteria.add(cb.lessThanOrEqualTo(stockin.<Date>get("forDate"), endDate));
}
break;
case PROJECT:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockin.get("system").get("project").<String>get("name"), "%" + value + "%"));
}
break;
case SYSTEM:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockin.get("system").<String>get("name"), "%" + value + "%"));
}
break;
case MINTOTAL:
if (value != null && !value.equals("")) {
BigDecimal minTotal = StringUtil.String2BigDecimal(value);
andCriteria.add(cb.greaterThanOrEqualTo(stockin.<BigDecimal>get("totalPrice"), minTotal));
}
break;
case MAXTOTAL:
if (value != null && !value.equals("")) {
BigDecimal maxTotal = StringUtil.String2BigDecimal(value);
andCriteria.add(cb.lessThanOrEqualTo(stockin.<BigDecimal>get("totalPrice"), maxTotal));
}
break;
case REGULATORNAME:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockin.<String>get("regulator"), "%" + value + "%"));
}
break;
case WAREKEEPERNAME:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockin.<String>get("wareKeeper"), "%" + value + "%"));
}
break;
case MANAGERNAME:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockin.<String>get("manager"), "%" + value + "%"));
}
break;
case WARENAME:
if (value != null && !value.equals("")) {
//因为一个入库单中的商品是不可以重复的,所以一个商品对应一个cost,只要判断这个cost is member of invoice即可
for(int i=0,len=costs.length; i<len;i++){
orCriteria.add(cb.isMember(costs[i],stockin.<List<StockInCost>>get("costs")));
}
}
break;
default:
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
if (andCriteria.isEmpty() && orCriteria.isEmpty()) {
return null;
} else{
List<Predicate[]> criteria = new ArrayList<Predicate[]>();
criteria.add(andCriteria.toArray(new Predicate[0]));
criteria.add(orCriteria.toArray(new Predicate[0]));
return criteria;
}
}
@Override
public Map<String, String> validate() {
// TODO
/**
* 对ware的数据进行验证
*/
return null;
}
@Override
public StockInInvoice findById(Long id) {
return em.find(StockInInvoice.class, id);
}
private StockInCost[] findByWareName(List<FilterRequest> filters){
for(FilterRequest filter : filters){
COLUMNS column = COLUMNS.valueOf(filter.getProperty().toUpperCase());
String value = filter.getValue();
if(column == COLUMNS.WARENAME){
TypedQuery<StockInCost> query = em.createQuery("from StockInCost cost where cost.ware.name like :name",StockInCost.class);
query.setParameter("name", "%"+value+"%");
List<StockInCost> incosts = query.getResultList();
if(incosts.isEmpty()){
return null;
}
return incosts.toArray(new StockInCost[0]);
}
}
return new StockInCost[0];
}
}
package com.originspark.drp.service.projects.invoices;
import java.util.List;
import java.util.Map;
import com.originspark.drp.dao.BaseDAO;
import com.originspark.drp.models.projects.invoices.StockOutInvoice;
import com.originspark.drp.util.json.FilterRequest;
public interface StockOutInvoiceService extends BaseDAO<StockOutInvoice> {
List<StockOutInvoice> pagedDataSet(int start, int limit, List<FilterRequest> filters);
Long pagedDataCount(List<FilterRequest> filters);
Map<String, String> validate();
StockOutInvoice findById(Long id);
}
package com.originspark.drp.service.projects.invoices;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.originspark.drp.dao.BaseDAOSupport;
import com.originspark.drp.models.projects.costs.StockOutCost;
import com.originspark.drp.models.projects.invoices.AbstractInvoice.COLUMNS;
import com.originspark.drp.models.projects.invoices.StockOutInvoice;
import com.originspark.drp.util.StringUtil;
import com.originspark.drp.util.json.FilterRequest;
@Transactional
@Service
public class StockOutInvoiceServiceBean extends BaseDAOSupport<StockOutInvoice> implements
StockOutInvoiceService {
@Override
public List<StockOutInvoice> pagedDataSet(int start, int limit,
List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<StockOutInvoice> dataQuery = cb.createQuery(StockOutInvoice.class);
Root<StockOutInvoice> stockout = dataQuery.from(StockOutInvoice.class);
dataQuery.select(stockout);
StockOutCost[] outCosts = findByWareName(filters);
if(outCosts == null){
return null;
}
List<Predicate[]> predicates = toPredicates(cb, stockout, filters, outCosts);
if (predicates != null) {
Predicate[] andPredicates = predicates.get(0);
Predicate[] orPredicates = predicates.get(1);
if(andPredicates.length != 0 && orPredicates.length == 0){
dataQuery.where(cb.and(andPredicates));
}else if(andPredicates.length == 0 && orPredicates.length != 0){
dataQuery.where(cb.or(orPredicates));
}else{
dataQuery.where(cb.and(andPredicates),cb.or(orPredicates));
}
}
dataQuery.orderBy(cb.asc(stockout.get("status")), cb.desc(stockout.get("forDate")), cb.desc(stockout.get("id")));
return em.createQuery(dataQuery).setFirstResult(start)
.setMaxResults(limit).getResultList();
}
@Override
public Long pagedDataCount(List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
Root<StockOutInvoice> stockout = countQuery.from(StockOutInvoice.class);
countQuery.select(cb.count(stockout));
StockOutCost[] outCosts = findByWareName(filters);
if(outCosts == null){
return 0L;
}
List<Predicate[]> predicates = toPredicates(cb, stockout, filters, findByWareName(filters));
if (predicates != null) {
Predicate[] andPredicates = predicates.get(0);
Predicate[] orPredicates = predicates.get(1);
if(andPredicates.length != 0 && orPredicates.length == 0){
countQuery.where(cb.and(andPredicates));
}else if(andPredicates.length == 0 && orPredicates.length != 0){
countQuery.where(cb.or(orPredicates));
}else{
countQuery.where(cb.and(andPredicates),cb.or(orPredicates));
}
}
return em.createQuery(countQuery).getSingleResult();
}
public static List<Predicate[]> toPredicates(CriteriaBuilder cb, Root<StockOutInvoice> stockout,
List<FilterRequest> filters, StockOutCost...costs) {
List<Predicate> andCriteria= new ArrayList<Predicate>();
List<Predicate> orCriteria= new ArrayList<Predicate>();
try {
for (FilterRequest filter : filters) {
COLUMNS column = COLUMNS.valueOf(filter.getProperty()
.toUpperCase());
String value = filter.getValue();
switch (column) {
case STARTDATE:
if (value != null && !value.equals("")) {
Date startDate = StringUtil.String2Date(value);
andCriteria.add(cb.greaterThanOrEqualTo(stockout.<Date>get("forDate"), startDate));
}
break;
case ENDDATE:
if (value != null && !value.equals("")) {
Date endDate = StringUtil.String2Date(value);
andCriteria.add(cb.lessThanOrEqualTo(stockout.<Date>get("forDate"), endDate));
}
break;
case PROJECT:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockout.get("system").get("project").<String>get("name"), "%" + value + "%"));
}
break;
case SYSTEM:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockout.get("system").<String>get("name"), "%" + value + "%"));
}
break;
case MINTOTAL:
if (value != null && !value.equals("")) {
BigDecimal minTotal = StringUtil.String2BigDecimal(value);
andCriteria.add(cb.greaterThanOrEqualTo(stockout.<BigDecimal>get("totalPrice"), minTotal));
}
break;
case MAXTOTAL:
if (value != null && !value.equals("")) {
BigDecimal maxTotal = StringUtil.String2BigDecimal(value);
andCriteria.add(cb.lessThanOrEqualTo(stockout.<BigDecimal>get("totalPrice"), maxTotal));
}
break;
case REGULATORNAME:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockout.<String>get("regulator"), "%" + value + "%"));
}
break;
case WAREKEEPERNAME:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockout.<String>get("wareKeeper"), "%" + value + "%"));
}
break;
case MANAGERNAME:
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockout.<String>get("manager"), "%" + value + "%"));
}
break;
case RECEIVEMANNAME :
if (value != null && !value.equals("")) {
andCriteria.add(cb.like(stockout.<String>get("receiveMan"),"%" + value + "%"));
}
break;
case WARENAME:
if (value != null && !value.equals("")) {
//因为一个出库单中的商品是不可以重复的,所以一个商品对应一个cost,只要判断这个cost is member of invoice即可
for(int i=0,len=costs.length; i<len;i++){
orCriteria.add(cb.isMember(costs[i],stockout.<List<StockOutCost>>get("costs")));
}
}
break;
default:
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
if (andCriteria.isEmpty() && orCriteria.isEmpty()) {
return null;
} else{
List<Predicate[]> criteria = new ArrayList<Predicate[]>();
criteria.add(andCriteria.toArray(new Predicate[0]));
criteria.add(orCriteria.toArray(new Predicate[0]));
return criteria;
}
}
@Override
public Map<String, String> validate() {
// TODO
/**
* 对ware的数据进行验证
*/
return null;
}
@Override
public StockOutInvoice findById(Long id) {
return em.find(StockOutInvoice.class, id);
}
private StockOutCost[] findByWareName(List<FilterRequest> filters){
for(FilterRequest filter : filters){
COLUMNS column = COLUMNS.valueOf(filter.getProperty().toUpperCase());
String value = filter.getValue();
if(column == COLUMNS.WARENAME){
TypedQuery<StockOutCost> query = em.createQuery("from StockOutCost cost where cost.ware.name like :name",StockOutCost.class);
query.setParameter("name", "%"+value+"%");
List<StockOutCost> outcosts = query.getResultList();
if(outcosts.isEmpty()){
return null;
}
return outcosts.toArray(new StockOutCost[0]);
}
}
return new StockOutCost[0];
}
}
package com.originspark.drp.service.resources;
import java.util.List;
import java.util.Map;
import com.originspark.drp.dao.BaseDAO;
import com.originspark.drp.models.resources.Vendor;
import com.originspark.drp.util.json.FilterRequest;
public interface VendorService extends BaseDAO<Vendor>{
List<Vendor> pagedDataSet(int start, int limit, List<FilterRequest> filters);
Long pagedDataCount(List<FilterRequest> filters);
Map<String,String> validate();
Vendor findByName(String name);
boolean have(Vendor vendor);
}
package com.originspark.drp.service.resources;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import com.originspark.drp.dao.BaseDAOSupport;
import com.originspark.drp.models.resources.Vendor;
import com.originspark.drp.models.resources.Vendor.COLUMNS;
import com.originspark.drp.util.json.FilterRequest;
@Service
public class VendorServiceBean extends BaseDAOSupport<Vendor> implements VendorService {
@Override
public List<Vendor> pagedDataSet(int start, int limit, List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Vendor> dataQuery = cb.createQuery(Vendor.class);
Root<Vendor> vendor = dataQuery.from(Vendor.class);
dataQuery.select(vendor);
Predicate[] predicates = toPredicates(cb, vendor, filters);
if (predicates != null) {
dataQuery.where(cb.and(predicates));
}
dataQuery.orderBy(cb.asc(vendor.get("status")), cb.desc(vendor.get("id")));
return em.createQuery(dataQuery).
setFirstResult(start).
setMaxResults(limit).
getResultList();
}
@Override
public Long pagedDataCount(List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
Root<Vendor> vendor = countQuery.from(Vendor.class);
countQuery.select(cb.count(vendor));
Predicate[] predicates = toPredicates(cb, vendor, filters);
if (predicates != null) {
countQuery.where(cb.and(predicates));
}
return em.createQuery(countQuery).getSingleResult();
}
public static Predicate[] toPredicates(CriteriaBuilder cb, Root<Vendor> vendor, List<FilterRequest> filters) {
List<Predicate> criteria = new ArrayList<Predicate>();
try {
for (FilterRequest filter : filters) {
COLUMNS column = COLUMNS.valueOf(filter.getProperty()
.toUpperCase());
String value = filter.getValue();
switch (column) {
case NAME:
if (value != null && !value.equals("")) {
criteria.add(cb.like(vendor.<String>get("name"), "%" + value + "%"));
}
break;
case ADDRESS:
if (value != null && !value.equals("")) {
criteria.add(cb.like(vendor.<String>get("address"), "%" + value + "%"));
}
break;
case PHONE:
if (value != null && !value.equals("")) {
criteria.add(cb.like(vendor.<String>get("phone"), "%" + value + "%"));
}
break;
case CONTACTMAN:
if (value != null && !value.equals("")) {
criteria.add(cb.like(vendor.<String>get("contactMan"), "%" + value + "%"));
}
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
if (criteria.size() == 0) {
return null;
} else {
Predicate[] predicates = new Predicate[criteria.size()];
predicates = criteria.toArray(predicates);
return predicates;
}
}
@Override
public Map<String, String> validate() {
// TODO Auto-generated method stub
return null;
}
@Override
public Vendor findByName(String name) {
String jpql = "from Vendor where name = :name";
TypedQuery<Vendor> query = em.createQuery(jpql, Vendor.class)
.setParameter("name", name);
List<Vendor> vendors = query.getResultList();
if (vendors.isEmpty()) {
return null;
}
return vendors.get(0);
}
@Override
public boolean have(Vendor vendor) {
String jpql = "from Vendor where name =:name and contactMan =:contactMan and phone =:phone and address =:address and note =:note";
TypedQuery<Vendor> query = em.createQuery(jpql, Vendor.class)
.setParameter("name", vendor.getName())
.setParameter("contactMan", vendor.getContactMan())
.setParameter("phone", vendor.getPhone())
.setParameter("address", vendor.getAddress())
.setParameter("note", vendor.getNote());
List<Vendor> vendors = query.getResultList();
if(vendors.isEmpty()){
return false;
}
return true;
}
}
package com.originspark.drp.service.resources;
import java.util.List;
import com.originspark.drp.dao.BaseDAO;
import com.originspark.drp.models.resources.WareCategory;
public interface WareCategoryService extends BaseDAO<WareCategory>{
List<WareCategory> treeViewData();
}
package com.originspark.drp.service.resources;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.originspark.drp.dao.BaseDAOSupport;
import com.originspark.drp.models.resources.WareCategory;
@Transactional
@Service
public class WareCategoryServiceBean extends BaseDAOSupport<WareCategory> implements
WareCategoryService {
@Override
public List<WareCategory> treeViewData() {
String sql = "from WareCategory where parent is null order by status asc, id desc";
return em.createQuery(sql, WareCategory.class).getResultList();
}
}
package com.originspark.drp.service.resources;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Service;
import com.originspark.drp.dao.BaseDAO;
import com.originspark.drp.models.resources.Ware;
import com.originspark.drp.util.json.FilterRequest;
public interface WareService extends BaseDAO<Ware>{
List<Ware> pagedDataSet(int start, int limit, List<FilterRequest> filters);
Long pagedDataCount(List<FilterRequest> filters);
Map<String, String> validate(Ware ware);
//判断该商品是否已经存在
boolean have(Ware ware);
}
package com.originspark.drp.service.resources;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.originspark.drp.dao.BaseDAOSupport;
import com.originspark.drp.models.resources.Ware;
import com.originspark.drp.models.resources.Ware.COLUMNS;
import com.originspark.drp.util.json.FilterRequest;
@Transactional
@Service
public class WareServiceBean extends BaseDAOSupport<Ware> implements WareService {
@Override
public List<Ware> pagedDataSet(int start, int limit,
List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Ware> dataQuery = cb.createQuery(Ware.class);
Root<Ware> ware = dataQuery.from(Ware.class);
dataQuery.select(ware);
Predicate[] predicates = toPredicates(em,cb, ware, filters);
if (predicates != null) {
dataQuery.where(cb.and(predicates));
}
dataQuery.orderBy(cb.asc(ware.get("status")), cb.desc(ware.get("id")));
return em.createQuery(dataQuery).setFirstResult(start)
.setMaxResults(limit).getResultList();
}
@Override
public Long pagedDataCount(List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
Root<Ware> ware = countQuery.from(Ware.class);
countQuery.select(cb.count(ware));
Predicate[] predicates = toPredicates(em,cb, ware, filters);
if (predicates != null) {
countQuery.where(cb.and(predicates));
}
return em.createQuery(countQuery).getSingleResult();
}
public static Predicate[] toPredicates(EntityManager em,CriteriaBuilder cb, Root<Ware> ware,
List<FilterRequest> filters) {
List<Predicate> criteria = new ArrayList<Predicate>();
try {
for (FilterRequest filter : filters) {
COLUMNS column = COLUMNS.valueOf(filter.getProperty()
.toUpperCase());
String value = filter.getValue();
switch (column) {
case NAME:
if(value != null && !value.equals("")){
criteria.add(cb.like(ware.<String>get("name"), "%"+value+"%"));
}
break;
case BRAND:
if(value != null && !value.equals("")){
criteria.add(cb.like(ware.<String>get("brand"), "%"+value+"%"));
}
break;
case MODEL:
if(value != null && !value.equals("")){
criteria.add(cb.like(ware.<String>get("model"), "%"+value+"%"));
}
break;
case UNIT:
if(value != null && !value.equals("")){
criteria.add(cb.like(ware.<String>get("unit"), "%"+value+"%"));
}
break;
case VENDOR:
if(value != null && !value.equals("")){
criteria.add(cb.like(ware.get("vendor").<String>get("name"), "%"+value+"%"));
}
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
if (criteria.size() == 0) {
return null;
} else {
Predicate[] predicates = new Predicate[criteria.size()];
predicates = criteria.toArray(predicates);
return predicates;
}
}
@Override
public Map<String, String> validate(Ware ware) {
Map<String, String> validations = new HashMap<String,String>();
String name = ware.getName();
if(name == null || name.trim().equals("")){
validations.put("name", "名称不能为空");
}
String unit = ware.getUnit();
if(unit == null || unit.trim().equals("")){
validations.put("unit", "单位不能为空");
}
return validations;
}
@Override
public boolean have(Ware ware) {
String jpql = "from Ware where name =:name and model =:model and unit =:unit and brand =:brand and category =:category and vendor =:vendor";
TypedQuery<Ware> query = em.createQuery(jpql, Ware.class)
.setParameter("name", ware.getName())
.setParameter("model", ware.getModel())
.setParameter("unit", ware.getUnit())
.setParameter("brand", ware.getBrand())
.setParameter("category", ware.getCategory())
.setParameter("vendor", ware.getVendor());
List<Ware> wares = query.getResultList();
if(wares.isEmpty()){
return false;
}
return true;
}
@SuppressWarnings("unchecked")
public static List<BigInteger> getWaresBySystem(EntityManager em,Long id) {
String sql = "SELECT id FROM wares WHERE id in ("
+ " SELECT csi.ware"
+ " FROM cost_stock_in csi,invoice_stock_in isi"
+ " WHERE csi.invoice = isi.id and isi.system = ? )";
Query query = em.createNativeQuery(sql);
query.setParameter(1, id);
List<BigInteger> res = query.getResultList();
List<BigInteger> ids = new ArrayList<BigInteger>();
for (int i = 0, length = res.size(); i < length; i++) {
ids.add(res.get(i));
}
return ids;
}
}
package com.originspark.drp.service.users;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Service;
import com.originspark.drp.dao.BaseDAO;
import com.originspark.drp.models.User;
import com.originspark.drp.util.json.FilterRequest;
public interface UserService extends BaseDAO<User>{
List<User> pagedDataSet(int start, int limit,List<FilterRequest> filters);
Long pagedDataCount(List<FilterRequest> filters);
Map<String, String> validate();
}
package com.originspark.drp.service.users;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.originspark.drp.dao.BaseDAOSupport;
import com.originspark.drp.models.User;
import com.originspark.drp.models.User.COLUMNS;
import com.originspark.drp.util.enums.Gender;
import com.originspark.drp.util.enums.Status;
import com.originspark.drp.util.enums.UserType;
import com.originspark.drp.util.json.FilterRequest;
@Transactional
@Service
public class UserServiceBean extends BaseDAOSupport<User> implements UserService {
@Override
public List<User> pagedDataSet(int start, int limit,List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> dataQuery = cb.createQuery(User.class);
Root<User> user = dataQuery.from(User.class);
dataQuery.select(user);
Predicate[] predicates = toPredicates(cb, user, filters);
if (predicates != null) {
dataQuery.where(cb.and(predicates));
}
dataQuery.orderBy(cb.asc(user.get("status")), cb.desc(user.get("id")));
return em.createQuery(dataQuery).setFirstResult(start)
.setMaxResults(limit).getResultList();
}
@Override
public Long pagedDataCount(List<FilterRequest> filters) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
Root<User> user = countQuery.from(User.class);
countQuery.select(cb.count(user));
Predicate[] predicates = toPredicates(cb, user, filters);
if (predicates != null) {
countQuery.where(cb.and(predicates));
}
return em.createQuery(countQuery).getSingleResult();
}
@Override
public Map<String, String> validate() {
return null;
}
public static Predicate[] toPredicates(CriteriaBuilder cb, Root<User> user,
List<FilterRequest> filters) {
List<Predicate> criteria = new ArrayList<Predicate>();
try {
for (FilterRequest filter : filters) {
COLUMNS column = COLUMNS.valueOf(filter.getProperty()
.toUpperCase());
String value = filter.getValue();
switch (column) {
case TYPE :
if (value != null && !value.equals("")) {
criteria.add(cb.equal(user.get("type"), UserType.valueOf(value)));
}
break;
case NAME:
if (value != null && !value.equals("")) {
criteria.add(cb.like(user.<String>get("name"), "%" + value + "%"));
}
break;
case CODE:
if (value != null && !value.equals("")) {
criteria.add(cb.like(user.<String>get("code"), "%" + value + "%"));
}
break;
case PHONE:
if (value != null && !value.equals("")) {
criteria.add(cb.like(user.<String>get("phone"), "%" + value + "%"));
}
break;
case ADDRESS:
if (value != null && !value.equals("")) {
criteria.add(cb.like(user.<String>get("address"), "%" + value + "%"));
}
break;
case EMAIL:
if (value != null && !value.equals("")) {
criteria.add(cb.like(user.<String>get("email"), "%" + value + "%"));
}
break;
case GENDER:
if (value != null && !value.equals("")) {
criteria.add(cb.equal(user.<Enum<Gender>>get("gender"), Gender.valueOf(value)));
}
break;
case STATUS:
if (value != null && !value.equals("")) {
criteria.add(cb.equal(user.<Enum<Status>>get("status"), Status.valueOf(value)));
}
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
if (criteria.size() == 0) {
return null;
} else {
Predicate[] predicates = new Predicate[criteria.size()];
predicates = criteria.toArray(predicates);
return predicates;
}
}
}
This diff is collapsed.
package com.originspark.drp.util;
import javax.servlet.http.HttpServletRequest;
public class FileUtil {
public static String RESOURCES_PATH = "/resources";
public static String UPLOAD_PATH = "/resources/upload";
public static String DOCUMENT_TEMPLATES_PATH = "/resources/document_templates";
public static String getResourcesPath(HttpServletRequest request) {
String path = request.getSession().getServletContext().getRealPath(RESOURCES_PATH);
return path;
}
public static String getUploadPath(HttpServletRequest request) {
String path = request.getSession().getServletContext().getRealPath(UPLOAD_PATH);
return path;
}
public static String getTemplatePath(HttpServletRequest request) {
String path = request.getSession().getServletContext().getRealPath(DOCUMENT_TEMPLATES_PATH);
return path;
}
}
package com.originspark.drp.util;
import javax.servlet.http.HttpServletRequest;
import com.originspark.drp.models.User;
public class SessionUtil {
//返回当前登陆的用户信息
public static User getCurrentUser(HttpServletRequest request){
User user=(User) request.getSession().getAttribute("user");
return user;
}
public static String getCurrentUserName(HttpServletRequest request){
return getCurrentUser(request).getName();
}
}
package com.originspark.drp.util;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringUtil {
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public static Date String2Date(String str) throws ParseException{
return sdf.parse(str);
}
public static BigDecimal String2BigDecimal(String str){
return BigDecimal.valueOf(Double.parseDouble(str));
}
/**
* 通过年月获取上一个月的年月
*
* @param thisMonth="2014-02"/"2014-01"
* @return "2014-01"/"2013-12"
*/
public static String getPreMonth(String thisMonth){
String yearMonth[] = thisMonth.split("-");
int month = Integer.parseInt(yearMonth[1]);
if(month > 1){
return yearMonth[0]+"-"+String.format("%02d", month-1);
}
int year = Integer.parseInt(yearMonth[0]);
return (year-1)+"-12";
}
}
package com.originspark.drp.util.enums;
/**
* 审核状态
*/
public enum AuditState {
UNAUDITED ,//未审核
APPROVED,//合格通过
UNAPPROVED//不合格退回,当库管或者项目经理选择失败退回后,材料员的审核状态更改为UNAPPROVED
}
package com.originspark.drp.util.enums;
public enum Gender {
MALE,
FEMALE
}
package com.originspark.drp.util.enums;
public enum Status {
ACTIVE, //可用的
INACTIVE, //不可用的
DESTORYED //销毁的
}
package com.originspark.drp.util.enums;
public enum UserType {
MANAGER,// 负责人
WAREKEEPER,// 库管员
REGULATOR// 经手人
}
package com.originspark.drp.util.json;
import com.originspark.drp.util.enums.AuditState;
public class AuditStateUpdateJson {
private Long invoiceIds[];
private String userType;
private Long userId;
private AuditState state;
public Long[] getInvoiceIds() {
return invoiceIds;
}
public void setInvoiceIds(Long[] invoiceIds) {
this.invoiceIds = invoiceIds;
}
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public AuditState getState() {
return state;
}
public void setState(AuditState state) {
this.state = state;
}
}
package com.originspark.drp.util.json;
public class FilterRequest {
private String property;
private String value;
public FilterRequest() {
super();
}
public FilterRequest(String property, String value) {
super();
this.property = property;
this.value = value;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package com.originspark.drp.util.json;
public class IdsJson {
private long ids[];
public long[] getIds() {
return ids;
}
public void setIds(long[] ids) {
this.ids = ids;
}
}
package com.originspark.drp.util.json;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
public class Jackson {
private static ObjectMapper mapper = new ObjectMapper();
private static SimpleModule module = new SimpleModule();
static {
module.addSerializer(BigDecimal.class, new CombinedPriceSerializer());
mapper.registerModule(module);
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
}
public static String toJson(Object obj) {
try {
return mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
System.out.println("==========Jackson exception==========");
e.printStackTrace();
return null;
}
}
}
//所有的关于价格的信息都会保留两位有效数字
// http://stackoverflow.com/questions/11319445/java-to-jackson-json-serialization-money-fields
class CombinedPriceSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.writeString(value.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
}
}
package com.originspark.drp.util.json;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUtils {
public static List<FilterRequest> getListFromJsonArray(Object data) {
List<FilterRequest> values = new ArrayList<FilterRequest>();
try {
ObjectMapper mapper = new ObjectMapper();
values = mapper.readValue(data.toString(), new TypeReference<List<FilterRequest>>() {});
} catch (Exception ex) {
ex.printStackTrace();
}
for(int i=0;i<values.size();i++){
FilterRequest filter = values.get(i);
String value = filter.getValue();
if(value==null || value.trim().equals("")){
values.remove(i);
i--;
}
}
return values;
}
}
package com.originspark.drp.util.json;
public class PasswordJson {
private String pwd;
private String newpwd;
private String newpwdagain;
public PasswordJson() {
super();
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getNewpwd() {
return newpwd;
}
public void setNewpwd(String newpwd) {
this.newpwd = newpwd;
}
public String getNewpwdagain() {
return newpwdagain;
}
public void setNewpwdagain(String newpwdagain) {
this.newpwdagain = newpwdagain;
}
}
\ No newline at end of file
package com.originspark.drp.util.poi.exporter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.mutable.MutableInt;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import com.originspark.drp.web.models.projects.inventories.CurrentInventoryUI;
public class CurrentInventoriesGenerator {
/**
* 生成月末盘点表的excel
*
* @param fileName 文件名:项目名称_系统名称_2014-02_月末盘点
* @param inventories
* @param resourcePath 代指目录/WebContent/resources
* @return
*/
public static File generate(String fileName, List<CurrentInventoryUI> inventories, String resourcePath) {
try {
// Open excel template
InputStream inp = new FileInputStream(FileUtils.getFile(resourcePath + "/document_templates/currentInventory.xls"));
Workbook wb = WorkbookFactory.create(inp);
Sheet mainSheet = wb.getSheetAt(0);
// This is used as a pointer
MutableInt currentRow = new MutableInt(1);
for (CurrentInventoryUI inventory : inventories) {
Row row = mainSheet.createRow(currentRow.intValue());
row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(inventory.getName());
row.createCell(1, Cell.CELL_TYPE_STRING).setCellValue(inventory.getModel());
row.createCell(2, Cell.CELL_TYPE_STRING).setCellValue(inventory.getUnit());
row.createCell(3, Cell.CELL_TYPE_STRING).setCellValue(inventory.getIncount());
row.createCell(4, Cell.CELL_TYPE_STRING).setCellValue(inventory.getOutcount() + "");
row.createCell(5, Cell.CELL_TYPE_STRING).setCellValue(inventory.getRestcount() + "");
row.createCell(6, Cell.CELL_TYPE_STRING).setCellValue(inventory.getIncome() + "");
row.createCell(7, Cell.CELL_TYPE_STRING).setCellValue(inventory.getOutcome() + "");
row.createCell(8, Cell.CELL_TYPE_STRING).setCellValue(inventory.getProfit() + "");
currentRow.increment();
}
File dir = new File(resourcePath + "/upload");
if (!dir.exists()) {
dir.mkdir();
}
File output = File.createTempFile(fileName, ".xls", dir);
FileOutputStream fos = new FileOutputStream(output);
wb.write(fos);
fos.close();
return output;
} catch (Exception e) {
return null;
}
}
}
package com.originspark.drp.util.poi.exporter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.mutable.MutableInt;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import com.originspark.drp.web.models.projects.inventories.Ware;
public class MonthendInventoryGenerator {
/**
* 生成月末盘点表的excel
*
* @param fileName 文件名:项目名称_系统名称_2014-02_月末盘点
* @param inventories
* @param resourcePath 代指目录/WebContent/resources
* @return
*/
public static File generate(String fileName,List<Ware> inventories,String resourcePath){
try {
// Open excel template
InputStream inp = new FileInputStream(FileUtils.getFile( resourcePath + "/document_templates/monthEndInventory.xls"));
Workbook wb = WorkbookFactory.create(inp);
Sheet mainSheet = wb.getSheetAt(0);
// This is used as a pointer
MutableInt currentRow = new MutableInt(1);
for (Ware inventory : inventories) {
Row row = mainSheet.createRow(currentRow.intValue());
row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(inventory.getWareName());
row.createCell(1, Cell.CELL_TYPE_STRING).setCellValue(inventory.getWareBrand());
row.createCell(2, Cell.CELL_TYPE_STRING).setCellValue(inventory.getWareModel());
row.createCell(3, Cell.CELL_TYPE_STRING).setCellValue(inventory.getWareUnit());
row.createCell(4, Cell.CELL_TYPE_STRING).setCellValue(inventory.getLastMonthLeft()+"");
row.createCell(5, Cell.CELL_TYPE_STRING).setCellValue(inventory.getMonthIn()+"");
row.createCell(6, Cell.CELL_TYPE_STRING).setCellValue(inventory.getMonthOut()+"");
row.createCell(7, Cell.CELL_TYPE_STRING).setCellValue(inventory.getMonthLeft()+"");
currentRow.increment();
}
File output = File.createTempFile(fileName, ".xls", new File(resourcePath + "/upload"));
FileOutputStream fos = new FileOutputStream(output);
wb.write(fos);
fos.close();
return output;
} catch (Exception e) {
return null;
}
}
}
package com.originspark.drp.util.poi.exporter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.mutable.MutableInt;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import com.originspark.drp.models.resources.Vendor;
import com.originspark.drp.models.resources.Ware;
public class WareGenerator {
/**
* 生成商品表的excel
*
* @param fileName
* @param wares
* @param resourcePath 代指目录/WebContent/resources
* @return
*/
public static File generate(String fileName, List<Ware> wares, String resourcePath) {
try {
// Open excel template
InputStream inp = new FileInputStream(FileUtils.getFile(resourcePath + "/document_templates/ware.xls"));
Workbook wb = WorkbookFactory.create(inp);
Sheet mainSheet = wb.getSheetAt(0);
// This is used as a pointer
MutableInt currentRow = new MutableInt(1);
for (Ware ware : wares) {
Row row = mainSheet.createRow(currentRow.intValue());
row.createCell(0, Cell.CELL_TYPE_STRING).setCellValue(ware.getName());
row.createCell(1, Cell.CELL_TYPE_STRING).setCellValue(ware.getBrand());
row.createCell(2, Cell.CELL_TYPE_STRING).setCellValue(ware.getModel());
row.createCell(3, Cell.CELL_TYPE_STRING).setCellValue(ware.getUnit());
Vendor vendor = ware.getVendor();
row.createCell(4, Cell.CELL_TYPE_STRING).setCellValue(vendor == null ? "" : vendor.getName());
currentRow.increment();
}
File dir = new File(resourcePath + "/upload");
if (!dir.exists()) {
dir.mkdir();
}
File output = File.createTempFile(fileName, ".xls", dir);
FileOutputStream fos = new FileOutputStream(output);
wb.write(fos);
fos.close();
return output;
} catch (Exception e) {
return null;
}
}
}
package com.originspark.drp.util.poi.importer;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import com.originspark.drp.models.projects.inventories.MonthendInventory;
import com.originspark.drp.models.resources.Ware;
public class MonthendInventoryImporter {
public static List<MonthendInventory> importExcel(File input) throws Exception {
List<MonthendInventory> monthendInventories = new ArrayList<MonthendInventory>();
InputStream in = new FileInputStream(input);
Workbook wb = WorkbookFactory.create(in);
Sheet mainSheet = wb.getSheetAt(0);
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
int rowLength = mainSheet.getLastRowNum();
for (int i = 1; i <= rowLength; i++) {
try {
Row row = mainSheet.getRow(i);
if (row == null) {
continue;
}
//读取excel信息
String name = POICommon.getCellValueAsString(row.getCell(0), evaluator);
String brand = POICommon.getCellValueAsString(row.getCell(1), evaluator);
String model = POICommon.getCellValueAsString(row.getCell(2), evaluator);
String unit = POICommon.getCellValueAsString(row.getCell(3), evaluator);
Double inQuantity = POICommon.getCellValueAsNumber(row.getCell(4), evaluator);
Double outQuantity = POICommon.getCellValueAsNumber(row.getCell(5), evaluator);
Double balance = POICommon.getCellValueAsNumber(row.getCell(6), evaluator);
//构造商品信息
Ware ware = new Ware();
ware.setName(name);
ware.setBrand(brand);
ware.setModel(model);
ware.setUnit(unit);
//构造月末盘点信息
MonthendInventory inventory = new MonthendInventory();
inventory.setWare(ware);
inventory.setMonthIn(BigDecimal.valueOf(inQuantity));
inventory.setMonthOut(BigDecimal.valueOf(outQuantity));
inventory.setMonthLeft(BigDecimal.valueOf(balance));
monthendInventories.add(inventory);
} catch (Exception e) {
// error
continue;
}
}
return monthendInventories;
}
}
package com.originspark.drp.util.poi.importer;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
public class POICommon {
public static double getCellValueAsNumber(Cell cell, FormulaEvaluator evaluator) {
if (cell == null) {
return 0;
} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
return cell.getNumericCellValue();
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
return evaluator.evaluate(cell).getNumberValue();
} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
try {
return Double.parseDouble(cell.getStringCellValue().trim());
} catch (Exception e) {
//Logger.error("Parse cell value to double failed " + cell.getStringCellValue(), e);
}
}
return 0;
}
public static String getCellValueAsString(Cell cell, FormulaEvaluator evaluator) {
if (cell == null) {
return "";
} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
return cell.getNumericCellValue() + "";
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
return evaluator.evaluate(cell).getNumberValue() + "";
} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
return cell.getStringCellValue().trim();
}
return "";
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Manifest-Version: 1.0
Class-Path:
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment