Browse Source

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

administrator 11 years ago
parent
commit
ee4e0e746b

+ 131 - 0
src/main/java/com/uas/platform/b2b/controller/CustomerController.java

@@ -0,0 +1,131 @@
+package com.uas.platform.b2b.controller;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.Authentication;
+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.uas.platform.b2b.model.Customer;
+import com.uas.platform.b2b.model.User;
+import com.uas.platform.b2b.service.CustomerService;
+import com.uas.platform.b2b.service.UserService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import com.uas.platform.core.web.bind.RequestParams;
+
+@Controller
+@RequestMapping("/sale/customers")
+public class CustomerController {
+
+	@Autowired
+	private CustomerService customerService;
+
+	@Autowired
+	private UserService userService;
+
+	/**
+	 * 客户资料分页查找
+	 * 
+	 * @param params
+	 * @param authentication
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.GET)
+	@ResponseBody
+	public Page<Customer> getCustomers(PageParams params, Authentication authentication) {
+		User user = userService.findUserByUserUU(Long.parseLong(authentication.getName()));
+		return customerService.findAllByPageInfo(user.getEnterprise().getUu(), new PageInfo(params));
+	}
+	
+	/**
+	 * 获取客户信息
+	 * 
+	 * @param custId
+	 * @return
+	 */
+	@RequestMapping(value = "/{custId}", method = RequestMethod.GET)
+	@ResponseBody
+	public Customer getCustomer(@PathVariable("custId") Long custId) {
+		return customerService.findCustomer(custId);
+	}
+
+	/**
+	 * 保存、修改客户信息
+	 * 
+	 * @param json
+	 * @return
+	 */
+	@RequestMapping(method = RequestMethod.POST)
+	@ResponseBody
+	public List<Customer> saveCustomers(@RequestBody String json, Authentication authentication) {
+		List<Customer> customers = FlexJsonUtils.fromJsonArray(json, Customer.class);
+		User user = userService.findUserByUserUU(Long.parseLong(authentication.getName()));
+		return customerService.saveCustomers(user, customers);
+	}
+
+	/**
+	 * 审核客户信息
+	 * 
+	 * @param json
+	 * @return
+	 */
+	@RequestMapping(params = RequestParams.AUDIT, method = RequestMethod.PUT)
+	@ResponseBody
+	public List<Customer> auditCustomers(@RequestBody String json, Authentication authentication) {
+		List<Customer> customers = FlexJsonUtils.fromJsonArray(json, Customer.class);
+		User user = userService.findUserByUserUU(Long.parseLong(authentication.getName()));
+		return customerService.auditCustomers(user, customers);
+	}
+
+	/**
+	 * 反审核客户信息
+	 * 
+	 * @param json
+	 * @return
+	 */
+	@RequestMapping(params = RequestParams.UNAUDIT, method = RequestMethod.PUT)
+	@ResponseBody
+	public List<Customer> unAuditCustomers(@RequestBody String json, Authentication authentication) {
+		List<Customer> customers = FlexJsonUtils.fromJsonArray(json, Customer.class);
+		User user = userService.findUserByUserUU(Long.parseLong(authentication.getName()));
+		return customerService.unAuditCustomers(user, customers);
+	}
+
+	/**
+	 * 删除客户信息
+	 * 
+	 * @param json
+	 * @return
+	 */
+	@RequestMapping(value = "/{custId}", method = RequestMethod.DELETE)
+	public ResponseEntity<String> deleteCustomers(@PathVariable("custId") String custIds, Authentication authentication) {
+		customerService.deleteCustomers(custIds);
+		return new ResponseEntity<String>(HttpStatus.OK);
+	}
+
+	/**
+	 * 按uu号获取客户信息 <br>
+	 * 多个uu号用逗号隔开
+	 * 
+	 * @param custUU
+	 * @return
+	 */
+	@RequestMapping(value = "/customer/{custUU}", method = RequestMethod.GET)
+	@ResponseBody
+	public List<Customer> getCustomersByCustUU(@PathVariable("custUU") String custUU,
+			Authentication authentication) {
+		User user = userService.findUserByUserUU(Long.parseLong(authentication.getName()));
+		return customerService.findAllByCustUU(user.getEnterprise().getUu(), custUU);
+	}
+
+}

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

@@ -0,0 +1,5 @@
+package com.uas.platform.b2b.controller;
+
+public class SaleChangeController {
+
+}

+ 27 - 0
src/main/java/com/uas/platform/b2b/controller/SaleOrderController.java

@@ -0,0 +1,27 @@
+package com.uas.platform.b2b.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Controller;
+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.uas.platform.b2b.model.SaleOrder;
+import com.uas.platform.b2b.service.SaleOrderService;
+import com.uas.platform.core.model.PageInfo;
+
+@Controller
+@RequestMapping("/sale")
+public class SaleOrderController {
+	
+	@Autowired
+	private SaleOrderService saleOrderService;
+
+	@RequestMapping(value = "/orders", method = RequestMethod.POST)
+	@ResponseBody
+	public Page<SaleOrder> getSaleOrders(@RequestBody String json) {
+		return saleOrderService.findAllByPageInfo(new PageInfo(json));
+	}
+}

+ 12 - 0
src/main/java/com/uas/platform/b2b/dao/CustomerDao.java

@@ -0,0 +1,12 @@
+package com.uas.platform.b2b.dao;
+
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import com.uas.platform.b2b.model.Customer;
+import com.uas.platform.core.data.repository.GenericRepository;
+
+@Repository
+public interface CustomerDao extends JpaSpecificationExecutor<Customer>, GenericRepository<Customer, Long> {
+	
+}

+ 12 - 0
src/main/java/com/uas/platform/b2b/dao/SaleOrderDao.java

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

+ 124 - 0
src/main/java/com/uas/platform/b2b/model/Customer.java

@@ -0,0 +1,124 @@
+package com.uas.platform.b2b.model;
+
+import java.io.Serializable;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+import com.uas.platform.core.persistence.Logger;
+import com.uas.platform.core.persistence.OtherUserUU;
+import com.uas.platform.core.persistence.StatusColumn;
+import com.uas.platform.core.persistence.UserUU;
+
+@Entity
+@Table(name = "sale$customers")
+@Logger(enUU = "cu_myenuu", userUU = "cu_myuseruu")
+public class Customer implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sale$customers_gen")
+	@SequenceGenerator(name = "sale$customers_gen", sequenceName = "sale$customers_seq", allocationSize = 1)
+	@Column(name = "cu_id")
+	private Long id;
+
+	/**
+	 * 我的企业UU
+	 */
+	@Column(name = "cu_myenuu")
+	private Long myEnUU;
+
+	/**
+	 * 我的UU
+	 */
+	@Column(name = "cu_myuseruu")
+	@UserUU
+	private Long myUserUU;
+
+	/**
+	 * 客户企业UU
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "cu_custenuu")
+	private Enterprise customerEnterprise;
+
+	/**
+	 * 客户联系人UU
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "cu_custuseruu")
+	@OtherUserUU
+	private User customerUser;
+
+	/**
+	 * 状态
+	 */
+	@Column(name = "cu_status")
+	@StatusColumn
+	private Integer status;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getMyEnUU() {
+		return myEnUU;
+	}
+
+	public void setMyEnUU(Long myEnUU) {
+		this.myEnUU = myEnUU;
+	}
+
+	public Long getMyUserUU() {
+		return myUserUU;
+	}
+
+	public void setMyUserUU(Long myUserUU) {
+		this.myUserUU = myUserUU;
+	}
+
+	public Enterprise getCustomerEnterprise() {
+		return customerEnterprise;
+	}
+
+	public void setCustomerEnterprise(Enterprise customerEnterprise) {
+		this.customerEnterprise = customerEnterprise;
+	}
+
+	public User getCustomerUser() {
+		return customerUser;
+	}
+
+	public void setCustomerUser(User customerUser) {
+		this.customerUser = customerUser;
+	}
+
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	@Override
+	public String toString() {
+		return customerEnterprise.getEnName();
+	}
+}

+ 449 - 0
src/main/java/com/uas/platform/b2b/model/Product.java

@@ -0,0 +1,449 @@
+package com.uas.platform.b2b.model;
+
+import java.io.Serializable;
+import java.sql.Clob;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+import com.uas.platform.core.persistence.EnterpriseUU;
+import com.uas.platform.core.persistence.Logger;
+import com.uas.platform.core.persistence.StatusColumn;
+import com.uas.platform.core.persistence.UserUU;
+
+/**
+ * 商品信息
+ * @author yingp
+ *
+ */
+@Entity
+@Table(name = "products")
+@Logger
+public class Product implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "products_gen")
+	@SequenceGenerator(name = "products_gen", sequenceName = "products_seq", allocationSize = 1)
+	@Column(name = "pr_id")
+	private Long id;
+
+	/**
+	 * 商品信息标题
+	 */
+	@Column(name = "pr_title")
+	private String title;
+
+	/**
+	 * 产品编号
+	 */
+	@Column(name = "pr_code")
+	private String code;
+
+	/**
+	 * 产品规格
+	 */
+	@Column(name = "pr_spec")
+	private String spec;
+
+	/**
+	 * 单位
+	 */
+	@Column(name = "pr_unit")
+	private String unit;
+
+	/**
+	 * 所属企业UU
+	 */
+	@Column(name = "pr_enuu")
+	@EnterpriseUU
+	private Long enUU;
+
+	/**
+	 * 个人UU
+	 */
+	@Column(name = "pr_useruu")
+	@UserUU
+	private Long userUU;
+
+	/**
+	 * 最小包装量
+	 */
+	@Column(name = "pr_minpack")
+	private Float minPack;
+
+	/**
+	 * 最小采购量
+	 */
+	@Column(name = "pr_minorder")
+	private Float minOrder;
+
+	/**
+	 * 采购提前期
+	 */
+	@Column(name = "pr_leadtime")
+	private Float leadtime;
+
+	/**
+	 * 状态
+	 */
+	@Column(name = "pr_status")
+	@StatusColumn
+	private Integer status;
+
+	/**
+	 * 库存数
+	 */
+	@Column(name = "pr_stock")
+	private Double stock;
+
+	/**
+	 * 附件ID串(逗号间隔)
+	 */
+	@Column(name = "pr_attach")
+	private String attach;
+
+	/**
+	 * 详细描述
+	 */
+	@Column(name = "pr_description")
+	private Clob description;
+
+	/**
+	 * 图片path
+	 */
+	@Column(name = "pr_img1")
+	private String img1;
+
+	/**
+	 * 图片path
+	 */
+	@Column(name = "pr_img2")
+	private String img2;
+
+	/**
+	 * 图片path
+	 */
+	@Column(name = "pr_img3")
+	private String img3;
+
+	/**
+	 * 图片path
+	 */
+	@Column(name = "pr_img4")
+	private String img4;
+
+	/**
+	 * 图片path
+	 */
+	@Column(name = "pr_img5")
+	private String img5;
+
+	/**
+	 * 价格
+	 */
+	@Column(name = "pr_price")
+	private Double price;
+
+	/**
+	 * 价格区间
+	 */
+	@Column(name = "pr_pricerange")
+	private String priceRange;
+
+	/**
+	 * 品牌
+	 */
+	@Column(name = "pr_brand")
+	private String brand;
+
+	/**
+	 * 支持网上交易
+	 */
+	@Column(name = "pr_onlineorder")
+	private Short onlineOrder;
+
+	/**
+	 * 信息有效截止期
+	 */
+	@Column(name = "pr_validity")
+	private Date validity;
+
+	/**
+	 * 发货地址
+	 */
+	@Column(name = "pr_shipaddr")
+	private String shipAddr;
+
+	/**
+	 * 图片私密
+	 */
+	@Column(name = "pr_privateimg")
+	private Short privateImg;
+
+	/**
+	 * 价格私密
+	 */
+	@Column(name = "pr_privateprice")
+	private Short privatePrice;
+
+	/**
+	 * 会员特供
+	 */
+	@Column(name = "pr_formember")
+	private Short forMember;
+
+	/**
+	 * 商品属性
+	 */
+	@Column(name = "pr_properties")
+	private String properties;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getSpec() {
+		return spec;
+	}
+
+	public void setSpec(String spec) {
+		this.spec = spec;
+	}
+
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
+	public Long getEnUU() {
+		return enUU;
+	}
+
+	public void setEnUU(Long enUU) {
+		this.enUU = enUU;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public Float getMinPack() {
+		return minPack;
+	}
+
+	public void setMinPack(Float minPack) {
+		this.minPack = minPack;
+	}
+
+	public Float getMinOrder() {
+		return minOrder;
+	}
+
+	public void setMinOrder(Float minOrder) {
+		this.minOrder = minOrder;
+	}
+
+	public Float getLeadtime() {
+		return leadtime;
+	}
+
+	public void setLeadtime(Float leadtime) {
+		this.leadtime = leadtime;
+	}
+
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public Double getStock() {
+		return stock;
+	}
+
+	public void setStock(Double stock) {
+		this.stock = stock;
+	}
+
+	public String getAttach() {
+		return attach;
+	}
+
+	public void setAttach(String attach) {
+		this.attach = attach;
+	}
+
+	public Clob getDescription() {
+		return description;
+	}
+
+	public void setDescription(Clob description) {
+		this.description = description;
+	}
+
+	public String getImg1() {
+		return img1;
+	}
+
+	public void setImg1(String img1) {
+		this.img1 = img1;
+	}
+
+	public String getImg2() {
+		return img2;
+	}
+
+	public void setImg2(String img2) {
+		this.img2 = img2;
+	}
+
+	public String getImg3() {
+		return img3;
+	}
+
+	public void setImg3(String img3) {
+		this.img3 = img3;
+	}
+
+	public String getImg4() {
+		return img4;
+	}
+
+	public void setImg4(String img4) {
+		this.img4 = img4;
+	}
+
+	public String getImg5() {
+		return img5;
+	}
+
+	public void setImg5(String img5) {
+		this.img5 = img5;
+	}
+
+	public Double getPrice() {
+		return price;
+	}
+
+	public void setPrice(Double price) {
+		this.price = price;
+	}
+
+	public String getPriceRange() {
+		return priceRange;
+	}
+
+	public void setPriceRange(String priceRange) {
+		this.priceRange = priceRange;
+	}
+
+	public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	public Short getOnlineOrder() {
+		return onlineOrder;
+	}
+
+	public void setOnlineOrder(Short onlineOrder) {
+		this.onlineOrder = onlineOrder;
+	}
+
+	public Date getValidity() {
+		return validity;
+	}
+
+	public void setValidity(Date validity) {
+		this.validity = validity;
+	}
+
+	public String getShipAddr() {
+		return shipAddr;
+	}
+
+	public void setShipAddr(String shipAddr) {
+		this.shipAddr = shipAddr;
+	}
+
+	public Short getPrivateImg() {
+		return privateImg;
+	}
+
+	public void setPrivateImg(Short privateImg) {
+		this.privateImg = privateImg;
+	}
+
+	public Short getPrivatePrice() {
+		return privatePrice;
+	}
+
+	public void setPrivatePrice(Short privatePrice) {
+		this.privatePrice = privatePrice;
+	}
+
+	public Short getForMember() {
+		return forMember;
+	}
+
+	public void setForMember(Short forMember) {
+		this.forMember = forMember;
+	}
+
+	public String getProperties() {
+		return properties;
+	}
+
+	public void setProperties(String properties) {
+		this.properties = properties;
+	}
+
+	@Override
+	public String toString() {
+		return "编号:" + getCode() + ",标题:" + getTitle() + ",规格型号:" + getSpec();
+	}
+
+}

+ 5 - 0
src/main/java/com/uas/platform/b2b/model/SaleChange.java

@@ -0,0 +1,5 @@
+package com.uas.platform.b2b.model;
+
+public class SaleChange {
+
+}

+ 243 - 0
src/main/java/com/uas/platform/b2b/model/SaleOrder.java

@@ -0,0 +1,243 @@
+package com.uas.platform.b2b.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
+
+@Entity
+@Table(name = "sale$orders")
+public class SaleOrder implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sale$orders_gen")
+	@SequenceGenerator(name = "sale$orders_gen", sequenceName = "sale$orders_seq", allocationSize = 1)
+	@Column(name = "sa_id")
+	private Long id;
+
+	/**
+	 * 订单所属企业UU
+	 */
+	@Column(name = "sa_enuu")
+	private Long enUU;
+
+	/**
+	 * 订单所属业务员UU
+	 */
+	@Column(name = "sa_useruu")
+	private Long userUU;
+
+	/**
+	 * 销售订单号
+	 */
+	@Column(name = "sa_code")
+	private String code;
+
+	/**
+	 * 销售类型
+	 */
+	@Column(name = "sa_type")
+	private String type;
+
+	/**
+	 * 单据归属日期
+	 */
+	@Column(name = "sa_date")
+	private Date date;
+
+	/**
+	 * 录单人员UU
+	 */
+	@Column(name = "sa_recorderuu")
+	private Long recorderUU;
+
+	/**
+	 * 客户企业UU
+	 */
+	@Column(name = "sa_custuu")
+	private Long custUU;
+
+	/**
+	 * 客户联系人UU
+	 */
+	@Column(name = "sa_custuseruu")
+	private Long custUserUU;
+
+	/**
+	 * 交货地址
+	 */
+	@Column(name = "sa_shipaddress")
+	private String shipAddress;
+
+	/**
+	 * 备注
+	 */
+	@Column(name = "sa_remark")
+	private String remark;
+
+	/**
+	 * 收款币种
+	 */
+	@Column(name = "sa_currency")
+	private String currency;
+
+	/**
+	 * 收款方式
+	 */
+	@Column(name = "sa_payments")
+	private String payments;
+
+	/**
+	 * 订单状态
+	 */
+	@Column(name = "sa_status")
+	private String status;
+
+	/**
+	 * 订单明细
+	 */
+	@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "order", fetch = FetchType.EAGER)
+	@OrderBy("sd_number")
+	@NotFound(action = NotFoundAction.IGNORE)
+	private List<SaleOrderItem> orderItems;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getEnUU() {
+		return enUU;
+	}
+
+	public void setEnUU(Long enUU) {
+		this.enUU = enUU;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public Long getRecorderUU() {
+		return recorderUU;
+	}
+
+	public void setRecorderUU(Long recorderUU) {
+		this.recorderUU = recorderUU;
+	}
+
+	public Long getCustUU() {
+		return custUU;
+	}
+
+	public void setCustUU(Long custUU) {
+		this.custUU = custUU;
+	}
+
+	public Long getCustUserUU() {
+		return custUserUU;
+	}
+
+	public void setCustUserUU(Long custUserUU) {
+		this.custUserUU = custUserUU;
+	}
+
+	public String getShipAddress() {
+		return shipAddress;
+	}
+
+	public void setShipAddress(String shipAddress) {
+		this.shipAddress = shipAddress;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getCurrency() {
+		return currency;
+	}
+
+	public void setCurrency(String currency) {
+		this.currency = currency;
+	}
+
+	public String getPayments() {
+		return payments;
+	}
+
+	public void setPayments(String payments) {
+		this.payments = payments;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public List<SaleOrderItem> getOrderItems() {
+		return orderItems;
+	}
+
+	public void setOrderItems(List<SaleOrderItem> orderItems) {
+		this.orderItems = orderItems;
+	}
+
+}

+ 173 - 0
src/main/java/com/uas/platform/b2b/model/SaleOrderItem.java

@@ -0,0 +1,173 @@
+package com.uas.platform.b2b.model;
+
+import java.io.Serializable;
+import java.sql.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "sale$orderitems")
+public class SaleOrderItem implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@Column(name = "sd_id")
+	private Long id;
+
+	/**
+	 * 销售订单
+	 */
+	@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
+	@JoinColumn(name = "sd_said")
+	private SaleOrder order;
+
+	/**
+	 * 序号
+	 */
+	@Column(name = "sd_number")
+	private Short number;
+
+	/**
+	 * 产品ID
+	 */
+	@Column(name = "sd_prid")
+	private Long productId;
+
+	/**
+	 * 产品
+	 */
+	@OneToOne(cascade = { CascadeType.ALL })
+	@JoinColumn(name = "sd_prid", insertable = false, updatable = false)
+	private Product product;
+
+	/**
+	 * 数量
+	 */
+	@Column(name = "sd_qty")
+	private Double qty;
+
+	/**
+	 * 备注
+	 */
+	@Column(name = "sd_remark")
+	private String remark;
+
+	/**
+	 * 含税单价
+	 */
+	@Column(name = "sd_price")
+	private Double price;
+
+	/**
+	 * 含税金额
+	 */
+	@Column(name = "sd_amount", insertable = false, updatable = false)
+	private Double amount;
+
+	/**
+	 * 交货日期
+	 */
+	@Column(name = "sd_delivery")
+	private Date delivery;
+
+	private Short isok;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public SaleOrder getOrder() {
+		return order;
+	}
+
+	public void setOrder(SaleOrder order) {
+		this.order = order;
+	}
+
+	public Short getNumber() {
+		return number;
+	}
+
+	public void setNumber(Short number) {
+		this.number = number;
+	}
+
+	public Long getProductId() {
+		return productId;
+	}
+
+	public void setProductId(Long productId) {
+		this.productId = productId;
+	}
+
+	public Product getProduct() {
+		return product;
+	}
+
+	public void setProduct(Product product) {
+		this.product = product;
+	}
+
+	public Double getQty() {
+		return qty;
+	}
+
+	public void setQty(Double qty) {
+		this.qty = qty;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Double getPrice() {
+		return price;
+	}
+
+	public void setPrice(Double price) {
+		this.price = price;
+	}
+
+	public Double getAmount() {
+		return amount;
+	}
+
+	public void setAmount(Double amount) {
+		this.amount = amount;
+	}
+
+	public Date getDelivery() {
+		return delivery;
+	}
+
+	public void setDelivery(Date delivery) {
+		this.delivery = delivery;
+	}
+
+	public Short getIsok() {
+		return isok;
+	}
+
+	public void setIsok(Short isok) {
+		this.isok = isok;
+	}
+}

+ 114 - 0
src/main/java/com/uas/platform/b2b/service/CustomerService.java

@@ -0,0 +1,114 @@
+package com.uas.platform.b2b.service;
+
+import java.util.List;
+
+import org.springframework.data.domain.Page;
+
+import com.uas.platform.b2b.model.Customer;
+import com.uas.platform.b2b.model.User;
+import com.uas.platform.core.model.PageInfo;
+
+public interface CustomerService {
+	
+	/**
+	 * 分页查找客户资料
+	 * 
+	 * @param enUU 企业uu
+	 * @param pageInfo
+	 * @return
+	 */
+	public Page<Customer> findAllByPageInfo(Long enUU, PageInfo pageInfo);
+	
+	/**
+	 * 判断申请的客户是否存在
+	 * 
+	 * @param enUU
+	 * @param custEnUUStr
+	 * @return 存在的客户
+	 */
+	public List<Customer> findAllByCustUU(Long enUU, String custEnUUStr);
+	
+	/**
+	 * 获取客户信息
+	 * 
+	 * @param custId
+	 * @return
+	 */
+	public Customer findCustomer(Long custId);
+
+	/**
+	 * 保存客户信息
+	 * 
+	 * @param user
+	 * @param customer
+	 * @return
+	 */
+	public Customer saveCustomer(User user, Customer customer);
+
+	/**
+	 * 保存客户信息
+	 * 
+	 * @param user
+	 * @param customers
+	 * @return
+	 */
+	public List<Customer> saveCustomers(User user, List<Customer> customers);
+
+	/**
+	 * 审核客户信息
+	 * 
+	 * @param user
+	 * @param customer
+	 * @return
+	 */
+	public Customer auditCustomer(User user, Customer customer);
+
+	/**
+	 * 审核客户信息
+	 * 
+	 * @param user
+	 * @param customers
+	 * @return
+	 */
+	public List<Customer> auditCustomers(User user, List<Customer> customers);
+	
+	/**
+	 * 反审核客户信息
+	 * 
+	 * @param user
+	 * @param customer
+	 * @return
+	 */
+	public Customer unAuditCustomer(User user, Customer customer);
+
+	/**
+	 * 反审核客户信息
+	 * 
+	 * @param user
+	 * @param customers
+	 * @return
+	 */
+	public List<Customer> unAuditCustomers(User user, List<Customer> customers);
+
+	/**
+	 * 删除客户信息
+	 * 
+	 * @param customer
+	 */
+	public void deleteCustomer(Customer customer);
+
+	/**
+	 * 批量删除客户信息
+	 * 
+	 * @param customers
+	 */
+	public void deleteCustomers(List<Customer> customers);
+	
+	/**
+	 * 批量删除客户信息
+	 * 
+	 * @param custIds 多个id用逗号隔开
+	 */
+	public void deleteCustomers(String custIds);
+	
+}

+ 12 - 0
src/main/java/com/uas/platform/b2b/service/SaleOrderService.java

@@ -0,0 +1,12 @@
+package com.uas.platform.b2b.service;
+
+import org.springframework.data.domain.Page;
+
+import com.uas.platform.b2b.model.SaleOrder;
+import com.uas.platform.core.model.PageInfo;
+
+public interface SaleOrderService {
+
+	public Page<SaleOrder> findAllByPageInfo(PageInfo pageInfo);
+
+}

+ 101 - 0
src/main/java/com/uas/platform/b2b/service/impl/CustomerServiceImpl.java

@@ -0,0 +1,101 @@
+package com.uas.platform.b2b.service.impl;
+
+import java.util.List;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import com.uas.platform.b2b.dao.CustomerDao;
+import com.uas.platform.b2b.model.Customer;
+import com.uas.platform.b2b.model.User;
+import com.uas.platform.b2b.service.CustomerService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.persistence.criteria.PredicateFactory;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+
+@Service
+public class CustomerServiceImpl implements CustomerService {
+
+	@Autowired
+	private CustomerDao customerDao;
+
+	public Page<Customer> findAllByPageInfo(final Long enUU, final PageInfo pageInfo) {
+		Page<Customer> customers = customerDao.findAll(new Specification<Customer>() {
+
+			public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				pageInfo.filter("myEnUU", enUU);
+				query.where(pageInfo.getPredicates(root, builder));
+				return null;
+			}
+		}, pageInfo);
+		return customers;
+	}
+
+	public List<Customer> findAllByCustUU(Long enUU, String custEnUUStr) {
+		PredicateFactory<Customer> factory = new PredicateFactory<Customer>();
+		factory.add(PredicateUtils.eq("myEnUU", enUU, true));
+		factory.add(PredicateUtils.in("customerEnterprise.uu", custEnUUStr.split(","), true));
+		return customerDao.findAll(factory);
+	}
+
+	public Customer findCustomer(Long custId) {
+		return customerDao.findOne(custId);
+	}
+
+	public Customer saveCustomer(User user, Customer customer) {
+		customer.setMyEnUU(user.getEnterprise().getUu());
+		customer.setMyUserUU(user.getUserUU());
+		return customerDao.saveAndLog(customer);
+	}
+
+	public List<Customer> saveCustomers(User user, List<Customer> customers) {
+		for (Customer customer : customers) {
+			customer.setMyUserUU(user.getUserUU());
+			customer.setMyEnUU(user.getEnterprise().getUu());
+		}
+		return customerDao.saveAndLog(customers);
+	}
+
+	public Customer auditCustomer(User user, Customer customer) {
+		customer = customerDao.auditAndLog(customer);
+		return customer;
+	}
+
+	public List<Customer> auditCustomers(User user, List<Customer> customers) {
+		customers = customerDao.auditAndLog(customers);
+		return customers;
+	}
+
+	public Customer unAuditCustomer(User user, Customer customer) {
+		customer = customerDao.unAuditAndLog(customer);
+		return customer;
+	}
+
+	public List<Customer> unAuditCustomers(User user, List<Customer> customers) {
+		customers = customerDao.unAuditAndLog(customers);
+		return customers;
+	}
+
+	public void deleteCustomer(Customer customer) {
+		customerDao.deleteAndLog(customer);
+	}
+
+	public void deleteCustomers(List<Customer> customers) {
+		customerDao.deleteAndLog(customers);
+	}
+
+	public void deleteCustomers(String custIds) {
+		String[] vendors = custIds.split(",");
+		for (String vend : vendors) {
+			customerDao.deleteAndLog(Long.valueOf(vend));
+		}
+	}
+
+}

+ 36 - 0
src/main/java/com/uas/platform/b2b/service/impl/SaleOrderServiceImpl.java

@@ -0,0 +1,36 @@
+package com.uas.platform.b2b.service.impl;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Path;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import com.uas.platform.b2b.dao.SaleOrderDao;
+import com.uas.platform.b2b.model.SaleOrder;
+import com.uas.platform.b2b.service.SaleOrderService;
+import com.uas.platform.core.model.PageInfo;
+
+@Service
+public class SaleOrderServiceImpl implements SaleOrderService{
+
+	@Autowired
+	private SaleOrderDao saleOrderDao;
+	
+	public Page<SaleOrder> findAllByPageInfo(PageInfo pageInfo) {
+		return saleOrderDao.findAll(new Specification<SaleOrder>() {
+
+			public Predicate toPredicate(Root<SaleOrder> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				Path<String> status = root.get("status");
+				query.where(builder.equal(status, "已审核"));
+				return null;
+			}
+		}, pageInfo);
+	}
+
+}

+ 1 - 4
src/main/webapp/resources/css/index.css

@@ -804,16 +804,13 @@ a {
 	line-height: 28px;
 }
 
-.condition {
-	border-bottom: 1px solid #e8e8e8;
-}
-
 .state-wrap {
 	position: relative;
 	height: 40px;
 	line-height: 40px;
 	padding: 0 20px;
 	margin-bottom: 22px;
+	border-bottom: 1px solid #e8e8e8;
 	font-size: 14px;
 }
 

+ 88 - 12
src/main/webapp/resources/js/index/app.js

@@ -1,7 +1,6 @@
-define([ 'toaster', 'charts', 'services', 'ui.router' ], function() {
+define([ 'toaster', 'charts', 'services', 'ui.router', 'ui.bootstrap' ], function() {
 	'use strict';
-	var app = angular.module('myApp', [ 'toaster', 'angularCharts', 'ui.router',
-			'common.services' ]);
+	var app = angular.module('myApp', [ 'toaster', 'angularCharts', 'ui.router', 'common.services', 'ui.bootstrap' ]);
 	app.init = function() {
 		angular.bootstrap(document, [ 'myApp' ]);
 	};
@@ -83,12 +82,12 @@ define([ 'toaster', 'charts', 'services', 'ui.router' ], function() {
 			}
 		});
 	});
-	app.controller('MyCtrl', function($scope, $rootScope){
+	app.controller('MyCtrl', function($scope, $rootScope) {
 		$rootScope.$on('$locationChangeSuccess', function(evt, newUrl) {
 			var routeState = newUrl.substr(newUrl.indexOf('#/') + 2);
-			if(routeState.indexOf('/') > -1)
+			if (routeState.indexOf('/') > -1)
 				routeState = routeState.substring(0, routeState.indexOf('/'));
-			if(routeState.indexOf('.') > -1)
+			if (routeState.indexOf('.') > -1)
 				routeState = routeState.substring(0, routeState.indexOf('.'));
 			$scope.routeState = routeState || 'home';
 		});
@@ -136,8 +135,7 @@ define([ 'toaster', 'charts', 'services', 'ui.router' ], function() {
 						display : true,
 						position : 'right'
 					},
-					colors : [ '#4D9934', '#33D6EA', '#98E1CC', '#8060E4',
-							'#9999CC' ],
+					colors : [ '#4D9934', '#33D6EA', '#98E1CC', '#8060E4', '#9999CC' ],
 					click : function(d) {
 
 					},
@@ -183,8 +181,7 @@ define([ 'toaster', 'charts', 'services', 'ui.router' ], function() {
 						display : true,
 						position : 'right'
 					},
-					colors : [ '#4D9934', '#33D6EA', '#98E1CC', '#8060E4',
-							'#9999CC' ],
+					colors : [ '#4D9934', '#33D6EA', '#98E1CC', '#8060E4', '#9999CC' ],
 					click : function(d) {
 
 					},
@@ -230,8 +227,7 @@ define([ 'toaster', 'charts', 'services', 'ui.router' ], function() {
 						display : true,
 						position : 'right'
 					},
-					colors : [ '#4D9934', '#33D6EA', '#98E1CC', '#8060E4',
-							'#9999CC' ],
+					colors : [ '#4D9934', '#33D6EA', '#98E1CC', '#8060E4', '#9999CC' ],
 					click : function(d) {
 
 					},
@@ -247,5 +243,85 @@ define([ 'toaster', 'charts', 'services', 'ui.router' ], function() {
 			}
 		};
 	});
+	app.controller('SaleOrderCtrl', function($scope, $filter, $http, ngTableParams){
+		var isNumber = function(n) {
+            return !isNaN(parseFloat(n)) && isFinite(n);
+        };
+		var parseParams = function(requestParams) {
+            // parse url params
+            for (var key in requestParams) {
+                if (key.indexOf('[') >= 0) {
+                    var params = key.split(/\[(.*)\]/), value = requestParams[key], lastKey = '';
+                    angular.forEach(params.reverse(), function(name) {
+                        if (name != '') {
+                            var v = value;
+                            value = {};
+                            value[lastKey = name] = isNumber(v) ? parseFloat(v) : v;
+                        }
+                    });
+                    requestParams[lastKey] = angular.extend(requestParams[lastKey] || {}, value[lastKey]);
+                    delete requestParams[key];
+                } else {
+                    requestParams[key] = isNumber(requestParams[key]) ? parseFloat(requestParams[key]) : requestParams[key];
+                }
+            }
+            return requestParams;
+		};
+		$scope.tableParams = new ngTableParams({
+			page : 1, // show first page
+			count : 10, // count per page
+			sorting: {
+                code: 'asc' 
+            }
+		}, {
+			total : 0, 
+			getData : function($defer, params) {
+				$http.post('sale/orders', parseParams(params.url())).success(function(page){
+					if(page) {
+						params.total(page.totalElements);
+						$defer.resolve(page.content);
+					}
+				}).error(function(){
+					
+				});
+			}
+		});
+		$scope.checkboxes = {
+			'checked' : false,
+			items : {},
+			length : 0
+		};
+		
+		// watch for check all checkbox
+		$scope.$watch('checkboxes.checked', function(value) {
+			var i = 0;
+			angular.forEach($scope.tableParams.data, function(item) {
+				if (angular.isDefined(item.id)) {
+					$scope.checkboxes.items[item.id] = value;
+					i++;
+				}
+			});
+			$scope.checkboxes.length = i;
+		});
+
+		// watch for data checkboxes
+		$scope.$watch('checkboxes.items', function(values) {
+			if (!$scope.tableParams.data) {
+				return;
+			}
+			var checked = 0, unchecked = 0, total = $scope.tableParams.total();
+			angular.forEach($scope.tableParams.data, function(item) {
+				checked += ($scope.checkboxes.items[item.id]) || 0;
+				unchecked += (!$scope.checkboxes.items[item.id]) || 0;
+			});
+			if (total > 0 && (unchecked == 0 || checked == 0)) {
+				$scope.checkboxes.checked = (checked == total);
+			}
+			$scope.checkboxes.length = checked;
+			// grayed checkbox
+			angular.element(document.getElementById("select_all")).prop("indeterminate",
+					(checked != 0 && unchecked != 0));
+		}, true);
+	});
 	return app;
 });

+ 4 - 2
src/main/webapp/resources/js/index/main.js

@@ -8,7 +8,8 @@ require.config({
 		'd3' : 'lib/angular/d3.min',
 		'charts' : 'lib/angular/angular-charts.min',
 		'services' : 'js/common/services',
-		'ui.router' : 'lib/angular/angular-ui-router.min'
+		'ui.router' : 'lib/angular/angular-ui-router.min',
+		'ui.bootstrap' : 'lib/angular/ui-bootstrap-tpls'
 	},
 	shim : {
 		'angular' : {
@@ -18,7 +19,8 @@ require.config({
 		'toaster' : ['angular', 'ngAnimate'],
 		'charts' : ['angular', 'd3'],
 		'services' : ['angular'],
-		'ui.router' : ['angular']
+		'ui.router' : ['angular'],
+		'ui.bootstrap' : [ 'angular' ]
 	}
 });
 require([ 'app/app' ], function(app) {

+ 27 - 9
src/main/webapp/resources/tpl/index/sale/order.html

@@ -1,11 +1,29 @@
-<div class="condition block">
-	<div class="state-wrap">
-		<ul class="list-unstyled list-inline">
-			<li class=" first"><a href="#"><span>所有订单</span></a></li>
-			<li class="active"><a href="#"><span>待回复</span><em
-					class="tm-h">6</em></a></li>
-			<li><a href="#"><span>待发货</span><em class="tm-h">0</em></a></li>
-			<li><a href="#"><span>退货中</span><em class="tm-h">0</em></a></li>
-		</ul>
+<div ng-controller="SaleOrderCtrl">
+	<div class="condition block">
+		<div class="state-wrap">
+			<ul class="list-unstyled list-inline">
+				<li class=" first"><a href="#"><span>所有订单</span></a></li>
+				<li class="active"><a href="#"><span>待回复</span><em
+						class="tm-h">6</em></a></li>
+				<li><a href="#"><span>待发货</span><em class="tm-h">0</em></a></li>
+				<li><a href="#"><span>退货中</span><em class="tm-h">0</em></a></li>
+			</ul>
+		</div>
 	</div>
+	<table ng-table="tableParams"
+		class="table table-bordered table-striped">
+		<tr ng-repeat="order in $data">
+			<td width="20" style="text-align: center"
+				header="'ng-table/headers/checkbox.html'"><input
+				type="checkbox" ng-model="checkboxes.items[order.id]" /></td>
+			<td data-title="'编号'" sortable="'code'">{{order.code}}</td>
+			<td data-title="'日期'" width="120">{{order.date | date:
+				"yyyy-MM-dd"}}</td>
+			<td data-title="'类型'" width="80">{{order.type}}</td>
+			<td data-title="'客户名称'" width="230">{{order.customer.name}}</td>
+			<td data-title="'交货日期'" width="120" sortable="'delivery'">{{order.delivery
+				| date: "yyyy-MM-dd"}}</td>
+			<td data-title="'状态'" width="50">{{order.status}}</td>
+		</tr>
+	</table>
 </div>