Browse Source

新增采购变更单功能开发

hejq 7 years ago
parent
commit
185801936a

+ 52 - 0
src/main/java/com/uas/platform/b2b/controller/PurcOrderChangeController.java

@@ -0,0 +1,52 @@
+package com.uas.platform.b2b.controller;
+
+import com.uas.platform.b2b.model.PurchaseOrderAll;
+import com.uas.platform.b2b.model.PurchaseOrderChange;
+import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.b2b.service.PurcOrderChangeService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.search.b2b.model.SPage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+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.RestController;
+
+/**
+ * 采购变更单
+ *
+ * Created by hejq on 2018-06-22.
+ */
+@RestController
+@RequestMapping("/purc/change")
+public class PurcOrderChangeController {
+
+    @Autowired
+    private PurcOrderChangeService orderChangeService;
+
+    /**
+     * 查询可以做采购变更单的采购单
+     *
+     * @param pageParams
+     * @param searchFilter
+     * @return
+     */
+    @RequestMapping(value = "/enable/orderList", method = RequestMethod.GET)
+    public SPage<PurchaseOrderAll> findByPageInfo(PageParams pageParams, SearchFilter searchFilter) {
+        PageInfo pageInfo = new PageInfo(pageParams);
+        orderChangeService.findEnableToChange(pageInfo, searchFilter);
+        return null;
+    }
+
+    /**
+     * 新增采购变更单
+     *
+     * @param change 采购变更单
+     * @return
+     */
+    public ModelMap saveChange(@RequestBody PurchaseOrderChange change) {
+        return orderChangeService.save(change);
+    }
+}

+ 15 - 0
src/main/java/com/uas/platform/b2b/dao/PurchaseOrderInfoDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PurchaseOrderInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 平台里面,以供应商的角度来查看采购订单
+ *
+ * Created by hejq on 2018-06-25.
+ */
+@Repository
+public interface PurchaseOrderInfoDao extends JpaRepository<PurchaseOrderInfo, Long>, JpaSpecificationExecutor<PurchaseOrderInfo> {
+}

+ 8 - 19
src/main/java/com/uas/platform/b2b/model/PurchaseOrderChange.java

@@ -1,28 +1,14 @@
 package com.uas.platform.b2b.model;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.uas.platform.core.model.Constant;
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import javax.persistence.*;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Set;
 
-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.JoinColumn;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.OrderBy;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
-import org.codehaus.jackson.annotate.JsonIgnore;
-
-import com.alibaba.fastjson.annotation.JSONField;
-import com.uas.platform.core.model.Constant;
-
 /**
  * 平台里面,以供应商的角度来查看采购订单变更单 <br>
  * 级联变更明细
@@ -195,6 +181,9 @@ public class PurchaseOrderChange implements Serializable {
 	@Column(name = "pc_oldrate")
 	private Float oldRate;
 
+	/**
+	 * 对应采购单ID
+	 */
 	@Column(name = "pc_puid")
 	private Long orderId;
 

+ 33 - 0
src/main/java/com/uas/platform/b2b/service/PurcOrderChangeService.java

@@ -0,0 +1,33 @@
+package com.uas.platform.b2b.service;
+
+import com.uas.platform.b2b.model.PurchaseOrderAll;
+import com.uas.platform.b2b.model.PurchaseOrderChange;
+import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.search.b2b.model.SPage;
+import org.springframework.ui.ModelMap;
+
+/**
+ * 采购变更单
+ *
+ * Created by hejq on 2018-06-22.
+ */
+public interface PurcOrderChangeService {
+
+    /**
+     * 查询符合条件的能变更的采购单
+     *
+     * @param pageInfo 分页信息
+     * @param searchFilter 过滤条件
+     * @return
+     */
+    SPage<PurchaseOrderAll> findEnableToChange(PageInfo pageInfo, SearchFilter searchFilter);
+
+    /**
+     * 新增采购变更单
+     *
+     * @param change 采购变更单信息
+     * @return
+     */
+    ModelMap save(PurchaseOrderChange change);
+}

+ 0 - 54
src/main/java/com/uas/platform/b2b/service/PurchaseOrderService.java

@@ -83,14 +83,6 @@ public interface PurchaseOrderService {
 	 */
 	public Page<PurchaseOrderWaiting> findWaitingByPageInfo(PageInfo pageInfo, SearchFilter filter);
 
-	/**
-	 * 分页查找订单
-	 *
-	 * @param pageInfo
-	 * @return
-	 */
-	public Page<PurchaseOrder> findAllOrdersByPageInfo(PageInfo pageInfo, SearchFilter filter);
-
 	/**
 	 * 分页查找订单,包括明细
 	 * 
@@ -153,22 +145,6 @@ public interface PurchaseOrderService {
 	 */
 	public SPage<PurchaseOrderWaiting> findWaitingOrders(PageInfo pageInfo, SearchFilter filter);
 
-	/**
-	 * 分页查找待回复订单,包括明细
-	 * 
-	 * @param pageInfo
-	 * @return
-	 */
-	public Page<PurchaseOrderTodo> findTodoOrdersByPageInfo(PageInfo pageInfo, SearchFilter filter);
-
-	/**
-	 * 分页查找已回复订单,包括明细
-	 * 
-	 * @param pageInfo
-	 * @return
-	 */
-	public Page<PurchaseOrderDone> findDoneOrdersByPageInfo(PageInfo pageInfo, SearchFilter filter);
-
 	/**
 	 * 分页查找已结案订单明细
 	 * 
@@ -177,15 +153,6 @@ public interface PurchaseOrderService {
 	 */
 	public Page<PurchaseOrderEnd> findEndOrdersByPageInfo(PageInfo pageInfo, SearchFilter filter);
 
-	/**
-	 * 分页查找已结案订单明细
-	 * 
-	 * @param pageInfo
-	 * @return
-	 */
-	public Page<PurchaseOrderWaiting> findWaitingOrdersByPageInfo(PageInfo pageInfo, SearchFilter filter);
-
-
 	/**
 	 * 用订单号查找订单
 	 * 
@@ -306,13 +273,6 @@ public interface PurchaseOrderService {
 	 */
 	public int getOnhandCount();
 
-	/**
-	 * 作为客户,获取供应商待回复的采购单条数
-	 * 
-	 * @return
-	 */
-	public int getPurcOnhandCount();
-
 	/**
 	 * 设置订单的查看状态
 	 * 
@@ -352,13 +312,6 @@ public interface PurchaseOrderService {
 	 */
 	public Long getAllCount();
 
-	/**
-	 * 返回企业下的采购订单(UAS用户在平台查询)
-	 * 
-	 * @return
-	 */
-	public long getPurcByenUUAdnStatus(Long uu);
-
 	/**
 	 * 返回未上传的打印记录
 	 *
@@ -407,11 +360,4 @@ public interface PurchaseOrderService {
      */
     public void replyByBatch(String idString, String username, String userip, Long enuu, Long useruu, Long date);
 
-	/**
-	 * 根据企业UU批量处理采购单明细中的物料转入供应商报价人个人物料
-	 *
-	 * @param enUU 采购方企业UU
-	 */
-    void coverPurchaseOrderItemProdToUser(Long enUU) throws Exception;
-
 }

+ 69 - 0
src/main/java/com/uas/platform/b2b/service/impl/PurcOrderChangeServiceImpl.java

@@ -0,0 +1,69 @@
+package com.uas.platform.b2b.service.impl;
+
+import com.uas.platform.b2b.dao.PurcOrderInfoItemDao;
+import com.uas.platform.b2b.dao.PurchaseOrderChangeDao;
+import com.uas.platform.b2b.dao.PurchaseOrderChangeItemDao;
+import com.uas.platform.b2b.dao.PurchaseOrderInfoDao;
+import com.uas.platform.b2b.model.*;
+import com.uas.platform.b2b.service.PurcOrderChangeService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.Status;
+import com.uas.search.b2b.model.SPage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+
+import java.util.List;
+
+/**
+ * 采购变更单
+ *
+ * Created by hejq on 2018-06-22.
+ */
+@Service
+public class PurcOrderChangeServiceImpl implements PurcOrderChangeService {
+
+    @Autowired
+    private PurchaseOrderChangeDao changeDao;
+
+    @Autowired
+    private PurchaseOrderChangeItemDao changeItemDao;
+
+    @Autowired
+    private PurchaseOrderInfoDao orderInfoDao;
+
+    @Autowired
+    private PurcOrderInfoItemDao orderInfoItemDao;
+
+    /**
+     * 查询符合条件的能变更的采购单
+     *
+     * @param pageInfo  分页信息
+     * @param searchFilter 过滤条件
+     * @return
+     */
+    @Override
+    public SPage<PurchaseOrderAll> findEnableToChange(PageInfo pageInfo, SearchFilter searchFilter) {
+        return null;
+    }
+
+    /**
+     * 新增采购变更单
+     *
+     * @param change 采购变更单信息
+     * @return
+     */
+    @Override
+    public ModelMap save(PurchaseOrderChange change) {
+        change.setBackStatus((short) Status.NOT_UPLOAD.value());
+        change.setBackStatus((short) Status.NOT_UPLOAD.value());
+        change.setReplySendStatus((short) Status.NOT_UPLOAD.value());
+        List<PurchaseOrderChangeItem> itemList = changeItemDao.save(change.getOrderChangeItems());
+        if (change.getUnNeedReply() == 1) {// 不需要供应商确认,更新原单据
+            PurchaseOrderInfo orderInfo = orderInfoDao.findOne(change.getOrderId());
+            //TODO 采购单主表信息变更
+            // TODO 采购单明细变更
+        }
+        return null;
+    }
+}

+ 1 - 178
src/main/java/com/uas/platform/b2b/service/impl/PurchaseOrderServiceImpl.java

@@ -2,14 +2,12 @@ package com.uas.platform.b2b.service.impl;
 
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.SplitArray;
-import com.uas.platform.b2b.core.util.StringUtil;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.event.PurchaseOrderEndReleaseEvent;
 import com.uas.platform.b2b.event.PurchaseOrderReplyReleaseEvent;
 import com.uas.platform.b2b.event.PurchaseOrderSaveReleaseEvent;
 import com.uas.platform.b2b.model.*;
-import com.uas.platform.b2b.ps.ProductUtils;
 import com.uas.platform.b2b.ps.service.PersonalProductService;
 import com.uas.platform.b2b.service.PurchaseOrderService;
 import com.uas.platform.b2b.support.SPageUtils;
@@ -95,16 +93,9 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 	@Autowired
 	private DistributeDao distributeDao;
 
-	@Autowired
-    private CommonDao commonDao;
-
 	@Autowired
     private PersonalProductService personalProductService;
 
-	@Autowired
-	private ProductTempDao productTempDao;
-
-
 	@Override
 	public void save(List<PurcOrderInfoItem> orderItems) {
 	 	orderItems = purcOrderInfoItemDao.save(orderItems);
@@ -488,12 +479,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 				(short) Status.NOT_REPLY.value());
 	}
 
-	@Override
-	public int getPurcOnhandCount() {
-		return purchaseOrderDao.getPurcCountByEnUUAndStatus(SystemSession.getUser().getEnterprise().getUu(),
-				(short) Status.NOT_REPLY.value());
-	}
-
 	@Override
 	public Page<PurchaseOrderTodo> findTodoByPageInfo(final PageInfo pageInfo, SearchFilter filter) {
 		if (filter != null) {
@@ -710,11 +695,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 		return purchaseOrderAllItemDao.findOrderItemCountByEnUU(uu);
 	}
 
-	@Override
-	public long getPurcByenUUAdnStatus(Long uu) {
-		return purchaseOrderDao.getPurcCounByEnUU(uu);
-	}
-
 	@Override
 	public List<PrintLog> findPrintNotUploadReply() {
 		return printLogDao.findByEnUUAndStatusAndTable(SystemSession.getUser().getEnterprise().getUu(), Constant.NO,"purc$orders");
@@ -733,21 +713,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 		}
 	}
 
-	@Override
-	public Page<PurchaseOrder> findAllOrdersByPageInfo(final PageInfo pageInfo, final SearchFilter filter) {
-		if (filter != null) {
-			if (!CollectionUtils.isEmpty(filter.getDistribute()))
-				pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
-		}
-		return purchaseOrderDao.findAll(new Specification<PurchaseOrder>() {
-			@Override
-			public Predicate toPredicate(Root<PurchaseOrder> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
-				query.where(pageInfo.getPredicates(root, query, builder));
-				return null;
-			}
-		}, pageInfo);
-	}
-
 	@Override
 	public Page<PurchaseOrderAll> findAllOrdersDetailByPageInfo(final PageInfo pageInfo, final SearchFilter filter) {
 		if (filter != null) {
@@ -784,60 +749,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 		return pageOrders;
 	}
 
-	@Override
-	public Page<PurchaseOrderTodo> findTodoOrdersByPageInfo(final PageInfo pageInfo, final SearchFilter filter) {
-		if (filter != null) {
-			if (filter.getFromDate() != null) {
-				pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
-			}
-			if (filter.getEndDate() != null) {
-				pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
-			}
-		}
-		Page<PurchaseOrderTodo> pageOrders = purchaseOrderTodoDao.findAll(new Specification<PurchaseOrderTodo>() {
-			@Override
-			public Predicate toPredicate(Root<PurchaseOrderTodo> root, CriteriaQuery<?> query,
-					CriteriaBuilder builder) {
-				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
-			}
-		}, pageInfo);
-		List<PurchaseOrderTodo> orders = pageOrders.getContent();
-		for (PurchaseOrderTodo order : orders) {
-			Enterprise enter = enterpriseDao.findEnterpriseByUu(order.getVendUU());
-			if (enter != null) {
-				order.setEnName(enter.getEnName());
-			}
-		}
-		return pageOrders;
-	}
-
-	@Override
-	public Page<PurchaseOrderDone> findDoneOrdersByPageInfo(final PageInfo pageInfo, final SearchFilter filter) {
-		if (filter != null) {
-			if (filter.getFromDate() != null) {
-				pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
-			}
-			if (filter.getEndDate() != null) {
-				pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
-			}
-		}
-		Page<PurchaseOrderDone> pageOrders = purchaseOrderDoneDao.findAll(new Specification<PurchaseOrderDone>() {
-			@Override
-			public Predicate toPredicate(Root<PurchaseOrderDone> root, CriteriaQuery<?> query,
-					CriteriaBuilder builder) {
-				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
-			}
-		}, pageInfo);
-		List<PurchaseOrderDone> orders = pageOrders.getContent();
-		for (PurchaseOrderDone order : orders) {
-			Enterprise enter = enterpriseDao.findEnterpriseByUu(order.getVendUU());
-			if (enter != null) {
-				order.setEnName(enter.getEnName());
-			}
-		}
-		return pageOrders;
-	}
-
 	@Override
 	public Page<PurchaseOrderEnd> findEndOrdersByPageInfo(final PageInfo pageInfo, final SearchFilter filter) {
 		if (filter != null) {
@@ -864,37 +775,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 		return pageOrders;
 	}
 
-	@Override
-	public Page<PurchaseOrderWaiting> findWaitingOrdersByPageInfo(final PageInfo pageInfo, final SearchFilter filter) {
-		if (filter != null) {
-			if (filter.getFromDate() != null) {
-				pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
-			}
-			if (filter.getEndDate() != null) {
-				pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
-			}
-			if (!CollectionUtils.isEmpty(filter.getDistribute())) {
-				pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
-			}
-		}
-		Page<PurchaseOrderWaiting> pageOrders = purchaseOrderWaitingDao
-				.findAll(new Specification<PurchaseOrderWaiting>() {
-					@Override
-					public Predicate toPredicate(Root<PurchaseOrderWaiting> root, CriteriaQuery<?> query,
-							CriteriaBuilder builder) {
-						return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
-					}
-				}, pageInfo);
-		List<PurchaseOrderWaiting> orders = pageOrders.getContent();
-		for (PurchaseOrderWaiting order : orders) {
-			Enterprise enter = enterpriseDao.findEnterpriseByUu(order.getVendUU());
-			if (enter != null) {
-				order.setEnName(enter.getEnName());
-			}
-		}
-		return pageOrders;
-	}
-
 	@Override
 	public SPage<PurchaseOrderAll> findOrdersByPageInfo(PageInfo pageInfo, SearchFilter filter) {
 		return SPageUtils.covertSPage(findAllOrdersDetailByPageInfo(pageInfo, filter));
@@ -975,7 +855,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
         purchaseOrderItemDao.replyByBatch(idString, username, userip, enuu, useruu, !StringUtils.isEmpty(date) ? date : 0);
     }
 
-    @Override
+	@Override
 	@Transactional
 	public Integer setReadByState(String category) {
 		List<Long> unreadIds = getUnreadIds(category);
@@ -1003,63 +883,6 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 		return deleteCount;
 	}
 
-	/**
-	 * 根据企业UU批量处理采购单明细中的物料转入供应商报价人个人物料
-	 *
-	 * @param enUU 采购方企业UU
-	 */
-	@Override
-	public void coverPurchaseOrderItemProdToUser(Long enUU) throws Exception {
-		String importId = StringUtil.getRandomNumber(8);
-		int size = 1000;
-		int page = 1;
-		String countSql = "select count(1) from (select pd_prid,pu_venduu,pu_venduseruu,count(1) from purc$orderitems " +
-				"left join purc$orders on pd_puid = pu_id where pu_venduseruu is not null and pu_enuu = "  + enUU + " group by pd_prid,pu_venduseruu,pu_venduu) a";
-		Integer count = commonDao.queryForObject(countSql, Integer.class);
-		for (; page <= Math.ceil((double)count / (double)size); page++ ) {
-			String sql = "select " + importId + " as pr_import_id, pr_title,pr_code,pr_spec,pr_unit,pr_minpack,pr_minorder,pr_leadtime,pr_ltinstock,pr_brand,pr_cmpcode,'B2B' as pr_sourceapp,pd_prid as pr_sourceid,1 as pr_issale,0 as pr_ispurchase," +
-					"pr_isshow,pr_ispubsale,pr_standard,pr_create_time,pu_venduu as pr_enuu,pu_venduseruu as pr_useruu from (" +
-					" select pd_prid,pu_venduu,pu_venduseruu,count(1) as nums from purc$orderitems left join purc$orders on pd_puid = pu_id " +
-					" where pu_venduseruu is not null and pu_enuu = " + enUU + " group by pd_prid,pu_venduseruu,pu_venduu order by count(1) desc " +
-					" ) t left join v$products P on pd_prid = pr_id where P.pr_title is not null and P.pr_code is not null limit "+ size * (page - 1)+ ", "+ (page * size-size * (page - 1)) ;
-			List<ProductTemp> productTemps = commonDao.query(sql, ProductTemp.class);
-			// 本地校验
-			checkTempProducts(productTemps);
-			// 保存到公共库
-			saveToDataCenter(productTemps);
-		}
-	}
-
-	/**
-	 * 校验导入的物料
-	 *
-	 * @param temps
-	 */
-	private void checkTempProducts(List<ProductTemp> temps) {
-		if (!CollectionUtils.isEmpty(temps)) {
-			String importId = temps.get(0).getPr_import_id();
-			// 放入数据库
-			productTempDao.save(temps);
-			// 匹配已存在物料
-			productTempDao.matchExists(importId);
-			// 已禁用物料自动解禁
-			productTempDao.toggleDisabled(importId);
-		}
-	}
-
-	/**
-	 * 保存到公共库
-	 */
-	private void saveToDataCenter(List<ProductTemp> temps) throws Exception {
-		if (!CollectionUtils.isEmpty(temps)) {
-			String importId = temps.get(0).getPr_import_id();
-			// 已匹配+未匹配到的物料
-			List<Product> products = productTempDao.getProducts(importId);
-			// 更新物料并插入个人物料
-			ProductUtils.paginationUpdateAndAddToProductUser(products);
-		}
-	}
-
     /**
      * 获取明细最后一次回复数量
      *

+ 563 - 0
src/main/webapp/resources/tpl/index/purc/change_new.html

@@ -0,0 +1,563 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8"/>
+    <title>采购变更单</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
+    <meta name="Keywords" content=""/>
+    <meta name="Description" content=""/>
+    <link rel="stylesheet" href="static/css/deputyOrder/base.css"/>
+    <link rel="stylesheet" href="static/css/deputyOrder/order.css"/>
+</head>
+<body>
+<style>
+/* 日期选择器 */
+    .date-picker {
+        padding-top: 10px;
+    }
+    .date-picker input {
+        border-radius: 0;
+        border: 1px solid #5078cb;
+        border-right: none;
+        font-size: 12px;
+    }
+    .date-picker span .btn-open {
+        color: #fff;
+        background-color: #5078cb;
+        border-radius: 0;
+        border: 1px solid #5078cb;
+        border-left: none;
+    }
+
+    /* 修改本页内btn的样式 及datepicker中的btn-success的样式 */
+    .date-picker .btn {
+        border-radius: 0;
+    }
+
+   .date-picker .btn-success {
+        background-color: #3f84f6;
+    }
+    .date-picker ul {
+        border-radius: 0;
+    }
+   .date-picker ul div:focus {
+        outline: none;
+        border-radius: 0;
+        border: none;
+    }
+.input-group-addon {
+	background-color: inherit;
+  	border: 1px solid #e1e1e1;
+  	color: #888 !important;
+}
+.purchase_form01 ul li .dropdown-menu {
+	width: 257px;
+	height: 300px;
+}
+.purchase_form01 ul li .dropdown-menu span{
+	width: 14px;
+	height: 16px;
+	line-height: 20px;
+}
+.purchase_form01 ul li.ng-scope{
+	margin-top: 210px
+}
+.purchase_form01 ul li.ng-scope span{
+	width: 120px;
+	height: 50px;
+}
+.purchase_form01 ul li .input-group .input-group-btn .btn-sm{
+	width: 37px;
+    height: 34px;
+    z-index: 3;
+    position: absolute;
+    background: #bfbfbf;
+    border: 1px solid #bfbfbf;
+}
+.purchase_form01 ul li .input-group .input-group-btn .btn-sm:focus{
+    background: #5078cb;
+}
+.purchase_form01 ul li .input-group .form-control {
+    width:146px;
+    background: #fff;
+    border: #bfbfbf 1px solid;
+	}
+.purchase_form01 ul li .input-group .form-control:focus{
+    border: #5078cb 1px solid;
+}
+.purchase_form01 ul li .dropdown-menu li{
+  line-height: 30px;
+}
+.purchase_form01 ul li .dropdown-menu button{
+	position: relative;
+	widhth: 46px;
+	height: 30px;
+    border-color: #fff;
+}
+.purchase_form01 ul li .dropdown-menu div{
+	width: 255px;
+	height: 220px;
+}
+
+.purchase_form01 ul li .dropdown-menu span i{
+	color: white;
+}
+
+.purchase_xq dd input{
+ 	border: none;
+	border-bottom: 1px solid #333;
+	height: 35px;
+	width: 80px;
+	font-size: 14px;
+}
+
+.purchase_xq dd input:focus {
+	border-bottom: 1px solid blue;
+}
+
+.purchase .input-group .form-control{
+	border-radius: 0px;
+	border: 1px solid #5078cb;
+}
+
+.purchase .input-group .input-group-btn i{
+	color: #fff;
+}
+
+.purchase .input-group .input-group-btn {
+	width: 37px;
+	height: 34px;
+	position: absolute;
+	right: 74px;
+}
+.purchase_xq dl span.wid01{
+    width: 4% !important;
+}
+.purchase_xq dl span.wid02{
+    width: 13% !important;
+}
+.purchase_xq dl span{
+    width: 9.2% !important;
+}
+.purchase_xq dd input{
+    width: 92%;
+}
+.purchase_form01 b {
+	color: red;
+}
+.com_title01 span{
+    margin-left: 37px;
+}
+</style>
+<div class="warp">
+    <div class=" purchase">
+        <form class="width100" name="order" autocomplete="off">
+            <div class="com_head"><span>采购变更单</span></div>
+            <div class="purchase_form">
+                <!--基本信息-->
+                <div class="com_title01"><span>基本信息</span></div>
+                <div class="purchase_form01 clearfix">
+                    <ul>
+                        <li>
+                            <div class="fl">
+                                <em>流水号:</em>
+                                <span ng-bind="deOrder.code"></span>
+                            </div>
+                            <div class="fr">
+                                <em>制单日期:</em>
+                                <span class="has_time" ng-bind="deOrder.entrydate| date: 'yyyy-MM-dd'"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em>状态:</em>
+                                <span ng-bind="deOrder.status"></span>
+                            </div>
+                            <div class="fr">
+                                <em>业务状态:</em>
+                                <span ng-bind="deOrder.prostatus"></span>
+                            </div>
+                        </li>
+                        <li>
+                         	<div class="fl">
+                                <em><b>*</b>主协议签订日期:</em>
+                                 <div class="input-group">
+									<input ng-model="deOrder.madealdate" type="text" class="form-control" 
+										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$madealdate"
+										min-date="getMinDate()" ng-required="true"
+										current-text="今天" clear-text="清除" close-text="关闭"
+										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+										ng-focus="openDatePicker($event, deOrder.madealdate.$dateOpen)" readonly>
+									<span class="input-group-btn">
+										<button type="button" class="btn btn-default btn-sm"
+											ng-click="openDatePicker($event, deOrder, '$madealdate')">
+											<i class="fa fa-calendar fa-lg"></i>
+										</button>
+									</span>
+                                </div>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>主协议编号:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.madealcode" ng-required="true"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em><b>*</b>终端供应商名称:</em>
+                                <span><!-- <input type="text" class="input01" ng-model="deOrder.tervendor"> -->
+                                	 <input  ng-model="deOrder.tervendor" list="hisvendors" class="select" style="width: 200px" ng-change="getHisKeyword(deOrder.tervendor)">
+	                                    <datalist id="hisvendors">
+	                                    	 <option ng-repeat="vendor in hisvendors" value="{{vendor.vendorname}}">{{vendor.vendorname}}</option>
+	                                    </datalist>
+                                </span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>电话:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.vendtel" ng-required="true"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em><b>*</b>联系人:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.venduser" ng-required="true"></span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>供应商发货时间:</em>
+                                 <div class="input-group">
+									<input ng-model="deOrder.shipdate" type="text" class="form-control" 
+										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$shipdate"
+										min-date="getMinDate()" ng-required="true"
+										current-text="今天" clear-text="清除" close-text="关闭"
+										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
+									<span class="input-group-btn">
+										<button type="button" class="btn btn-default btn-sm"
+											ng-click="openDatePicker($event, deOrder, '$shipdate')">
+											<i class="fa fa-calendar fa-lg"></i>
+										</button>
+									</span>
+                                </div>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em><b>*</b>货物包装要求:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.goodspacking" ng-required="true"></span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>供应商交货方式:</em>
+                                <span>
+                                   <input type="text" class="input01" ng-model="deOrder.deliverymethod" ng-required="true">
+                                </span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em><b>*</b>我方提货方式:</em>
+                                <span>
+                                    <select name="" class="select" ng-model="deOrder.pickupmethod" ng-init="deOrder.pickupmethod = '自提'">
+                                        <option value="自提">自提</option>
+                                        <option value="委托第三方提货">委托第三方提货</option>
+                                        <option value="贵公司送货">贵公司送货</option>
+                                        <option value="其他">其他</option>
+                                    </select>
+                                </span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>我方付款方式:</em>
+                                <span>
+                                    <input  ng-model="deOrder.paymentmethod" list="paymentmethod" class="select" style="width: 200px">
+	                                    <datalist id="paymentmethod">
+	                                    	 <option ng-repeat="me in methods | orderBy:'-weightid'" value="{{me.value}}">{{me.value}}</option>
+	                                    </datalist>
+                                </span>
+                            </div>
+                        </li>
+                        <li>
+                         	<div class="fl">
+                                <em><b>*</b>我方提货时间:</em>
+                               <span><input type="text" class="input01" ng-model="deOrder.pickupdate" ng-required="true"></span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>交易币别:</em>
+                               <span> 
+	                               	<select name="" class="select" ng-model="deOrder.currency" ng-init="deOrder.currency = 'USD'">
+	                                    <option value="USD">USD</option>
+	                                    <option value="RMB">RMB</option>
+	                                    <option value="HKD">HKD</option>
+	                                </select>
+                                </span>
+                            </div>
+                        </li>
+                         <li>
+                         	<div class="fl">
+                                <em><b>*</b>代采企业:</em>
+                               <span>
+                               		<select name="" class="select" ng-model="deOrder.deputyname" style="width: 200px" ng-change="change(deOrder.deputyname)"
+                               			ng-options="deputyEn.deputyenname as deputyEn.deputyenname for deputyEn in deputyEnterprises">
+                               		<option value="">请选择代采企业</option>
+                               		</select>
+                               </span>
+                            </div>
+                        </li>
+                    </ul>
+                </div>
+                <div class="com_title01"><span>下单明细(注:金额单位为{{deOrder.currency}})</span><a ng-click="uplodaByBatch()">批量导入</a>
+                    <span style="margin-left: 345px;">费率:<input ng-model="deOrder.rate" style="width: 80px; height: 30px; font-size: 14px; text-align: center;"> %</span>
+                    <a ng-click="checkPrice(deOrder.rate)">更新订单单价</a>
+                </div>
+                <div class="purchase_xq clearfix">
+                    <dl>
+                        <dt>
+                            <span class="wid01">序号</span>
+                            <span class="wid02">产品名称</span>
+                            <span>型号</span>
+                            <span>产品规格</span>
+                            <span>品牌</span>
+                            <span>数量</span>
+                            <span>单价</span>
+                            <span>订单单价</span>
+                            <span>采购总额</span>
+                            <span>备注</span>
+                            <span>操作</span>
+                        </dt>
+                        <dd ng-repeat="item in deOrder.deputyOrderItems">
+                            <span class="wid01">{{$index+1}}</span>
+                            <span class="wid02"><input type="text" class="text-center" ng-model="item.prodname" ng-required="true"></span>
+                            <span><input type="text" class="text-center" ng-model="item.prodcode" ng-required="true"></span>
+                            <span><input type="text" class="text-center" ng-model="item.prodspec" ng-required="true"></span>
+                            <span><input type="text" class="text-center" ng-model="item.prodbrand" ng-required="true"></span>
+                            <span><input type="text" class="text-center" ng-model="item.amount" ng-required="true" ng-change="totalPrice()"></span>
+                            <span><input type="text" class="text-center" ng-model="item.unitprice" ng-required="true" ng-change="totalPrice()"></span>
+                            <span><input type="text" class="text-center" ng-model="item.purcprice" ng-required="true" ng-change="totalPrice()"></span>
+                            <span>{{item.unitprice * item.amount | number: 2}}</span>
+                            <span><input type="text" class="text-center" ng-model="item.remark"></span>
+                            <span><a ng-click="add($index)" style="color: #1f4fb2">添加</a><a ng-click="del($index)" style="color: #d32526"> 删除</a></span>
+                        </dd>
+                    </dl>
+                </div>
+                <!--采购订单-->
+                <div class="com_title01"><span>采购订单</span></div>
+                <div class="purchase_form01 clearfix">
+                    <ul>
+                        <li>
+                            <div class="fl">
+                                <em>总价款({{deOrder.currency}}):</em>
+                                <span >{{deOrder.totalamount| number:6}}</span>
+                            </div>
+                            <div class="fr">
+                            	 <em>订单总价款({{deOrder.currency}}):</em>
+                                <span >{{deOrder.orderamount| number:6 }}</span>
+                            </div>
+                        </li>
+                        <li>
+                        	<div class="fl">
+                            	 <em><b>*</b>订单编号:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.salecode" ng-required="true" ng-change="checkOrder(deOrder.salecode, deOrder.deputyuu)"></span>
+                            </div>
+                        	<div class="fr">
+                                <em><b>*</b>我方付款提货时间:</em>
+                                 <div class="input-group">
+									<input ng-model="deOrder.paydeldate" type="text" class="form-control" 
+										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$paydeldate"
+										min-date="getMinDate()" ng-required="true"
+										current-text="今天" clear-text="清除" close-text="关闭"
+										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
+									<span class="input-group-btn">
+										<button type="button" class="btn btn-default btn-sm"
+											ng-click="openDatePicker($event, deOrder, '$paydeldate')">
+											<i class="fa fa-calendar fa-lg"></i>
+										</button>
+									</span>
+                                </div>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em>我方付款金额({{deOrder.currency}}):</em>
+                                <span >{{deOrder.totalpayament| number: 6 }}</span>
+                            </div>
+                            <div class="fr">
+                                <em>我方付款日期:</em>
+                                <span ng-bind="deOrder.paymentdate"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em><b>*</b>风险承担方式:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.riskmethod" ng-required="true" readonly></span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>运、税费承担方式:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.taxpaymentmethod" ng-required="true" readonly></span>
+                            </div>
+                        </li>
+                    </ul>
+                </div>
+                <!--付款确认书-->
+                <div class="com_title01"><span>付款确认书</span></div>
+                <div class="purchase_form01 clearfix">
+                    <ul>
+                        <li>
+                            <div class="fl wid100">
+                                <em><b>*</b>终端供应商地址:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.tervendaddress" ng-required="true"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl wid100">
+                                <em><b>*</b>公司全称(英文):</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.companyname" ng-required="true"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em><b>*</b>要求付汇日期:</em>
+                                 <div class="input-group">
+									<input ng-model="deOrder.requirepaydate" type="text" class="form-control" 
+										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$requirepaydate"
+										min-date="getMinDate()" ng-required="true"
+										current-text="今天" clear-text="清除" close-text="关闭"
+										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
+									<span class="input-group-btn">
+										<button type="button" class="btn btn-default btn-sm"
+											ng-click="openDatePicker($event, deOrder, '$requirepaydate')">
+											<i class="fa fa-calendar fa-lg"></i>
+										</button>
+									</span>
+                                </div>
+                            </div>
+                            <div class="fr">
+                                <em>实际付汇日期:</em>
+                                <span ng-bind="deOrder.actualpaydate"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em>付款金额({{deOrder.currency}}):</em>
+                                <span>{{deOrder.usdpayment| number: 6}}</span>
+                            </div>
+                            <div class="fr">
+                                <em>实际付款金额({{deOrder.currency}}):</em>
+                                <span ng-bind="deOrder.actusdpayment| number: 6"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em><b>*</b>银行名称(英文):</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.bankname" ng-required="true"></span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>银行账号:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.bankaccount" ng-required="true"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl wid100">
+                                <em><b>*</b>银行地址(英文):</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.bankaddress" ng-required="true"></span>
+                            </div>
+                        </li>
+                        <li>
+                            <div class="fl">
+                                <em><b>*</b>银行代码:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.bankcode" ng-required="true"></span>
+                            </div>
+                            <div class="fr">
+                                <em>其它相关资料:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.otherdata"></span>
+                            </div>
+                        </li>
+                    </ul>
+                </div>
+                <!--买卖合同-->
+                <div class="com_title01"><span>买卖合同</span></div>
+                <div class="purchase_form01 clearfix">
+                    <ul>
+                        <li>
+                            <div class="fl">
+                                <em><b>*</b>合同编号: </em>
+                                <span><input type="text" class="input01" ng-model="deOrder.salepocode" ng-required="true"></span>
+                            </div>
+                             <div class="fr">
+                                <em><b>*</b>供应商方法定代表人: </em>
+                                <span><input type="text" class="input01" ng-model="deOrder.legalrepresent" ng-required="true"></span>
+                            </div>
+                        </li>
+                         <li>
+                            <div class="fl">
+                                <em><b>*</b>付款公司: </em>
+                                <span><input type="text" class="input01" ng-model="deOrder.paycomname" ng-click="dbfindPayCompany(deOrder.deputyuu)"></span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>付款公司地址:</em>
+                                <span><input type="text" class="input01" ng-model="deOrder.paycomaddress" ng-required="true"></span>
+                            </div>
+                        </li>
+                        <li>
+                        	<div class="fl">
+                                <em><b>*</b>供应商方法人电话: </em>
+                                <span><input type="text" class="input01" ng-model="deOrder.enfax" ng-required="true"></span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>货款支付时间:</em>
+                                 <div class="input-group">
+									<input ng-model="deOrder.paydate" type="text" class="form-control" 
+										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$paydate"
+										min-date="getMinDate()" ng-required="true"
+										current-text="今天" clear-text="清除" close-text="关闭"
+										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
+									<span class="input-group-btn">
+										<button type="button" class="btn btn-default btn-sm"
+											ng-click="openDatePicker($event, deOrder, '$paydate')">
+											<i class="fa fa-calendar fa-lg"></i>
+										</button>
+									</span>
+                                </div>
+                            </div>
+                        </li>
+                        <li>
+                       	 	<div class="fl">
+                                <em><b>*</b>货款支付方式:</em>
+                                <span>
+                                	<input ng-model="deOrder.paymethod" list="paymethod" class="select">
+                                	<datalist id="paymethod">
+                                	 	<option value="月结30天">月结30天</option>
+                                	 	<option value="全款T/T">全款T/T</option>
+                                	</datalist>
+                                </span>
+                            </div>
+                            <div class="fr">
+                                <em><b>*</b>交货时间:</em>
+                                 <div class="input-group">
+									<input ng-model="deOrder.deliverydate" type="text" class="form-control" 
+										placeholder="点击选择时间" datepicker-popup="yyyy-MM-dd" is-open="deOrder.$deliverydate"
+										min-date="getMinDate()" ng-required="true"
+										current-text="今天" clear-text="清除" close-text="关闭"
+										datepicker-options="{formatDayTitle: 'yyyy年M月', formatMonth: 'M月', showWeeks: false}"
+										ng-focus="openDatePicker($event, deOrder.$dateOpen)" readonly>
+									<span class="input-group-btn">
+										<button type="button" class="btn btn-default btn-sm"
+											ng-click="openDatePicker($event, deOrder, '$deliverydate')">
+											<i class="fa fa-calendar fa-lg"></i>
+										</button>
+									</span>
+                                </div>
+                            </div>
+                            <div class="fr"></div>
+                        </li>
+                    </ul>
+                </div>
+                <div class="save">
+                	<button ng-click="save('保存')">保存</button>
+                	<button ng-click="save('已提交')">提交</button>
+                </div>
+            </div>
+        </form>
+    </div>
+</div>
+</body>
+</html>

+ 3 - 0
src/main/webapp/resources/tpl/index/purc/left.html

@@ -30,6 +30,9 @@
 	<ul class="list-unstyled">
 		<li ui-sref-active="active"><a ui-sref="purc.makeoutorder"><em class="new-dot" ng-if="false"></em>委外订单</a></li>
 	</ul>
+	<ul class="list-unstyled">
+		<li ui-sref-active="active"><a ui-sref="purc.change"><em class="new-dot" ng-if="false"></em>采购变更单</a></li>
+	</ul>
 	<!-- 测试 -->
 	<!-- <ul class="list-unstyled">
 		<li ui-sref-active="active"><a ui-sref="purc.cart">购物车</a></li>