Browse Source

Merge branch 'release-201817-wangcz'

yujia 7 years ago
parent
commit
b6c5d017dc
100 changed files with 2344 additions and 270 deletions
  1. 1 4
      src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/RecommendProductServiceImpl.java
  2. 2 9
      src/main/java/com/uas/platform/b2c/common/message/controller/InternalMessageController.java
  3. 26 1
      src/main/java/com/uas/platform/b2c/common/message/model/MessageModel.java
  4. 14 0
      src/main/java/com/uas/platform/b2c/common/message/type/ConsumerApp.java
  5. 24 0
      src/main/java/com/uas/platform/b2c/common/message/type/ConsumerType.java
  6. 14 0
      src/main/java/com/uas/platform/b2c/common/message/type/ProducerApp.java
  7. 26 0
      src/main/java/com/uas/platform/b2c/common/message/type/SMSType.java
  8. 7 0
      src/main/java/com/uas/platform/b2c/common/psmessage/OrderCompleteInfo.java
  9. 61 0
      src/main/java/com/uas/platform/b2c/common/psmessage/controller/MessageController.java
  10. 13 0
      src/main/java/com/uas/platform/b2c/common/psmessage/dao/OrderCompleteInfoDao.java
  11. 61 0
      src/main/java/com/uas/platform/b2c/common/psmessage/model/OrderCompleteInfo.java
  12. 46 0
      src/main/java/com/uas/platform/b2c/common/psmessage/service/MessageService.java
  13. 264 7
      src/main/java/com/uas/platform/b2c/common/psmessage/service/impl/MessageServiceImpl.java
  14. 86 0
      src/main/java/com/uas/platform/b2c/common/psmessage/task/MessageTask.java
  15. 71 0
      src/main/java/com/uas/platform/b2c/common/psmessage/util/JsonObjectUtil.java
  16. 1 0
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankTransferServiceImpl.java
  17. 11 24
      src/main/java/com/uas/platform/b2c/fa/payment/service/impl/InstallmentServiceImpl.java
  18. 45 0
      src/main/java/com/uas/platform/b2c/fa/settlement/model/BillSubmit.java
  19. 6 0
      src/main/java/com/uas/platform/b2c/fa/settlement/service/SettlementService.java
  20. 4 0
      src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/BillSubmitServiceImpl.java
  21. 54 13
      src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/SettlementServiceImpl.java
  22. 11 2
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  23. 15 0
      src/main/java/com/uas/platform/b2c/prod/store/controller/StoreApplyController.java
  24. 1 1
      src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java
  25. 9 0
      src/main/java/com/uas/platform/b2c/prod/store/service/StoreApplyService.java
  26. 23 0
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreApplyServiceImpl.java
  27. 18 0
      src/main/java/com/uas/platform/b2c/trade/order/StringConstant/StringFormat.java
  28. 28 0
      src/main/java/com/uas/platform/b2c/trade/order/dao/MessageNotifyPersonalManagementDao.java
  29. 118 0
      src/main/java/com/uas/platform/b2c/trade/order/model/MessageNotifyPersonalManagement.java
  30. 26 0
      src/main/java/com/uas/platform/b2c/trade/order/service/MessageNotifyPersonalManagementService.java
  31. 7 0
      src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java
  32. 56 0
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/MessageNotifyPersonalManagementServiceImpl.java
  33. 4 6
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderDetailServiceImpl.java
  34. 44 9
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  35. 9 3
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/PurchaseServiceImpl.java
  36. 30 0
      src/main/java/com/uas/platform/b2c/trade/order/type/MessageType.java
  37. 1 1
      src/main/resources/spring/context.xml
  38. 5 0
      src/main/resources/spring/task.xml
  39. 28 25
      src/main/webapp/WEB-INF/views/normal/adminWithNav.html
  40. 1 1
      src/main/webapp/resources/css/admin.css
  41. 7 1
      src/main/webapp/resources/css/common.css
  42. 1 0
      src/main/webapp/resources/css/common/linkSaler.css
  43. 108 6
      src/main/webapp/resources/js/admin/app.js
  44. 32 0
      src/main/webapp/resources/js/admin/controllers/StoreApplicationCtrl.js
  45. 40 1
      src/main/webapp/resources/js/admin/controllers/trade/TradeOrderDetailCtrl.js
  46. 30 0
      src/main/webapp/resources/js/common/query/adminNews.js
  47. 2 5
      src/main/webapp/resources/js/common/query/storeInfo.js
  48. 10 1
      src/main/webapp/resources/js/usercenter/app.js
  49. 25 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_record_ctrl.js
  50. 4 1
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_no_invoice_ctrl.js
  51. 1 0
      src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js
  52. 8 4
      src/main/webapp/resources/js/usercenter/controllers/forstore/seek_purchase_ctrl.js
  53. 10 1
      src/main/webapp/resources/js/vendor/app.js
  54. 1 0
      src/main/webapp/resources/js/vendor/controllers/cusPurchaseCtrl.js
  55. 1 0
      src/main/webapp/resources/js/vendor/controllers/forstore/purchasAttendtion_ctrl.js
  56. 2 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_applylist_ctrl.js
  57. 3 2
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_batchapplylist_ctrl.js
  58. 26 1
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_invoice_ctrl.js
  59. 1 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js
  60. 5 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_undercarriageCtrl.js
  61. 6 1
      src/main/webapp/resources/lib/angular/ng-table.js
  62. 0 0
      src/main/webapp/resources/lib/angular/ng-table.min.js
  63. 139 0
      src/main/webapp/resources/view/admin/modal/admin_news_modal.html
  64. 165 0
      src/main/webapp/resources/view/admin/news.html
  65. 48 2
      src/main/webapp/resources/view/admin/store_application_maintenance.html
  66. 4 4
      src/main/webapp/resources/view/admin/trade/trade_buyer_order.html
  67. 85 1
      src/main/webapp/resources/view/admin/trade/trade_order_detail.html
  68. 1 1
      src/main/webapp/resources/view/common/header.html
  69. 1 1
      src/main/webapp/resources/view/common/modal/delete_modal.html
  70. 1 1
      src/main/webapp/resources/view/prod/my_cart.html
  71. 1 1
      src/main/webapp/resources/view/search/search_component.html
  72. 2 2
      src/main/webapp/resources/view/sso/header.html
  73. 3 2
      src/main/webapp/resources/view/sso/staffManagement.html
  74. 12 12
      src/main/webapp/resources/view/usercenter/forstore/buyer_invoice.html
  75. 25 5
      src/main/webapp/resources/view/usercenter/forstore/buyer_invoice_record.html
  76. 8 4
      src/main/webapp/resources/view/usercenter/forstore/buyer_no_invoice.html
  77. 14 8
      src/main/webapp/resources/view/usercenter/forstore/buyer_order.html
  78. 16 4
      src/main/webapp/resources/view/usercenter/forstore/first_rate.html
  79. 2 2
      src/main/webapp/resources/view/usercenter/forstore/home_center.html
  80. 1 1
      src/main/webapp/resources/view/usercenter/forstore/order_detail.html
  81. 3 3
      src/main/webapp/resources/view/usercenter/forstore/order_pay.html
  82. 2 1
      src/main/webapp/resources/view/usercenter/forstore/pay_center.html
  83. 40 15
      src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html
  84. 16 4
      src/main/webapp/resources/view/usercenter/forstore/show_rate.html
  85. 1 1
      src/main/webapp/resources/view/usercenter/header.html
  86. 2 2
      src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_erp.html
  87. 2 2
      src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_person_erp.html
  88. 1 1
      src/main/webapp/resources/view/vendor/forstore/erp/vendor_undercarriage_erp.html
  89. 2 1
      src/main/webapp/resources/view/vendor/forstore/pay_center.html
  90. 18 13
      src/main/webapp/resources/view/vendor/forstore/purchasAttendtion.html
  91. 23 13
      src/main/webapp/resources/view/vendor/forstore/purchaseOffer.html
  92. 5 2
      src/main/webapp/resources/view/vendor/forstore/purchase_detail.html
  93. 14 13
      src/main/webapp/resources/view/vendor/forstore/seekPurchase.html
  94. 16 2
      src/main/webapp/resources/view/vendor/forstore/showRate.html
  95. 35 6
      src/main/webapp/resources/view/vendor/forstore/vendor-invoice.html
  96. 1 1
      src/main/webapp/resources/view/vendor/forstore/vendor_component_batchapplylist.html
  97. 3 0
      src/main/webapp/resources/view/vendor/forstore/vendor_logistics.html
  98. 13 3
      src/main/webapp/resources/view/vendor/forstore/vendor_material.html
  99. 6 4
      src/main/webapp/resources/view/vendor/forstore/vendor_material_person.html
  100. 19 0
      src/main/webapp/resources/view/vendor/forstore/vendor_onSale.html

+ 1 - 4
src/main/java/com/uas/platform/b2c/advertise/ad/service/impl/RecommendProductServiceImpl.java

@@ -90,10 +90,6 @@ public class RecommendProductServiceImpl implements RecommendProductService {
 			productList = Collections.emptyList();
 		}
 
-		if (StringUtils.isEmpty(uuid)) {
-			return Collections.emptyList();
-		}
-
 		List<RecommendProduct> products = recommendProductDao.findByStoreUuidOrderByOrderAsc(uuid);
 		if (!CollectionUtils.isEmpty(products)) {
 			recommendProductDao.delete(products);
@@ -111,6 +107,7 @@ public class RecommendProductServiceImpl implements RecommendProductService {
 			recommendProduct.setStoreUuid(uuid);
 			recommendProduct.setCreateTime(nowDate);
 			recommendProduct.setUpdateTime(nowDate);
+			list.add(recommendProduct);
 		}
 		List<RecommendProduct> recommendProducts = recommendProductDao.save(list);
 

+ 2 - 9
src/main/java/com/uas/platform/b2c/common/message/controller/InternalMessageController.java

@@ -1,25 +1,18 @@
 package com.uas.platform.b2c.common.message.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.TypeReference;
-import com.alibaba.fastjson.parser.Feature;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.message.service.InternalMessageService;
 import com.uas.platform.b2c.core.config.MessageConf;
 import com.uas.platform.b2c.core.support.SystemSession;
-import com.uas.platform.b2c.fa.payment.utils.StringUtils;
+import com.uas.platform.b2c.core.utils.ContextUtils;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.Status;
-import com.uas.platform.core.util.HttpUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.domain.Page;
 import org.springframework.http.HttpStatus;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
-import com.uas.platform.b2c.common.message.model.MessageModel;
-import java.util.HashMap;
-import com.uas.platform.b2c.core.utils.ContextUtils;
 
 /**
  * 站内信接口
@@ -105,7 +98,7 @@ public class InternalMessageController {
     @ResponseStatus(value = HttpStatus.OK)
     public ModelMap getMessages(Short isRead) {
         try {
-            return new ModelMap("toRead", internalMessageService.getMessageNum(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(),isRead));
+            return new ModelMap("toRead", internalMessageService.getMessageNum(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), isRead));
         } catch (Exception e) {
             e.printStackTrace();
             return null;

+ 26 - 1
src/main/java/com/uas/platform/b2c/common/message/model/MessageModel.java

@@ -5,7 +5,7 @@ import java.util.Date;
 /**
  * 消息公共服务接收实体
  */
-public class MessageModel{
+public class MessageModel {
 
     /**
      * 消息id
@@ -103,6 +103,12 @@ public class MessageModel{
      */
     private String consumerApp;
 
+
+    private String sendEnterpriseName;
+
+
+    private String sendUserName;
+
     public Long getId() {
         return id;
     }
@@ -245,4 +251,23 @@ public class MessageModel{
     public void setSourceId(Long sourceId) {
         this.sourceId = sourceId;
     }
+
+    public String getSendEnterpriseName() {
+
+        return sendEnterpriseName;
+    }
+
+    public MessageModel setSendEnterpriseName(String sendEnterpriseName) {
+        this.sendEnterpriseName = sendEnterpriseName;
+        return this;
+    }
+
+    public String getSendUserName() {
+        return sendUserName;
+    }
+
+    public MessageModel setSendUserName(String sendUserName) {
+        this.sendUserName = sendUserName;
+        return this;
+    }
 }

+ 14 - 0
src/main/java/com/uas/platform/b2c/common/message/type/ConsumerApp.java

@@ -0,0 +1,14 @@
+package com.uas.platform.b2c.common.message.type;
+
+/**
+ * 来源应用
+ *
+ * @author yuj 2018-07-11 10:51
+ */
+public class ConsumerApp {
+
+    /**
+     * 来源应用
+     */
+    public static final String MALL = "MALL";
+}

+ 24 - 0
src/main/java/com/uas/platform/b2c/common/message/type/ConsumerType.java

@@ -0,0 +1,24 @@
+package com.uas.platform.b2c.common.message.type;
+
+/**
+ * 消费类型
+ *
+ * @author yuj 2018-07-11 10:51
+ */
+public class ConsumerType {
+
+    /**
+     * 消费类型
+     */
+    public static final String MULTI = "MULTI";
+
+    /**
+     * 消费类型
+     */
+    public static final String SINGLE = "SINGLE";
+
+    /**
+     * 消费类型
+     */
+    public static final String PUBLIC = "PUBLIC";
+}

+ 14 - 0
src/main/java/com/uas/platform/b2c/common/message/type/ProducerApp.java

@@ -0,0 +1,14 @@
+package com.uas.platform.b2c.common.message.type;
+
+/**
+ * 来源应用
+ *
+ * @author yuj 2018-07-11 10:51
+ */
+public class ProducerApp {
+
+    /**
+     * 来源应用
+     */
+    public static final String MALL = "MALL";
+}

+ 26 - 0
src/main/java/com/uas/platform/b2c/common/message/type/SMSType.java

@@ -0,0 +1,26 @@
+package com.uas.platform.b2c.common.message.type;
+
+/**
+ * Created by wangyc on 2018/1/16.
+ * 消息推送类型
+ * @version 2018/1/16 14:02 wangyc
+ */
+public class SMSType {
+
+    // 邮件、短信、IM
+    public static final String MAIL_AND_SM_AND_IM = "MAIL_AND_SM_AND_IM";
+    // 邮件、短信
+    public static final String MAIL_AND_SM = "MAIL_AND_SM";
+    // 邮件、IM
+    public static final String MAIL_AND_IM = "MAIL_AND_IM";
+    // 短信、IM
+    public static final String SM_AND_IM = "SM_AND_IM";
+    // 邮件
+    public static final String MAIL = "MAIL";
+    // 短信
+    public static final String SM = "SM";
+    // IM
+    public static final String IM = "IM";
+    // 不发送
+    public static final String DONT_SEND = "DONT_SEND";
+}

+ 7 - 0
src/main/java/com/uas/platform/b2c/common/psmessage/OrderCompleteInfo.java

@@ -0,0 +1,7 @@
+package com.uas.platform.b2c.common.psmessage;
+
+/**
+ * Created by yujia on 2018/7/12.
+ */
+public interface OrderCompleteInfo {
+}

+ 61 - 0
src/main/java/com/uas/platform/b2c/common/psmessage/controller/MessageController.java

@@ -0,0 +1,61 @@
+package com.uas.platform.b2c.common.psmessage.controller;
+
+import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.common.psmessage.service.MessageService;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * 获取ps-message保存的站内信的接口
+ *
+ * @author yuj 2018-07-11 17:01
+ */
+@RestController
+@RequestMapping("/webMessage")
+public class MessageController {
+
+    private final MessageService messageService;
+
+    @Autowired
+    public MessageController(MessageService messageService) {
+        this.messageService = messageService;
+    }
+
+    /**
+     * 根据分页信息和过滤类型分页获取站内信
+     * @param params
+     * @param type
+     * @return
+     */
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    public Page<MessageModel> findByPageAndParams(PageParams params, String type) {
+        return messageService.findByPageAndParams(params, type);
+    }
+
+
+    /**
+     * 获取未读消息数量
+     * @return
+     */
+    @RequestMapping(value = "/count/unread", method = RequestMethod.GET)
+    public Map<String, Object> getUnReadMessageCount(String type) {
+        return messageService.getUnReadMessageCount(type);
+    }
+
+    /**
+     * 阅读消息
+     * @param messageId 消息接收者信息
+     * @return
+     */
+    @RequestMapping(value = "/read", method = RequestMethod.POST)
+    public ResultMap read(Long messageId) {
+        return messageService.readMessage(messageId);
+    }
+}

+ 13 - 0
src/main/java/com/uas/platform/b2c/common/psmessage/dao/OrderCompleteInfoDao.java

@@ -0,0 +1,13 @@
+package com.uas.platform.b2c.common.psmessage.dao;
+
+import com.uas.platform.b2c.common.psmessage.model.OrderCompleteInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by yujia on 2018/7/12.
+ */
+@Repository
+public interface OrderCompleteInfoDao extends JpaRepository<OrderCompleteInfo, Long>, JpaSpecificationExecutor<OrderCompleteInfo> {
+}

+ 61 - 0
src/main/java/com/uas/platform/b2c/common/psmessage/model/OrderCompleteInfo.java

@@ -0,0 +1,61 @@
+package com.uas.platform.b2c.common.psmessage.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * Created by yujia on 2018/7/12.
+ */
+@Entity
+@Table(name = "ordercompleteinfo")
+public class OrderCompleteInfo implements Serializable {
+
+
+    private static final long serialVersionUID = 3488774334604983126L;
+
+    @Id
+    @Column(name = "id")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "order_id")
+    private String orderId;
+
+    @Column(name = "remark")
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public OrderCompleteInfo setId(Long id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getOrderId() {
+        return orderId;
+    }
+
+    public OrderCompleteInfo setOrderId(String orderId) {
+        this.orderId = orderId;
+        return this;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public OrderCompleteInfo setRemark(String remark) {
+        this.remark = remark;
+        return this;
+    }
+
+    @Override
+    public String toString() {
+        return "OrderCompleteInfo{" +
+                "id=" + id +
+                ", orderId='" + orderId + '\'' +
+                '}';
+    }
+}

+ 46 - 0
src/main/java/com/uas/platform/b2c/common/psmessage/service/MessageService.java

@@ -1,7 +1,12 @@
 package com.uas.platform.b2c.common.psmessage.service;
 
 import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.data.domain.Page;
+
 import java.util.List;
+import java.util.Map;
 
 /**
  * 公共消息服务接口
@@ -17,4 +22,45 @@ public interface MessageService {
      * @return
      */
     String sendMessage(List<MessageModel> messageModel);
+
+
+
+    /**
+     * 根据分页信息和过滤类型分页获取站内信
+     * @param params
+     * @param type
+     * @return
+     */
+    Page<MessageModel> findByPageAndParams(PageParams params, String type);
+
+
+
+
+    /**
+     * 根据所给字段生成消息
+     * @param content 消息内容
+     * @param type 消息类型
+     * @param receiverUu 接收人
+     * @param receiverEnuu 接收企业
+     * @param consumerType 消费类型
+     * @param consumerApp 消费应用
+     * @param smsType
+     * @return
+     */
+    MessageModel initMessage(String content, String type, Long receiverUu, Long receiverEnuu, String consumerType,String consumerApp, String smsType, String remark, Long... args);
+
+
+    /**
+     * 获取未读消息数量
+     * @return
+     */
+    Map<String, Object> getUnReadMessageCount(String type);
+
+    /**
+     * 短信
+     *
+     * @param messageId 消息的接口
+     * @return ModelMap
+     */
+    ResultMap readMessage(Long messageId);
 }

+ 264 - 7
src/main/java/com/uas/platform/b2c/common/psmessage/service/impl/MessageServiceImpl.java

@@ -1,13 +1,39 @@
 package com.uas.platform.b2c.common.psmessage.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.service.EnterpriseService;
+import com.uas.platform.b2c.common.account.service.UserService;
 import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.common.message.type.ConsumerApp;
+import com.uas.platform.b2c.common.message.type.ProducerApp;
 import com.uas.platform.b2c.common.psmessage.service.MessageService;
+import com.uas.platform.b2c.common.psmessage.util.JsonObjectUtil;
 import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.prod.commodity.constant.IntegerConstant;
+import com.uas.platform.b2c.trade.support.CodeType;
+import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.b2c.trade.util.BoundedExecutor;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.util.HttpUtil;
-import java.util.List;
+import org.apache.commons.collections.map.HashedMap;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * Created by wangyc on 2018/6/29.
@@ -17,17 +43,248 @@ import org.springframework.stereotype.Service;
 @Service
 public class MessageServiceImpl implements MessageService {
 
+    private final SysConf sysConf;
+
+    private final BoundedExecutor executor;
+
+    private final EnterpriseService enterpriseService;
+
+    private final UserService userService;
+
     @Autowired
-    private SysConf sysConf;
+    public MessageServiceImpl(SysConf sysConf, EnterpriseService enterpriseService, UserService userService) {
+        this.sysConf = sysConf;
+        this.enterpriseService = enterpriseService;
+        this.userService = userService;
+        ExecutorService executorService = Executors.newCachedThreadPool();
+        executor = new BoundedExecutor(executorService, 1600);
+    }
+
+    @Override
+    public String sendMessage(final List<MessageModel> models) {
+        final Runnable sendMessage = new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    String result = HttpUtil.doPost(sysConf.getMessageServiceUrl() + "messages", FastjsonUtils.toJson(models));
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        };
+        try {
+            executor.submitTask(sendMessage);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+            return "false";
+        }
+        return "true";
+    }
 
+
+    /**
+     * 根据分页信息和过滤类型分页获取站内信
+     *
+     * @param params
+     * @param type
+     * @return
+     */
     @Override
-    public String sendMessage(List<MessageModel> models) {
-        String result = "";
+    public Page<MessageModel> findByPageAndParams(PageParams params, String type) {
+        if (params == null) {
+            params = new PageParams();
+            params.setPage(1);
+            params.setCount(10);
+        } else {
+            int page = params.getPage();
+            if (page < 1) {
+                params.setPage(1);
+            }
+            int count = params.getCount();
+            if (count < 1) {
+                params.setCount(10);
+            }
+        }
+        Map<String, Object> map = new HashedMap();
+        map.put("consumerApp", ConsumerApp.MALL);
+        map.put("isRead", 0);
+        map.put("page", params.getPage());
+        map.put("count", params.getCount());
+        map.put("sorting", "{\"createTime\":\"DESC\"}");
+        if (!StringUtils.isEmpty(type)) {
+            map.put("type", type);
+        }
+        User user = SystemSession.getUser();
+        if (user != null) {
+            map.put("receiverUu", user.getUserUU());
+            Enterprise enterprise = user.getEnterprise();
+            if (enterprise != null) {
+                map.put("receiverEnuu", enterprise.getUu());
+            }
+        }
         try {
-            return HttpUtil.doPost(sysConf.getMessageServiceUrl() + "messages", FastjsonUtils.toJson(models));
+            HttpUtil.Response response = HttpUtil.sendGetRequest(sysConf.getMessageServiceUrl() + "/messages", map);
+            int statusCode = response.getStatusCode();
+            if (statusCode == HttpStatus.OK.value()) {
+                String text = response.getResponseText();
+                if (!StringUtils.isEmpty(text)) {
+                    JSONObject jsonObject = FastjsonUtils.fromJson(text, JSONObject.class);
+                    Page<MessageModel> messageModels = JsonObjectUtil.convertToMessageModelPage(jsonObject);
+                    for (MessageModel messageModel : messageModels) {
+                            if (messageModel.getSenderEnuu() != null) {
+                                Enterprise enterpriseInfo = enterpriseService.getEnterpriseInfo(messageModel.getSenderEnuu());
+                                if (enterpriseInfo != null) {
+                                    messageModel.setSendEnterpriseName(enterpriseInfo.getEnName());
+                                }
+                            }
+                        if (messageModel.getSenderUu() != null) {
+                            User userByUserUU = userService.findUserByUserUU(messageModel.getSenderUu());
+                            if (userByUserUU != null) {
+                                messageModel.setSendUserName(userByUserUU.getUserName());
+                            }
+                        }
+                    }
+                    return messageModels;
+                }
+            }
+            return new PageImpl<MessageModel>(Collections.<MessageModel>emptyList(), new PageInfo(params), 0);
         } catch (Exception e) {
-            result = "false";
+            e.printStackTrace();
+            return new PageImpl<MessageModel>(Collections.<MessageModel>emptyList(), new PageInfo(params), 0);
         }
-        return result;
     }
+
+    /**
+     * 根据所给字段生成消息
+     *
+     * @param content 发送内容
+     * @param type   消息的类型,用户自己定义
+     * @param receiverUu 接收人
+     * @param receiverEnuu
+     * @param consumerType 消费类型(所有应用共享:"PUBLIC",单个应用独享:"SINGLE",多个应用共享:"MULTI")
+     * @param consumerApp MALL等
+     * @return
+     */
+    @Override
+    public MessageModel initMessage(String content, String type, Long receiverUu, Long receiverEnuu, String consumerType, String consumerApp, String smsType, String remark, Long... args) {
+        if (StringUtils.isEmpty(content) || StringUtils.isEmpty(type) || receiverUu == null || receiverEnuu == null || StringUtils.isEmpty(consumerType) || StringUtils.isEmpty(consumerApp)) {
+            return null;
+        } else {
+            MessageModel model = new MessageModel();
+            model.setRemark(remark);
+            model.setConsumerApp(consumerApp);
+            model.setConsumerType(consumerType);
+            model.setSmsType(smsType);
+            model.setContent(content);
+            model.setType(type);
+            model.setCreateTime(new Date());
+            model.setReceiverEnuu(receiverEnuu);
+            model.setReceiverUu(receiverUu);
+            if (args.length == 0) {
+                User user = SystemSession.getUser();
+                model.setSenderUu(user.getUserUU());
+                if (user.getEnterprise() != null) {
+                    model.setSenderEnuu(user.getEnterprise().getUu());
+                }
+            } else {
+                model.setSenderUu(args[0]);
+                model.setSenderEnuu(args[1]);
+            }
+            model.setProducerApp(ProducerApp.MALL);
+            return model;
+        }
+    }
+
+    /**
+     * 获取未读消息数量
+     * @return
+     */
+    @Override
+    public Map<String, Object> getUnReadMessageCount(String type) {
+        Map<String , Object> resultMap = new HashedMap();
+        resultMap.put("success", "success");
+        resultMap.put("count", "0");
+        User user = SystemSession.getUser();
+        Map<String, Object> map = new HashedMap();
+        if (user != null) {
+            map.put("receiverUu", user.getUserUU());
+            Enterprise enterprise = user.getEnterprise();
+            if (enterprise != null) {
+                map.put("receiverEnuu", enterprise.getUu());
+            }
+        }
+        map.put("consumerApp", ConsumerApp.MALL);
+        if (!StringUtils.isEmpty(type)) {
+            map.put("type", type);
+        }
+        map.put("isRead", IntegerConstant.NO_INT);
+        try {
+            HttpUtil.Response response = HttpUtil.sendGetRequest(sysConf.getMessageServiceUrl() + "messages/count", map);
+            int statusCode = response.getStatusCode();
+            if (statusCode == HttpStatus.OK.value()) {
+                String responseText = response.getResponseText();
+                if (!StringUtils.isEmpty(responseText)) {
+                    resultMap = FastjsonUtils.fromJson(responseText, HashedMap.class);
+                    return resultMap;
+                } else {
+                    return resultMap;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return resultMap;
+        }
+        return resultMap;
+        }
+
+    /**
+     * 短信
+     *
+     * @param messageId 消息的接口
+     * @return ModelMap
+     */
+    @Override
+    public ResultMap readMessage(Long messageId) {
+        Map<String, Object> resultMap = new HashedMap();
+        resultMap.put("success", "success");
+        resultMap.put("data", "");
+        Map<String, Object> map = new HashedMap();
+        if (messageId ==  null) {
+            return  new ResultMap(CodeType.NO_INFO, "未阅读任何信息");
+        } else {
+            map.put("messageId", messageId);
+        }
+        User user = SystemSession.getUser();
+        if (user != null) {
+            map.put("receiverUu", user.getUserUU());
+            Enterprise enterprise = user.getEnterprise();
+            if (enterprise != null) {
+                map.put("receiverEnuu", enterprise.getUu());
+            }
+        }
+        map.put("consumerApp", ConsumerApp.MALL);
+        String response = null;
+        try {
+            response = HttpUtil.doPost(sysConf.getMessageServiceUrl() + "messages/read", FastjsonUtils.toJson(map));
+            if (!StringUtils.isEmpty(response)) {
+                HashedMap hashedMap = FastjsonUtils.fromJson(response, HashedMap.class);
+                if (hashedMap != null) {
+                    Object success = hashedMap.get("success");
+                    if ("success".equals(success)) {
+                        return ResultMap.success(null);
+                    } else {
+                        return new ResultMap(CodeType.ERROR_STATE, hashedMap.get("data").toString());
+                    }
+                }
+            } else {
+                return new ResultMap(CodeType.ERROR_STATE, "删除失败");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResultMap(CodeType.ERROR_STATE, "删除失败");
+        }
+        return new ResultMap(CodeType.ERROR_STATE, "删除失败");
+    }
+
+
 }

+ 86 - 0
src/main/java/com/uas/platform/b2c/common/psmessage/task/MessageTask.java

@@ -0,0 +1,86 @@
+package com.uas.platform.b2c.common.psmessage.task;
+
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.service.EnterpriseService;
+import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.common.message.type.ConsumerApp;
+import com.uas.platform.b2c.common.message.type.ConsumerType;
+import com.uas.platform.b2c.common.message.type.SMSType;
+import com.uas.platform.b2c.common.psmessage.dao.OrderCompleteInfoDao;
+import com.uas.platform.b2c.common.psmessage.model.OrderCompleteInfo;
+import com.uas.platform.b2c.common.psmessage.service.MessageService;
+import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.trade.order.StringConstant.StringFormat;
+import com.uas.platform.b2c.trade.order.model.MessageNotifyPersonalManagement;
+import com.uas.platform.b2c.trade.order.service.MessageNotifyPersonalManagementService;
+import com.uas.platform.b2c.trade.order.type.MessageType;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * description
+ *
+ * @author yuj 2018-07-12 9:08
+ */
+@Component("MessageTask")
+public class MessageTask {
+
+    private final MessageService messageService;
+
+    private final OrderCompleteInfoDao completeInfoDao;
+
+    private final MessageNotifyPersonalManagementService messageNotifyPersonalManagementService;
+
+    private final SysConf sysConf;
+
+    private final EnterpriseService enterpriseService;
+
+    @Autowired
+    public MessageTask(MessageService messageService, OrderCompleteInfoDao completeInfoDao, MessageNotifyPersonalManagementService messageNotifyPersonalManagementService, SysConf sysConf, EnterpriseService enterpriseService) {
+        this.messageService = messageService;
+        this.completeInfoDao = completeInfoDao;
+        this.messageNotifyPersonalManagementService = messageNotifyPersonalManagementService;
+        this.sysConf = sysConf;
+        this.enterpriseService = enterpriseService;
+    }
+
+    /**
+     * 根据订单信息获取
+     */
+    public void sendMessage() {
+        List<OrderCompleteInfo> completeInfos = completeInfoDao.findAll();
+        List<MessageNotifyPersonalManagement> managements = messageNotifyPersonalManagementService.findNotifyPersonalEnuuAndType(sysConf.getEnUU(), MessageType.APPLY_PAID.getType());
+        List<MessageModel> sendMessageList = new ArrayList<>();
+        Enterprise enterpriseInfo = enterpriseService.getEnterpriseInfo(sysConf.getEnUU());
+        Long adminUu = null;
+        if (enterpriseInfo != null) {
+            adminUu = enterpriseInfo.getEnAdminuu();
+        }
+        if (CollectionUtils.isNotEmpty(managements)) {
+            if (CollectionUtils.isNotEmpty(completeInfos)) {
+                for (OrderCompleteInfo completeInfo : completeInfos) {
+                    String orderId = completeInfo.getOrderId();
+                    if (!StringUtils.isEmpty(orderId)) {
+                        for (MessageNotifyPersonalManagement management : managements) {
+                            Long notifyPersonalUseruu = management.getNotifyPersonalUseruu();
+                            MessageModel model = messageService.initMessage(String.format(StringFormat.APPLYPAID, orderId), MessageType.APPLY_PAID.getType(), notifyPersonalUseruu, sysConf.getEnUU(), ConsumerType.SINGLE, ConsumerApp.MALL, SMSType.DONT_SEND, completeInfo.getRemark(), adminUu, sysConf.getEnUU());
+                            sendMessageList.add(model);
+                        }
+
+                    }
+                }
+            }
+        }
+        if (CollectionUtils.isNotEmpty(sendMessageList)) {
+            messageService.sendMessage(sendMessageList);
+        }
+        if (CollectionUtils.isNotEmpty(completeInfos)) {
+            completeInfoDao.delete(completeInfos);
+        }
+    }
+}

+ 71 - 0
src/main/java/com/uas/platform/b2c/common/psmessage/util/JsonObjectUtil.java

@@ -0,0 +1,71 @@
+package com.uas.platform.b2c.common.psmessage.util;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.util.StringUtils;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * json 转换成 page
+ *
+ * @author yuj 2018-07-11 21:23
+ */
+public class JsonObjectUtil {
+
+    /**
+     * jsonobject 转换成page
+     * @return
+     */
+    public static Page<Object> convertToPage(JSONObject jsonObject, Class cls) {
+//        String content  = String.valueOf(jsonObject.get("content"));
+//        if (!StringUtils.isEmpty(content)) {
+//            try {
+//                List<? extends Class> array = FastjsonUtils.fromJsonArray(content, cls.getClass());
+//                Object number = jsonObject.get("number");
+//                PageImpl<T> page = new PageImpl<T>(array);
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//                return new PageImpl<?>(Collections.<T>emptyList(), new PageInfo(new PageParams(1, 10, null, null)), 0);
+//            }
+//        }
+//        return new PageImpl<T>(Collections.<T>emptyList(), new PageInfo(new PageParams(1, 10, null, null)), 0);
+        //TODO
+        return null;
+    }
+
+
+    /**
+     * jsonobject 转换成page
+     * @return
+     */
+    public static Page<MessageModel> convertToMessageModelPage(JSONObject jsonObject) {
+        String content  = String.valueOf(jsonObject.get("content"));
+        if (!StringUtils.isEmpty(content)) {
+            try {
+                List<MessageModel> messageModels = FastjsonUtils.fromJsonArray(content, MessageModel.class);
+                PageParams pageParams = new PageParams();
+                Object number = jsonObject.get("number");
+                number = number  == null ? 1 : number;
+                pageParams.setPage((Integer) number);
+                Object size = jsonObject.get("size");
+                size = size == null ? 10 : size;
+                pageParams.setCount((Integer)size );
+                PageInfo info = new PageInfo(pageParams);
+                Object totalElements = jsonObject.get("totalElements");
+                totalElements = totalElements == null ? messageModels.size() : totalElements;
+                return new PageImpl<MessageModel>(messageModels, info, Long.valueOf(totalElements.toString()));
+            } catch (Exception e) {
+                e.printStackTrace();
+                return new PageImpl<MessageModel>(Collections.<MessageModel>emptyList(), new PageInfo(new PageParams(1, 10, null, null)), 0);
+            }
+        }
+        return new PageImpl<MessageModel>(Collections.<MessageModel>emptyList(), new PageInfo(new PageParams(1, 10, null, null)), 0);
+    }
+}

+ 1 - 0
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/BankTransferServiceImpl.java

@@ -405,6 +405,7 @@ public class BankTransferServiceImpl implements BankTransferService {
 				}
 				purchaseDao.save(purchases);
 				orderDao.save(orderN);
+				orderService.sendConfirmPaidMessage(orderN);
 			}
 		}
 

+ 11 - 24
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/InstallmentServiceImpl.java

@@ -31,7 +31,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -278,7 +277,7 @@ public class InstallmentServiceImpl implements InstallmentService{
         Double total = purchase.getEnsurePrice();
         Double installTotal = installment.getPrice();
         Double dvalue = 0d;
-
+        installment.setPrice(purchase.getEnsurePrice());
         if (NumberUtil.compare(total, installTotal) == 1) {
             InstallmentDetail installmentDetail = installmentDetailDao.findByInstallmentIdAndDetno(installment.getId(), installment.getCount().shortValue());
             if (installmentDetail != null) {
@@ -287,43 +286,31 @@ public class InstallmentServiceImpl implements InstallmentService{
                 installmentDetail.setPrice(NumberUtil.pricesScaleTwo(result));
                 installmentDetailDao.save(installmentDetail);
             }
-        }
-
-
-
-        if (NumberUtil.compare(total, installTotal) == -1) {
+            return installmentDao.save(installment);
+        } else if (NumberUtil.compare(total, installTotal) == -1) {
             for (short i = 1; i < installment.getCount() + 1; i++) {
                 InstallmentDetail installmentDetail = installmentDetailDao.findByInstallmentIdAndDetno(installment.getId(), i);
                 if (installmentDetail == null) {
                     break;
                 }
 
-                dvalue = total - installmentDetail.getPrice();
+                dvalue = NumberUtil.sub(total, installmentDetail.getPrice());
 
-                if (dvalue <= 0) {
+                if (NumberUtil.compare(dvalue, 0.0d) <= 0) {
                     installmentDetail.setPrice(NumberUtil.pricesScaleTwo(total));
                     installmentDetailDao.save(installmentDetail);
-                    installmentDetailDao.deleteGtDetno(installment.getId(), i);
-
-                    Iterator<InstallmentDetail> it = installment.getInstallmentDetails().iterator();
-                    if (it.hasNext()) {
-                        InstallmentDetail installmentDetail1 = it.next();
-                        if (installmentDetail.getDetno() > i) {
-                            it.remove();
-                        }
-                    }
-
+                    installment.setCount(Integer.valueOf(i));
                     break;
                 } else {
                     total = dvalue;
                 }
             }
+            installmentDao.save(installment);
+            installmentDetailDao.deleteGtDetno(installment.getId(), Short.valueOf(installment.getCount().toString()));
+            return installmentDao.getOne(installment.getId());
+        } else {
+            return installment;
         }
-
-        installment.setPrice(purchase.getEnsurePrice());
-        installment.setCount(installment.getInstallmentDetails().size());
-
-        return installmentDao.save(installment);
     }
 
     @Override

+ 45 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/model/BillSubmit.java

@@ -129,6 +129,24 @@ public class BillSubmit implements Serializable{
     @Column(name = "bs_status")
     private Integer status;
 
+    /**
+     * 发票信息
+     */
+    @Column(name = "bs_bill_info", columnDefinition = "text")
+    private String billInfo;
+
+    /**
+     * 店铺id
+     */
+    @Column(name = "bs_storeid")
+    private String storeid;
+
+    /**
+     * 店铺名称
+     */
+    @Column(name = "bs_store_name")
+    private String storeName;
+
     public Long getId() {
         return id;
     }
@@ -272,4 +290,31 @@ public class BillSubmit implements Serializable{
     public void setStatus(Integer status) {
         this.status = status;
     }
+
+    public String getBillInfo() {
+        return billInfo;
+    }
+
+    public BillSubmit setBillInfo(String billInfo) {
+        this.billInfo = billInfo;
+        return this;
+    }
+
+    public String getStoreid() {
+        return storeid;
+    }
+
+    public BillSubmit setStoreid(String storeid) {
+        this.storeid = storeid;
+        return this;
+    }
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public BillSubmit setStoreName(String storeName) {
+        this.storeName = storeName;
+        return this;
+    }
 }

+ 6 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/service/SettlementService.java

@@ -82,4 +82,10 @@ public interface SettlementService {
      * @return the bank transfer
      */
     BankTransfer findBankTransfer(String requestId);
+
+    /**
+     * 生成站内信消息
+     * @param paymentId
+     */
+    void sendFinancialSettlementMessage(String paymentId);
 }

+ 4 - 0
src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/BillSubmitServiceImpl.java

@@ -122,6 +122,7 @@ public class BillSubmitServiceImpl implements BillSubmitService {
         billSubmit.setRecTel(bill.getTelephone());
         billSubmit.setStatus(Status.SUBMITTED.value());
         billSubmit.setSubmituu(SystemSession.getUser().getUserUU());
+        billSubmit.setBillInfo(FastjsonUtils.toJson(bill));
         if (SystemSession.getUser().getEnterprise() != null)
             billSubmit.setSubmitEnuu(SystemSession.getUser().getEnterprise().getUu());
 
@@ -133,6 +134,7 @@ public class BillSubmitServiceImpl implements BillSubmitService {
                 if (buyerEnuu.equals(order.getBuyerenuu()) && buyeruu.equals(order.getBuyeruu())) {
                     billSubmit.setSellername(order.getSellername());
                     billSubmit.setSellerenuu(order.getSellerenuu());
+                    billSubmit.setStoreid(order.getStoreid());
                     order.setInvoicetype(bill.getKind());
                     order.setInvoiceAddress(bill.getArea() + "," + bill.getDetailAddress());
                     order.setInvoiceid(bill.getId());
@@ -166,6 +168,7 @@ public class BillSubmitServiceImpl implements BillSubmitService {
 
         // 发票基本信息
         BillSubmit billSubmit = new BillSubmit();
+        billSubmit.setBillInfo(FastjsonUtils.toJson(bill));
         billSubmit.setInvoicetitle(bill.getHead());
         billSubmit.setInvoiceid(bill.getId());
         billSubmit.setInvoiceAddress(bill.getArea() + "," + bill.getDetailAddress());
@@ -180,6 +183,7 @@ public class BillSubmitServiceImpl implements BillSubmitService {
 
         billSubmit.setSellername(order.getSellername());
         billSubmit.setSellerenuu(order.getSellerenuu());
+        billSubmit.setStoreid(order.getStoreid());
 
         order.setInvoicetype(bill.getKind());
         order.setInvoiceAddress(FastjsonUtils.toJson(bill));

+ 54 - 13
src/main/java/com/uas/platform/b2c/fa/settlement/service/impl/SettlementServiceImpl.java

@@ -2,6 +2,11 @@ package com.uas.platform.b2c.fa.settlement.service.impl;
 
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.common.message.type.ConsumerApp;
+import com.uas.platform.b2c.common.message.type.ConsumerType;
+import com.uas.platform.b2c.common.message.type.SMSType;
+import com.uas.platform.b2c.common.psmessage.service.MessageService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.SystemSession;
@@ -19,10 +24,14 @@ import com.uas.platform.b2c.fa.settlement.model.RequestPayment;
 import com.uas.platform.b2c.fa.settlement.service.SettlementService;
 import com.uas.platform.b2c.fa.settlement.util.SettlementUtil;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
+import com.uas.platform.b2c.trade.order.StringConstant.StringFormat;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDetailDao;
+import com.uas.platform.b2c.trade.order.model.MessageNotifyPersonalManagement;
 import com.uas.platform.b2c.trade.order.model.Purchase;
 import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
+import com.uas.platform.b2c.trade.order.service.MessageNotifyPersonalManagementService;
+import com.uas.platform.b2c.trade.order.type.MessageType;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.b2c.trade.util.Preconditions;
@@ -75,23 +84,28 @@ public class SettlementServiceImpl implements SettlementService {
 
     private final SysConf sysConf;
 
+	private final MessageService messageService;
+
+	private final MessageNotifyPersonalManagementService messageNotifyPersonalManagementService;
+
     /**
      * Instantiates a new Settlement service.
-     *
-     * @param enterpriseDao             the enterprise dao
+	 * @param enterpriseDao             the enterprise dao
      * @param purchaseDao               the purchase dao
-     * @param purchaseDetailDao         the purchase detail dao
-     * @param requestPaymentDao         the request payment dao
-     * @param createNumberService       the create number service
-     * @param transferService           the transfer service
-     * @param bankTransAssociateService the bank trans associate service
-     * @param transAssociateDao         the trans associate dao
-     * @param bankTransferDao           the bank transfer dao
-     * @param sysConf                   the sys conf
-     */
+	 * @param purchaseDetailDao         the purchase detail dao
+	 * @param requestPaymentDao         the request payment dao
+	 * @param createNumberService       the create number service
+	 * @param transferService           the transfer service
+	 * @param bankTransAssociateService the bank trans associate service
+	 * @param transAssociateDao         the trans associate dao
+	 * @param bankTransferDao           the bank transfer dao
+	 * @param sysConf                   the sys conf
+	 * @param messageService
+	 * @param messageNotifyPersonalManagementService
+	 */
     @Autowired
 	public SettlementServiceImpl(EnterpriseDao enterpriseDao, PurchaseDao purchaseDao, PurchaseDetailDao purchaseDetailDao,
-                                 RequestPaymentDao requestPaymentDao, CreateNumberService createNumberService, BankTransferService transferService, BankTransAssociateService bankTransAssociateService, BankTransAssociateDao transAssociateDao, BankTransferDao bankTransferDao, SysConf sysConf) {
+								 RequestPaymentDao requestPaymentDao, CreateNumberService createNumberService, BankTransferService transferService, BankTransAssociateService bankTransAssociateService, BankTransAssociateDao transAssociateDao, BankTransferDao bankTransferDao, SysConf sysConf, MessageService messageService, MessageNotifyPersonalManagementService messageNotifyPersonalManagementService) {
 		this.enterpriseDao = enterpriseDao;
 		this.purchaseDao = purchaseDao;
 		this.purchaseDetailDao = purchaseDetailDao;
@@ -102,7 +116,9 @@ public class SettlementServiceImpl implements SettlementService {
 		this.transAssociateDao = transAssociateDao;
 		this.bankTransferDao = bankTransferDao;
         this.sysConf = sysConf;
-    }
+		this.messageService = messageService;
+		this.messageNotifyPersonalManagementService = messageNotifyPersonalManagementService;
+	}
 
 	/**
 	 * 根据关键字分页查询待结算采购单企业信息
@@ -323,9 +339,34 @@ public class SettlementServiceImpl implements SettlementService {
 		payment.setSettleTime(calendar.getTime());
 
 		requestPaymentDao.save(payment);
+		sendFinancialSettlementMessage(payment.getRequestId());
 		return payment.getRequestId();
 	}
 
+	/**
+	 * 生成站内信消息
+	 *
+	 * @param paymentId
+	 */
+	@Override
+	public void sendFinancialSettlementMessage(String paymentId) {
+		List<MessageNotifyPersonalManagement> notifyPersonalEnuuAndType = messageNotifyPersonalManagementService.findNotifyPersonalEnuuAndType(sysConf.getEnUU(), MessageType.FINANCIAL_SETTLEMENT.getType());
+		if (org.apache.commons.collections.CollectionUtils.isNotEmpty(notifyPersonalEnuuAndType)) {
+			List<MessageModel> sendMessageModel = new ArrayList<>();
+			for (MessageNotifyPersonalManagement messageNotifyPersonalManagement : notifyPersonalEnuuAndType) {
+				Long notifyPersonalUseruu = messageNotifyPersonalManagement.getNotifyPersonalUseruu();
+				if (notifyPersonalEnuuAndType != null) {
+					MessageModel model = messageService.initMessage(String.format(StringFormat.FINANCIAL_SETTLEMENT, paymentId), MessageType.FINANCIAL_SETTLEMENT.getType(), notifyPersonalUseruu, sysConf.getEnUU(), ConsumerType.SINGLE, ConsumerApp.MALL, SMSType.DONT_SEND, "");
+					sendMessageModel.add(model);
+				}
+			}
+
+			if (org.apache.commons.collections.CollectionUtils.isNotEmpty(sendMessageModel)) {
+				messageService.sendMessage(sendMessageModel);
+			}
+		}
+	}
+
 	/**
 	 * 计算付款单佣金
 	 *

+ 11 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java

@@ -3264,7 +3264,10 @@ public class GoodsServiceImpl implements GoodsService {
                         productPrivate.setB2cEnabled(IntegerConstant.YES_INT);
                     }
                     Integer count = productPrivate.getBatchCount();
-                    productPrivate.setBatchCount(--count);
+                    count = count == null ? 0 : count;
+                    count = --count;
+                    count = count < 1 ? 0 : count;
+                    productPrivate.setBatchCount(count);
                     productPrivateDao.save(productPrivate);
                 }
             }
@@ -3558,7 +3561,10 @@ public class GoodsServiceImpl implements GoodsService {
                     productPrivate.setB2cEnabled(IntegerConstant.YES_INT);
                 }
                 Integer count = productPrivate.getBatchCount();
-                productPrivate.setBatchCount(--count);
+                count = count == null ? 0 : count;
+                count = --count;
+                count = count < 1 ? 0 : count;
+                productPrivate.setBatchCount(count);
                 productPrivateDao.save(productPrivate);
             }
         }
@@ -3646,6 +3652,9 @@ public class GoodsServiceImpl implements GoodsService {
                         productPrivate.setBatchCount(0);
                     }else {
                         productPrivate.setBatchCount(--count);
+                        if (productPrivate.getBatchCount() < 1) {
+                            productPrivate.setBatchCount(0);
+                        }
                     }
                     productPrivateDao.save(productPrivate);
                     products.add(product);

+ 15 - 0
src/main/java/com/uas/platform/b2c/prod/store/controller/StoreApplyController.java

@@ -165,6 +165,21 @@ public class StoreApplyController {
 		return storeApplyService.pageStoreApplications(pageInfo, status, type, keyword);
 	}
 
+	/**
+	 * 分页获取店铺审核信息
+	 *
+	 * @param params		分页参数
+	 * @param status		店铺审核状态
+	 * @param type			店铺类型
+	 * @param keyword		搜索关键字,审核人
+	 */
+	@RequestMapping(value = "/applications", method = RequestMethod.GET, params = "operate=authorPage")
+	public Page<StoreApply> pageStoreApplicationsByAuth(PageParams params, @RequestParam(value = "status", required = false) StoreApply.ApplyStatus status, @RequestParam(value = "type", required = false) StoreType type, @RequestParam(value = "keyword", required = false) String keyword) {
+		logger.info("Page store information");
+		PageInfo pageInfo = new PageInfo(params);
+		return storeApplyService.pageStoreApplicationsByAuthor(pageInfo, status, type, keyword);
+	}
+
 	/**
 	 * 获取当前店铺的待处理和已通过申请信息,应当有且只有一条记录
 	 */

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/store/controller/StoreInController.java

@@ -209,7 +209,7 @@ public class StoreInController {
 	/**
 	 * 当卖家新增或修改产品推荐时,创建或更新产品推荐信息
 	 */
-	@RequestMapping(method = RequestMethod.POST, value = "/products//update_batch")
+	@RequestMapping(method = RequestMethod.POST, value = "/products/update_batch")
 	public List<RecommendProduct> saveProductsWhenSellerUpdate(String uuid, @RequestBody List<RecommendProduct> productList) {
 		return recommendProductService.saveProductsWhenSellerUpdate(uuid, productList);
 	}

+ 9 - 0
src/main/java/com/uas/platform/b2c/prod/store/service/StoreApplyService.java

@@ -67,6 +67,15 @@ public interface StoreApplyService {
 	 */
 	Page<StoreApply> pageStoreApplications(PageInfo pageInfo, StoreApply.ApplyStatus status, StoreType type, String keyword);
 
+	/**
+	 * 分页获取待审核店铺信息
+	 *  @param pageInfo    	分页信息
+	 * @param status    	查询的店铺申请状态
+	 * @param type			店铺类型
+	 * @param keyword		搜索关键字
+	 */
+	Page<StoreApply> pageStoreApplicationsByAuthor(PageInfo pageInfo, StoreApply.ApplyStatus status, StoreType type, String keyword);
+
 	/**
 	 * 获取当前店铺的待处理和已通过申请信息,应当有且只有一条记录
 	 */

+ 23 - 0
src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreApplyServiceImpl.java

@@ -28,6 +28,7 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
@@ -239,6 +240,28 @@ public class StoreApplyServiceImpl implements StoreApplyService {
 		}, pageInfo);
 	}
 
+	public Page<StoreApply> pageStoreApplicationsByAuthor(final PageInfo pageInfo, StoreApply.ApplyStatus status, StoreType type, String keyword) {
+		if (status != null) {
+			SimpleExpression expression = new SimpleExpression("status", status, CriterionExpression.Operator.EQ);
+			pageInfo.expression(expression);
+		}
+		if (type != null) {
+			SimpleExpression expression = new SimpleExpression("type", type, CriterionExpression.Operator.EQ);
+			pageInfo.expression(expression);
+		}
+		if (StringUtils.hasText(keyword)) {
+			SimpleExpression expression = new SimpleExpression("authPerson", keyword, CriterionExpression.Operator.LIKE);
+			pageInfo.expression(expression);
+		}
+		return storeApplyDao.findAll(new Specification<StoreApply>() {
+			@Override
+			public Predicate toPredicate(Root<StoreApply> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				query.where(pageInfo.getPredicates(root, query, builder));
+				return null;
+			}
+		}, pageInfo);
+	}
+
 	@Override
 	public ResultMap findShopOwnerApplyByNormalStatus() {
 		User user = SystemSession.getUser();

+ 18 - 0
src/main/java/com/uas/platform/b2c/trade/order/StringConstant/StringFormat.java

@@ -0,0 +1,18 @@
+package com.uas.platform.b2c.trade.order.StringConstant;
+
+/**
+ * 描述的常量
+ *
+ * @author yuj 2018-07-11 11:26
+ */
+public class StringFormat {
+
+    /**
+     * 订单/admin#/trade/order/%s  买家已付款成功,请确认是否收款
+     */
+    public static final String CONFIRMPAID = "订单 %s  买家已付款成功,请确认是否收款";
+
+    public static final String APPLYPAID = "订单 %s 买家已确认收货,请尽快申请付款";
+
+    public static final String FINANCIAL_SETTLEMENT = "订单 %s 已交易成功,请尽快和卖家申请付款";
+}

+ 28 - 0
src/main/java/com/uas/platform/b2c/trade/order/dao/MessageNotifyPersonalManagementDao.java

@@ -0,0 +1,28 @@
+package com.uas.platform.b2c.trade.order.dao;
+
+import com.uas.platform.b2c.trade.order.model.MessageNotifyPersonalManagement;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 消息设置管理
+ *
+ * @author yuj 2018-07-11 12:14
+ */
+@Repository
+public interface MessageNotifyPersonalManagementDao extends JpaRepository<MessageNotifyPersonalManagement, Long>, JpaSpecificationExecutor<MessageNotifyPersonalManagement> {
+
+    /**
+     * 根据企业的enuu和类型,获取信息
+     * @param enuu 企业enuu
+     * @param type 消息类型
+     * @return MessageNotifyPersonalManagement
+     */
+    @Query(value = "select m from MessageNotifyPersonalManagement m where m.notifyPersonalEnuu = :enuu and m.type= :type")
+    List<MessageNotifyPersonalManagement> findNotifyPersonalEnuuAndType(@Param("enuu") Long enuu, @Param("type") String type);
+}

+ 118 - 0
src/main/java/com/uas/platform/b2c/trade/order/model/MessageNotifyPersonalManagement.java

@@ -0,0 +1,118 @@
+package com.uas.platform.b2c.trade.order.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 消息通知人员信息管理
+ *
+ * @author yuj 2018-07-11 12:03
+ */
+@Entity
+@Table(name = "message$npm")
+public class MessageNotifyPersonalManagement implements Serializable {
+
+    @Id
+    @Column(name = "mnpm_id")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    /**
+     * 通知人员uu号管理,如果是多人,用中划线隔开
+     */
+    @Column(name = "mnpm_notify_personal_useruu")
+    private Long notifyPersonalUseruu;
+
+    /**
+     * 通知人员名称管理
+     */
+    @Column(name = "mnpm_notify_personal_username", length = 50)
+    private String notifyPersonalUserName;
+
+    /**
+     * 通知人所属企业ENUU
+     */
+    @Column(name = "mnpm_notify_personal_enuu")
+    private Long notifyPersonalEnuu;
+
+    /**
+     * 通知人所属企业名称
+     */
+    @Column(name = "mnpm_notify_personal_enterprisename")
+    private String notifyPersonalEnterpriseName;
+
+    /**
+     * 消息类型
+     */
+    @Column(name = "mnpm_type")
+    private String type;
+
+    /**
+     * 消息备注
+     */
+    @Column(name = "mnpm_remark")
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public MessageNotifyPersonalManagement setId(Long id) {
+        this.id = id;
+        return this;
+    }
+
+    public Long getNotifyPersonalUseruu() {
+        return notifyPersonalUseruu;
+    }
+
+    public MessageNotifyPersonalManagement setNotifyPersonalUseruu(Long notifyPersonalUseruu) {
+        this.notifyPersonalUseruu = notifyPersonalUseruu;
+        return this;
+    }
+
+    public String getNotifyPersonalUserName() {
+        return notifyPersonalUserName;
+    }
+
+    public MessageNotifyPersonalManagement setNotifyPersonalUserName(String notifyPersonalUserName) {
+        this.notifyPersonalUserName = notifyPersonalUserName;
+        return this;
+    }
+
+    public Long getNotifyPersonalEnuu() {
+        return notifyPersonalEnuu;
+    }
+
+    public MessageNotifyPersonalManagement setNotifyPersonalEnuu(Long notifyPersonalEnuu) {
+        this.notifyPersonalEnuu = notifyPersonalEnuu;
+        return this;
+    }
+
+    public String getNotifyPersonalEnterpriseName() {
+        return notifyPersonalEnterpriseName;
+    }
+
+    public MessageNotifyPersonalManagement setNotifyPersonalEnterpriseName(String notifyPersonalEnterpriseName) {
+        this.notifyPersonalEnterpriseName = notifyPersonalEnterpriseName;
+        return this;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public MessageNotifyPersonalManagement setType(String type) {
+        this.type = type;
+        return this;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public MessageNotifyPersonalManagement setRemark(String remark) {
+        this.remark = remark;
+        return this;
+    }
+}

+ 26 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/MessageNotifyPersonalManagementService.java

@@ -0,0 +1,26 @@
+package com.uas.platform.b2c.trade.order.service;
+
+import com.uas.platform.b2c.trade.order.model.MessageNotifyPersonalManagement;
+
+import java.util.List;
+
+/**
+ * 消息通知服务的管理
+ * Created by yujia on 2018/7/11.
+ */
+public interface MessageNotifyPersonalManagementService {
+
+    /**
+     * 根据enuu和类型获取消息类型
+     * @param enuu 企业enuu
+     * @param type 类型
+     * @return List<MessageNotifyPersonalManagement>
+     */
+    List<MessageNotifyPersonalManagement> findNotifyPersonalEnuuAndType(Long enuu, String type);
+
+    /**
+     * 删除信息
+     * @param list
+     */
+    void deleteMessageNotifyPersonalManagementByList(List<MessageNotifyPersonalManagement> list);
+}

+ 7 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java

@@ -664,4 +664,11 @@ public interface OrderService {
 	 * @return
 	 */
 	ResultMap checkConsignment(List<String> uuidArray);
+
+	/**
+	 * 用户确认付款,通知管理后台确认收矿
+	 * @param order 确认付款的订单
+	 * @return
+	 */
+	void sendConfirmPaidMessage(Order order);
 }

+ 56 - 0
src/main/java/com/uas/platform/b2c/trade/order/service/impl/MessageNotifyPersonalManagementServiceImpl.java

@@ -0,0 +1,56 @@
+package com.uas.platform.b2c.trade.order.service.impl;
+
+import com.uas.platform.b2c.trade.order.dao.MessageNotifyPersonalManagementDao;
+import com.uas.platform.b2c.trade.order.model.MessageNotifyPersonalManagement;
+import com.uas.platform.b2c.trade.order.service.MessageNotifyPersonalManagementService;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * description
+ *
+ * @author yuj 2018-07-11 14:29
+ */
+@Service
+public class MessageNotifyPersonalManagementServiceImpl implements MessageNotifyPersonalManagementService {
+
+    private final MessageNotifyPersonalManagementDao messageNotifyPersonalManagementDao;
+
+    @Autowired
+    public MessageNotifyPersonalManagementServiceImpl(MessageNotifyPersonalManagementDao messageNotifyPersonalManagementDao) {
+        this.messageNotifyPersonalManagementDao = messageNotifyPersonalManagementDao;
+    }
+
+    /**
+     * 根据enuu和类型获取消息类型
+     *
+     * @param enuu 企业enuu
+     * @param type 类型
+     * @return List<MessageNotifyPersonalManagement>
+     */
+    @Override
+    public List<MessageNotifyPersonalManagement> findNotifyPersonalEnuuAndType(Long enuu, String type) {
+        if (enuu == null || StringUtils.isEmpty(type)) {
+            return Collections.emptyList();
+        } else {
+            return messageNotifyPersonalManagementDao.findNotifyPersonalEnuuAndType(enuu, type);
+        }
+    }
+
+    /**
+     * 删除信息
+     *
+     * @param list
+     */
+    @Override
+    public void deleteMessageNotifyPersonalManagementByList(List<MessageNotifyPersonalManagement> list) {
+        if (CollectionUtils.isNotEmpty(list)) {
+            messageNotifyPersonalManagementDao.delete(list);
+        }
+    }
+}

+ 4 - 6
src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderDetailServiceImpl.java

@@ -18,10 +18,7 @@ import com.uas.platform.b2c.trade.order.StringConstant.Currency;
 import com.uas.platform.b2c.trade.order.dao.OrderDao;
 import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDetailDao;
-import com.uas.platform.b2c.trade.order.model.Order;
-import com.uas.platform.b2c.trade.order.model.OrderDetail;
-import com.uas.platform.b2c.trade.order.model.Purchase;
-import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
+import com.uas.platform.b2c.trade.order.model.*;
 import com.uas.platform.b2c.trade.order.service.OrderDetailService;
 import com.uas.platform.b2c.trade.order.service.OrderService;
 import com.uas.platform.b2c.trade.order.type.ResultMapType;
@@ -84,7 +81,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
 	@Autowired
 	private GoodsHistoryDao goodsHistoryDao;
 
-	@Override
+    @Override
 	public OrderDetail save(OrderDetail orderDetail) {
 		return orderDetailDao.save(orderDetail);
 	}
@@ -421,7 +418,8 @@ public class OrderDetailServiceImpl implements OrderDetailService {
 					orderService.setToBeShipped(order.getOrderid());
 				} else if (isPaid) {
 					order.setStatusPaid(userUU);
-				} else {
+                    orderService.sendConfirmPaidMessage(order);
+                } else {
 					order.setStatusToBePaid(userUU);
 				}
 			}

+ 44 - 9
src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java

@@ -10,6 +10,11 @@ import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.TradeLog;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.base.service.SendMessageService;
+import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.common.message.type.ConsumerApp;
+import com.uas.platform.b2c.common.message.type.ConsumerType;
+import com.uas.platform.b2c.common.message.type.SMSType;
+import com.uas.platform.b2c.common.psmessage.service.MessageService;
 import com.uas.platform.b2c.common.search.rpc.service.OrderSearchService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.constant.SplitChar;
@@ -55,11 +60,13 @@ import com.uas.platform.b2c.trade.deprecated.model.OrderRelationInfo;
 import com.uas.platform.b2c.trade.deprecated.model.UserInfoForOrder;
 import com.uas.platform.b2c.trade.inquiry.dao.TradeChargeDao;
 import com.uas.platform.b2c.trade.inquiry.model.TradeCharge;
+import com.uas.platform.b2c.trade.order.StringConstant.StringFormat;
 import com.uas.platform.b2c.trade.order.dao.OrderDao;
 import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.order.dao.OrderIndexDetailDao;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
 import com.uas.platform.b2c.trade.order.model.*;
+import com.uas.platform.b2c.trade.order.service.MessageNotifyPersonalManagementService;
 import com.uas.platform.b2c.trade.order.service.OrderDetailService;
 import com.uas.platform.b2c.trade.order.service.OrderService;
 import com.uas.platform.b2c.trade.order.service.PurchaseService;
@@ -201,6 +208,13 @@ public class OrderServiceImpl implements OrderService {
     @Autowired
     private SeekPurchaseService seekPurchaseService;
 
+
+    @Autowired
+    private MessageService messageService;
+
+    @Autowired
+    private MessageNotifyPersonalManagementService messageNotifyPersonalManagementService;
+
     /**
      * 保存订单信息
      *
@@ -737,10 +751,6 @@ public class OrderServiceImpl implements OrderService {
         //获取适用配送规则列表
         String jsonRule = object.getString("ruleList");
         JSONObject ruleObject = FastjsonUtils.fromJson(jsonRule, JSONObject.class);
-        //获取自提点信息
-        String jsonTake = object.getString("takeList");
-        JSONObject takeObject = FastjsonUtils.fromJson(jsonTake, JSONObject.class);
-
         for (OrderDetail detail : order.getOrderDetails()) {
             List<OrderDetail> orderDetails = listMap.get(detail.getStoreid());
             if (orderDetails == null) {
@@ -789,12 +799,7 @@ public class OrderServiceImpl implements OrderService {
              *  加入运费
              */
             JSONObject rule = ruleObject.getJSONObject(storeid);
-            JSONObject take = takeObject.getJSONObject(storeid);
-            System.out.println(rule);
             or.setJsonRule(FastjsonUtils.toJson(rule));
-            if(take != null){
-                or.setJsonTakeSelf(FastjsonUtils.toJson(take));
-            }
 
             or.setDeliverytype(Integer.parseInt(rule.getString("method")));
             or.setFare(Double.parseDouble(rule.getString("fare")));
@@ -3436,4 +3441,34 @@ public class OrderServiceImpl implements OrderService {
         }
         return ResultMap.success(bool);
     }
+
+    /**
+     * 用户确认付款,通知管理后台确认收款
+     *
+     * @param order 确认付款的订单
+     * @return
+     */
+    @Override
+    public void sendConfirmPaidMessage(Order order) {
+        if (order == null || StringUtils.isEmpty(order.getOrderid())) {
+            return ;
+        }
+        List<MessageNotifyPersonalManagement> notifyPersonalManagements = messageNotifyPersonalManagementService.findNotifyPersonalEnuuAndType(sysConf.getEnUU(), com.uas.platform.b2c.trade.order.type.MessageType.CONFIRM_PAID.getType());
+        if (org.apache.commons.collections.CollectionUtils.isNotEmpty(notifyPersonalManagements)) {
+            ArrayList<MessageModel> list = new ArrayList<>();
+            for (MessageNotifyPersonalManagement management : notifyPersonalManagements) {
+                Long notifyPersonalUseruu = management.getNotifyPersonalUseruu();
+                if (notifyPersonalUseruu != null) {
+                    MessageModel model = messageService.initMessage(String.format(StringFormat.CONFIRMPAID, order.getOrderid()), com.uas.platform.b2c.trade.order.type.MessageType.CONFIRM_PAID.getType(), notifyPersonalUseruu, sysConf.getEnUU(), ConsumerType.SINGLE, ConsumerApp.MALL, SMSType.DONT_SEND, "");
+                    if (model != null) {
+                        list.add(model);
+                    }
+                }
+            }
+
+            if (org.apache.commons.collections.CollectionUtils.isNotEmpty(list)) {
+                messageService.sendMessage(list);
+            }
+        }
+    }
 }

+ 9 - 3
src/main/java/com/uas/platform/b2c/trade/order/service/impl/PurchaseServiceImpl.java

@@ -417,9 +417,15 @@ public class PurchaseServiceImpl implements PurchaseService {
 			purchase.setSendType(Type.Delivery_ByUU_Code.value());//寄售类型统一为第三方配送
 		}else {
 			if(orderFromCust.getBuyerentername() == null) {
-				Enterprise enterprise = enterpriseDao.findByUu(orderFromCust.getBuyerenuu());
-				if(enterprise != null) {
-					purchase.setBuyentername(enterprise.getEnName());
+				if (orderFromCust.getBuyerenuu() != null) {
+					Enterprise enterprise = enterpriseDao.findByUu(orderFromCust.getBuyerenuu());
+					if(enterprise != null) {
+						purchase.setBuyentername(enterprise.getEnName());
+					}
+				}
+
+				if(purchase.getBuyername() == null) {
+					purchase.setBuyentername(orderFromCust.getBuyername());
 				}
 			} else {
 				purchase.setBuyentername(orderFromCust.getBuyerentername());

+ 30 - 0
src/main/java/com/uas/platform/b2c/trade/order/type/MessageType.java

@@ -0,0 +1,30 @@
+package com.uas.platform.b2c.trade.order.type;
+
+/**
+ * 消息类型
+ *
+ * @author yuj 2018-07-11 11:52
+ */
+public enum MessageType {
+
+    CONFIRM_PAID("CONFIRM_PAID_TYPE", "确认收款"),
+    APPLY_PAID("APPLY_PAID_TYPE", "付款申请"),
+    FINANCIAL_SETTLEMENT("FINANCIAL_SETTLEMENT_TYPE", "财务结算");
+
+    private final String type;
+
+    private final String phrase;
+
+    MessageType(String type, String phrase) {
+        this.type = type;
+        this.phrase = phrase;
+    }
+
+    public java.lang.String getType() {
+        return type;
+    }
+
+    public java.lang.String getPhrase() {
+        return phrase;
+    }
+}

+ 1 - 1
src/main/resources/spring/context.xml

@@ -113,7 +113,7 @@
 	<bean id="entityManagerFactory"
 		  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
 		<property name="persistenceUnitName" value="persistenceUnit" />
-		<property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"/>
+		<!--<property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"/>-->
 		<property name="packagesToScan" value="com.uas.platform" />
 		<property name="dataSource" ref="dataSource" />
 		<property name="jpaVendorAdapter">

+ 5 - 0
src/main/resources/spring/task.xml

@@ -28,4 +28,9 @@
         <task:scheduled ref="CommonTask" method="updateCount" cron="0 0 1 * * ?"/>
     </task:scheduled-tasks>
     <context:annotation-config />
+
+    <!--超时自动确认收货-->
+    <task:scheduled-tasks>
+        <task:scheduled ref="MessageTask" method="sendMessage" cron="0 0/1 * * * ?"/>
+    </task:scheduled-tasks>
 </beans>

+ 28 - 25
src/main/webapp/WEB-INF/views/normal/adminWithNav.html

@@ -52,6 +52,32 @@
 			<li class="nav-node"><a href="#trade/record_chart"><i
 					class="fa fa-th"></i><span> 交易记录表</span></a></li>
 
+			<li class="nav-header">财务结算中心</li>
+			<li class="nav-node"><a href="#check/check_vender"><i
+					class="fa fa-user"></i><span> 付款申请</span></a></li>
+			<li class="nav-node"><a href="#check/settlement"><i
+					class="fa fa-calculator"></i><span> 财务结算</span></a></li>
+			<li class="nav-node"><a href="#check/histTransfer"><i
+					class="fa fa-filter"></i><span> 历史转账查询</span></a></li>
+			<li class="nav-node"><a href="#check/accountQuery"><i
+					class="fa fa-fire"></i><span> 账户查询</span></a></li>
+			<li class="nav-node"><a href="#check/refund"><i
+					class="fa fa-fire"></i><span> 退款单管理</span></a></li>
+			<li class="nav-node"><a href="#order/bill/admin"><i
+					class="fa fa-fire"></i><span> 客户订单发票管理</span></a></li>
+			<li class="nav-node"><a href="#purchase/bill/admin"><i
+					class="fa fa-fire"></i><span> 平台采购单发票管理</span></a></li>
+			<li class="nav-node"><a href="#check/credit"><i
+					class="fa fa-fire"></i><span> 银行账户信息管理</span></a></li>
+			<li class="nav-node"><a href="#billInfo/admin"><i
+					class="fa fa-fire"></i><span> 平台发票信息管理</span></a></li>
+			<li class="nav-node"><a href="#pay/available"><i
+					class="fa fa-fire"></i><span> 买家付款有效时间</span></a></li>
+			<li class="nav-node"><a href="#pay/exchangerate"><i
+					class="fa fa-fire"></i><span> 汇率设置</span></a></li>
+			<li class="nav-node"><a href="#fa/loanApply"><i
+					class="fa fa-fire"></i><span> 贷款申请列表</span></a></li>
+
 			<li class="nav-header">售后服务管理</li>
 			<li class="nav-node"><a href="#trade/buyerExProcess"><i
 					class="fa fa-home"></i><span> 买家异常处理</span></a></li>
@@ -106,31 +132,6 @@
 			<li class="nav-node"><a href="#buyer/automaticReceiving"><i
 					class="fa fa-fire"></i><span>买家自动收货的时间</span></a></li>
 
-			<li class="nav-header">财务结算中心</li>
-			<li class="nav-node"><a href="#check/check_vender"><i
-					class="fa fa-user"></i><span> 付款申请</span></a></li>
-			<li class="nav-node"><a href="#check/settlement"><i
-					class="fa fa-calculator"></i><span> 财务结算</span></a></li>
-			<li class="nav-node"><a href="#check/histTransfer"><i
-					class="fa fa-filter"></i><span> 历史转账查询</span></a></li>
-			<li class="nav-node"><a href="#check/accountQuery"><i
-					class="fa fa-fire"></i><span> 账户查询</span></a></li>
-			<li class="nav-node"><a href="#check/refund"><i
-					class="fa fa-fire"></i><span> 退款单管理</span></a></li>
-			<li class="nav-node"><a href="#order/bill/admin"><i
-					class="fa fa-fire"></i><span> 客户订单发票管理</span></a></li>
-			<li class="nav-node"><a href="#purchase/bill/admin"><i
-					class="fa fa-fire"></i><span> 平台采购单发票管理</span></a></li>
-			<li class="nav-node"><a href="#check/credit"><i
-					class="fa fa-fire"></i><span> 银行账户信息管理</span></a></li>
-			<li class="nav-node"><a href="#billInfo/admin"><i
-					class="fa fa-fire"></i><span> 平台发票信息管理</span></a></li>
-			<li class="nav-node"><a href="#pay/available"><i
-					class="fa fa-fire"></i><span> 买家付款有效时间</span></a></li>
-			<li class="nav-node"><a href="#pay/exchangerate"><i
-					class="fa fa-fire"></i><span> 汇率设置</span></a></li>
-			<li class="nav-node"><a href="#fa/loanApply"><i
-					class="fa fa-fire"></i><span> 贷款申请列表</span></a></li>
 
 			<li class="nav-header">审批</li>
 			<li class="nav-node"><a href="#audit/brand"><i
@@ -246,6 +247,8 @@
 				<li><a class="muted">基础</a></li>
 				<li><a>快照</a></li>
 			</ul>
+			<!--消息-->
+			<div ng-include src="'static/view/admin/news.html'"></div>
 			<div ui-view></div>
 		</div>
 	</div>

+ 1 - 1
src/main/webapp/resources/css/admin.css

@@ -57,8 +57,8 @@ select {
 
 .main-container {
 	min-width: 720px;
+	overflow: hidden;
 }
-
 .top-block {
 	font-size: 14px;
 	font-family: "Microsoft YaHei";

+ 7 - 1
src/main/webapp/resources/css/common.css

@@ -1066,7 +1066,7 @@ select {
 }
 .oder_xq_list dl span.total-price p em{
 	color: #333;
-	width: 150px;
+	width: 219px;
 	text-align: left;
 }
 .oder_xq_list dl span.total-price strong{
@@ -1131,4 +1131,10 @@ select {
 }
 .oder_xq_list dl span.total-price em{
 	float: left;
+}
+
+.text-ellipse {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
 }

+ 1 - 0
src/main/webapp/resources/css/common/linkSaler.css

@@ -14,6 +14,7 @@
 .link-saler-box .content p {
     line-height: 20px;
     padding-top: 0;
+    color: #333;
 }
 .link-saler-box .content p i {
     color: #4290f7;

+ 108 - 6
src/main/webapp/resources/js/admin/app.js

@@ -1,4 +1,4 @@
- define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/commodity', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage','common/query/user','common/query/secQuestion','common/query/keyWord','common/query/logUsage','common/query/seekQualityBuyer','common/query/loanApply', 'common/query/supplier', 'common/query/seekSalesman', 'common/query/b2bManage'], function(angularAMD) {
+ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ui-form', 'ngLocal', 'ngTable', 'ngSanitize', 'ngDraggable', 'common/services', 'common/directives', 'common/query/brand', 'common/query/address', 'common/query/return' , 'common/query/change' ,'common/query/component', 'common/query/order', 'common/query/purchase', 'common/query/invoice', 'common/query/property', 'common/query/kind', 'common/query/property', 'common/query/commodity', 'common/query/receipt', 'common/query/logistics' ,'angular-toaster', 'ui-jquery', 'jquery-uploadify','common/query/dateParse' , 'common/query/bankTransfer' ,'common/query/bankInfo', 'common/query/urlencryption', 'common/query/bill', 'common/query/makerDemand', 'common/query/goods', 'common/query/validtime', 'file-upload','file-upload-shim', 'common/query/slideImage', 'common/query/kindAdvice', 'common/query/responseLogistics', 'common/query/search','common/directives/dynamicInput', 'common/query/auditorMail', 'common/query/tradeBasicProperties', 'common/query/exchangeRate', 'common/query/tradeDeliveryDelayTime', 'common/query/payment', 'common/query/kindContrast', 'common/query/crawlTask', 'common/query/afterSale', 'common/query/refund', 'common/query/messageBoard', 'common/query/logisticsPort', 'common/query/storeInfo', 'common/query/cms', 'common/query/help', 'common/query/commonCount', 'common/module/store_admin_violations_module', 'common/query/internalMessage','common/query/user','common/query/secQuestion','common/query/keyWord','common/query/logUsage','common/query/seekQualityBuyer','common/query/loanApply', 'common/query/supplier', 'common/query/seekSalesman', 'common/query/b2bManage', 'common/query/adminNews'], function(angularAMD) {
 	'use strict';
 
 	 /**
@@ -8,7 +8,7 @@
 		 return this.length > 0 ? this[this.length - 1] : null;
 	 };
 
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery', 'commodityServices', 'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices','common.query.user','secQuestionServices','keyWordServices','logUsageServices','seekQualityBuyerServices', 'loanApplyService', 'supplierServices', 'seekSalesmanServices', 'b2bManageService']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ui.form', 'ng.local', 'ngTable', 'ngSanitize', 'ngDraggable', 'common.services', 'common.directives', 'brandServices', 'addressServices', 'returnServices', 'changeServices', 'componentServices', 'orderServices', 'purchaseServices', 'invoiceServices', 'propertyServices', 'receiptServices', 'logisticsServices', 'common.query.kind', 'toaster','ui.jquery', 'commodityServices', 'dateparseServices', 'bankInfo' , 'bankTransfer', 'urlencryptionServices', 'billServices', 'makerDemand', 'goodsServices', 'validtimeServices', 'angularFileUpload', 'slideImageService', 'common.query.kindAdvice', 'responseLogisticsService', 'searchService', 'ngDynamicInput', 'ReviewerEmailInfoService', 'tradeBasicPropertiesServices', 'exchangeRateModule', 'tradeDeliveryDelayTimeModule', 'PaymentService', 'kindContrastServices', 'crawlTaskServices', 'afterSaleService', 'refundModule', 'messageBoardServices', 'logisticsPortService', 'storeInfoServices', 'cmsService', 'helpServices', 'commonCountServices', 'tool.directives', 'StoreAdminViolationsModule', 'internalMessageServices','common.query.user','secQuestionServices','keyWordServices','logUsageServices','seekQualityBuyerServices', 'loanApplyService', 'supplierServices', 'seekSalesmanServices', 'b2bManageService','adminNewsService']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -16,13 +16,13 @@
 	// ui-router 路由配置
 	app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', function($stateProvider, $urlRouterProvider, $httpProvider){
 		$urlRouterProvider.otherwise("/index");
-		$stateProvider.state('index', {
+		$stateProvider.state('index', angularAMD.route({
 			// 管理首页
 			url: '/index',
 			templateUrl : 'static/view/admin/index.html',
 			controller : '',
 			controllerUrl : ''
-		}).state('trade_purchase', angularAMD.route({
+		})).state('trade_purchase', angularAMD.route({
 			// 采购单管理
 			url: '/trade/purchase',
 			templateUrl : 'static/view/admin/trade/trade_purchase.html',
@@ -850,10 +850,26 @@
 		}]);
 	}]);
 
-	 app.run(['$rootScope', 'BaseService', function($rootScope, BaseService) {
+	app.run(['$rootScope', 'BaseService', '$location',  function($rootScope, BaseService, $location) {
 		 $rootScope.rootPath = BaseService.getRootPath();
 		 $rootScope.page = 'vendor';// 导航栏状态,'个人中心'状态激活
-	 }]);
+         $rootScope.$on('$stateChangeSuccess', function(evt, current, previous) {
+             var _url = $location.absUrl().toString()
+             if (_url.indexOf('/admin#/index') > -1) {
+                 $rootScope.newShow = true
+             } else {
+                 $rootScope.newShow = false
+			 }
+			 // window.onmouseup = function() {
+              //    var _url = $location.absUrl().toString()
+              //    if (_url.indexOf('/admin#/index') > -1) {
+              //        $rootScope.newShow = true
+              //    } else {
+              //        $rootScope.newShow = false
+              //    }
+			 // }
+         });
+     }]);
 	
 	// 状态码  -> 描述
 	app.filter('status', function(){
@@ -951,6 +967,92 @@
 	    });
 	}]);
 
+	// 消息
+     app.controller('adminNewsCtrl', ['$rootScope', '$location', '$scope', 'ngTableParams', 'adminNews', 'toaster', 'BaseService', '$filter', function ($rootScope, $location, $scope, ngTableParams, adminNews, toaster, BaseService, $filter) {
+         /**
+          * 分页获取消息
+          */
+         var _url = $location.absUrl().toString()
+         if (_url.indexOf('/admin#/index') > -1) {
+             $rootScope.newShow = true
+         }
+
+         $scope.newsTableParams = new ngTableParams({
+             page : 1,
+             count : 5
+         }, {
+             total : 0,
+             getData : function ($defer, params) {
+                 var param = BaseService.parseParams(params.url());
+                 param.keyword = $scope.keyword;
+                 adminNews.getNewsList(param, function (data) {
+                     params.total(data.totalElements);
+                     $defer.resolve(data.content);
+                     $scope.totalElements = data.totalElements
+                     data.content.forEach(function (item) {
+                     	if (item.type == "APPLY_PAID_TYPE" || item.type == "CONFIRM_PAID_TYPE" || item.type == "FINANCIAL_SETTLEMENT_TYPE"){
+							var _arr = item.content.split(' ')[1];
+							item.OrderNumber = _arr
+						}
+                         if (item.type == "APPLY_PAID_TYPE") {
+                             item.newsType = '付款申请'
+                         }
+                         if (item.type == "CONFIRM_PAID_TYPE") {
+                             item.newsType = '确认收款'
+                         }
+                         if (item.type == "FINANCIAL_SETTLEMENT_TYPE") {
+                             item.newsType = '财务结算'
+                         }
+					 })
+                 }, function (response) {
+                     toaster.pop('error', '获取消息列表失败');
+                 });
+             }
+         });
+
+         // /**
+         //  * 获取未读消息数量
+         //  */
+         // adminNews.unreadCount({}, function(data){
+         //     $scope.unreadCount = data.count;
+         // }, function(res){
+         //     toaster.pop('error', '系统错误', '获取未读消息数量失败' + res.data);
+         // });
+
+         /**
+          * 跳转消息详情页
+          */
+         var enIdFilter = $filter('EncryptionFilter');
+         $scope.jumpNewsDetail = function(data) {
+             if (data.type == "APPLY_PAID_TYPE") {
+         		window.location.href = 'admin#/check/request_pay/' + data.remark
+			 }
+             if (data.type == "CONFIRM_PAID_TYPE") {
+                 window.location.href = '/admin#/trade/order/' + enIdFilter(data.OrderNumber)
+             }
+             if (data.type == "FINANCIAL_SETTLEMENT_TYPE") {
+                 window.location.href = 'admin#/check/settlement'
+             }
+             adminNews.read({messageId: data.id, type: data.type}, null, function () {
+                 // adminNews.unreadCount({}, function(data){
+                 //     $scope.unreadCount = data.count;
+                 // }, function(res){
+                 //     toaster.pop('error', '系统错误', '获取未读消息数量失败' + res.data);
+                 // });
+             }, function(res){
+                 toaster.pop('error' + res.data);
+             });
+         }
+
+         /**
+          * 点击
+          */
+         // $scope.newShow = false
+         $rootScope.lookNews = function() {
+             $rootScope.newShow = !$rootScope.newShow
+         }
+     }]);
+
      //币别的过滤器
      app.filter('currencySysmbol', function() {
          return function(moneyParam, currency, add) {

+ 32 - 0
src/main/webapp/resources/js/admin/controllers/StoreApplicationCtrl.js

@@ -46,6 +46,14 @@ define([ 'app/app' ], function(app) {
 		// 保存查询店铺类型的状态
 		$scope.type = 'ALL_TYPE';
 
+		// 保存店铺搜索类型
+		$scope.search = 'STORE_NAME';
+
+		// 保存店铺搜索类型所传参数
+        $scope.searchParams = 'authPage';
+
+        $scope.showSearch = false
+
 		/**
 		 * 切换Tab
 		 *
@@ -66,6 +74,29 @@ define([ 'app/app' ], function(app) {
 		};
 
 
+        $scope.isShowSearch = function (flag) {
+            $scope.showSearch = flag
+		};
+        /**
+         * 切换搜索类型
+         *
+         * @param type	店铺类型
+		 *
+         */
+        $scope.placeValue = $scope.search === 'STORE_NAME' ? '请输入公司名称' : '请输入审核人姓名';
+
+        $scope.switchSearch = function (type, flag) {
+			if (type === 'STORE_NAME') {
+                $scope.search = 'STORE_NAME';
+                $scope.searchParams = 'authPage';
+			}
+            if (type === 'AUDITOR') {
+                $scope.search = 'AUDITOR';
+                $scope.searchParams = 'authorPage';
+            }
+            $scope.showSearch = flag
+            $scope.placeValue = $scope.search === 'STORE_NAME' ? '请输入公司名称' : '请输入审核人姓名';
+        };
 
 		$scope.applicationTableParams = new ngTableParams($scope.ngPageInfo, {
 			total : 0,
@@ -76,6 +107,7 @@ define([ 'app/app' ], function(app) {
 				param.status = $scope.status === 'ALL' ? null : $scope.status;
 				param.type = $scope.type === 'ALL_TYPE' ? null : $scope.type;
 				param.keyword = $scope.keyword && $scope.keyword !== '' ? $scope.keyword : null;
+				param.operate = $scope.searchParams;
 				StoreInfo.pageStoreApplications(param, function (data) {
 					console.log(data);
 					params.total(data.totalElements);

+ 40 - 1
src/main/webapp/resources/js/admin/controllers/trade/TradeOrderDetailCtrl.js

@@ -21,7 +21,7 @@ define([ 'app/app' ], function(app) {
 				if(lgtid){
 					getLogistics();
 				}
-				
+
 				//控制流程状态样式
 				var scheduleStyle = function(){ 
 					var statusAttr =['501', '503', '504', '406', '403', '407', '408', '404', '405'];
@@ -182,5 +182,44 @@ define([ 'app/app' ], function(app) {
 			};
 		};
 		loadData();
+        //确认付款
+        $scope.ensurePay = function(order){
+            Order.ensurePay({orderid: order.orderid}, {}, function(data){
+                toaster.pop('success', '处理成功', '【' + data.orderid + '】' + '确认付款');
+                loadData()
+            }, function(response){
+                toaster.pop('error', '确认付款失败', response.data);
+            })
+        };
+
+        /**
+         * 当用户点击审核不通过时,弹出模态框
+         * @param order
+         */
+        $scope.showAuditFailureModal = function (order) {
+            order.dislayModal = true;
+        }
+
+        /**
+         * 订单审核不通过
+         */
+        $scope.auditFailure = function (order) {
+            if(!order.auditFailureReason) {
+                toaster.pop('info', '请输入审核不通过的原因');
+                return ;
+            }
+            Order.auditFailure({orderId :order.orderid},{reason : order.auditFailureReason}, function (data) {
+                if(data.code != 1) {
+                    toaster.pop('info', '保存失败:' + data.message);
+                }else {
+                    toaster.pop('info', '保存成功');
+                    order.dislayModal = false;
+                    window.location.reload();
+                }
+            }, function (res) {
+                console.log(res);
+                toaster.pop('error', '系统出现错误,');
+            });
+        }
 	}]);
 });

+ 30 - 0
src/main/webapp/resources/js/common/query/adminNews.js

@@ -0,0 +1,30 @@
+define([ 'ngResource' ], function() {
+    angular.module('adminNewsService', [ 'ngResource' ]).factory('adminNews', ['$resource', 'BaseService', function($resource, BaseService) {
+        var rootPath = BaseService.getRootPath();
+        return $resource('webMessage', {}, {
+            /**
+             * 分页获取消息
+             */
+            getNewsList: {
+                url: rootPath + '/webMessage/page',
+                method:'GET'
+            },
+
+            /**
+             * 获取未读消息数量
+             */
+            unreadCount: {
+                url: rootPath + '/webMessage/count/unread',
+                method:'GET'
+            },
+
+            /**
+             * 跳转消息详情页
+             */
+            read: {
+                url: rootPath + '/webMessage/read',
+                method:'POST'
+            }
+        });
+    }])
+});

+ 2 - 5
src/main/webapp/resources/js/common/query/storeInfo.js

@@ -55,14 +55,11 @@ define([ 'ngResource' ], function() {
 			 * @param params		分页参数
 			 * @param status		店铺审核状态
 			 * @param type			店铺类型
-			 * @param keyword		搜索关键字,主要是公司名称
+			 * @param keyword		搜索关键字,主要是公司名称  或 审核人
 			 */
 			pageStoreApplications: {
             	url: 'store-service/applications',
-				method: 'GET',
-				params: {
-            		operate: 'authPage'
-				}
+				method: 'GET'
 			},
 			/**
 			 * 保存店铺申请信息

+ 10 - 1
src/main/webapp/resources/js/usercenter/app.js

@@ -715,7 +715,6 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
      */
     app.controller('UserCenterHeaderCtrl', ['$scope', '$rootScope', 'BaseService', 'InternalMessage', '$http', 'toaster', function ($scope, $rootScope, BaseService, InternalMessage, $http, toaster) {
 		$scope.homeUrl = BaseService.getRootPath();
-        console.info($rootScope.userInfo);
         InternalMessage.getUrl({}, function(data) {
             var url = data.url;
             if (url == "http://218.17.158.219:24000/message") {
@@ -781,5 +780,15 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
 		}
 	});
 
+    // 查看发票信息
+    app.controller('invoiceInfoCtrl', ['$scope','$modalInstance', 'ChooseInvoice', 'source', function ($scope, $modalInstance, ChooseInvoice, source) {
+        $scope.chooseInvoice = ChooseInvoice
+        $scope.chooseInvoice.billInfo = angular.fromJson($scope.chooseInvoice.billInfo);
+        $scope.isUserCenter = source
+        $scope.closeInvoice = function () {
+            $modalInstance.close();
+        };
+    }]);
+
 	return app;
 });

+ 25 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_invoice_record_ctrl.js

@@ -1,6 +1,6 @@
 define([ 'app/app' ], function(app) {
     'use strict';
-    app.register.controller('buyerInvoiceRecordCtrl', ['$scope','$rootScope','$modal','BillSubmit','BaseService', 'toaster','ngTableParams', function ($scope, $rootScope, $modal, BillSubmit, BaseService, toaster, ngTableParams) {
+    app.register.controller('buyerInvoiceRecordCtrl', ['$scope','$rootScope','$modal','BillSubmit','BaseService', 'toaster','ngTableParams','$filter', function ($scope, $rootScope, $modal, BillSubmit, BaseService, toaster, ngTableParams, $filter) {
         $scope.tab = 'buyer_invoice-record';
         // 开票申请
         $scope.keyword = '';
@@ -74,5 +74,29 @@ define([ 'app/app' ], function(app) {
                 $scope.searchByKey();
             }
         }
+        // 加密订单的ID过滤器
+        var enIdFilter = $filter('EncryptionFilter');
+
+        /**
+         * 查看发票信息
+         */
+        $scope.lookInvoiceInfo = function(invoice) {
+            var modalInstance = $modal.open({
+                templateUrl : 'static/view/vendor/modal/invoice_look_modal.html',
+                size : 'md',
+                controller : 'invoiceInfoCtrl',
+                resolve : {
+                    ChooseInvoice: function() {
+                        return invoice
+                    },
+                    source: function() {
+                        return true
+                    }
+                }
+            });
+            modalInstance.result.then(function(){
+            }, function(){
+            });
+        }
     }]);
 });

+ 4 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_no_invoice_ctrl.js

@@ -1,6 +1,6 @@
 define([ 'app/app' ], function(app) {
     'use strict';
-    app.register.controller('NoInvoiceCtrl', ['$scope','$rootScope','$modal', 'Order', 'toaster','ngTableParams','BaseService','Bill', function ($scope, $rootScope, $modal, Order, toaster, ngTableParams, BaseService, Bill) {
+    app.register.controller('NoInvoiceCtrl', ['$scope','$rootScope','$modal', 'Order', 'toaster','ngTableParams','BaseService','Bill','$filter', function ($scope, $rootScope, $modal, Order, toaster, ngTableParams, BaseService, Bill, $filter) {
         $scope.tab = 'buyer_no_invoice';
         document.title = '未开票订单-优软商城';
         // 开票申请
@@ -124,6 +124,9 @@ define([ 'app/app' ], function(app) {
             $scope.isAllCheck = temAllCheck;
         }
 
+        // 加密订单的ID过滤器
+        var enIdFilter = $filter('EncryptionFilter');
+
     }]);
     app.register.controller('NoInvoiceSubmitCtrl', ['$scope','$rootScope','$modal', 'Order', 'toaster', 'submitInvoice', '$modalInstance','invoiceData','BillSubmit','$state', function ($scope, $rootScope, $modal, Order, toaster, submitInvoice, $modalInstance, invoiceData, BillSubmit, $state) {
         //公司列表

+ 1 - 0
src/main/webapp/resources/js/usercenter/controllers/forstore/buyer_order_ctrl.js

@@ -167,6 +167,7 @@ define(['app/app'], function (app) {
 				}
                 $scope.isSearch = false;
 				$scope.currenctOrders = data.content;
+        $scope.currenctOrdersList = data
 				angular.forEach($scope.currenctOrders, function(data){
                     data.ensurePrice = Number(NumberService.toCeil(data.ensurePrice, 2));
 					Rate.getRateBuyer({orderId:data.orderid},{},function (result) {

+ 8 - 4
src/main/webapp/resources/js/usercenter/controllers/forstore/seek_purchase_ctrl.js

@@ -46,8 +46,8 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
               $scope.vendorType = 'all'
                 $scope.tab = tab;
               $scope.seekPurchaseTableParams = new ngTableParams({
-                pageNumber: 1,
-                pageSize: 10
+                page: 1,
+                count: 5
               }, {
                 total: 0,
                 getData: function ($defer, params) {
@@ -90,7 +90,7 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
                         //     }
                         // }
                       $scope.seekListData = data;
-
+                      console.log($scope.seekListData)
                     }).error(function (response) {
                       toaster.pop('error', response);
                     });
@@ -157,11 +157,14 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
           $scope.bomSearch = {};
           $scope.bomTableParams = new ngTableParams({
             pageNumber: 1,
-            pageSize: 20
+            pageSize: 10,
+            page: 1,
+            count: 10
           }, {
             total: 0,
             getData: function ($defer, params) {
                 var param = BaseService.parseParams(params.url());
+                param.pageNumber = param.page
               if ($scope.userInfo.enterprise) {
                 param.enUU = $scope.userInfo.enterprise.uu;
               } else {
@@ -182,6 +185,7 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
                 params.total(data.totalElements);
                 $scope.bomTotal = data.totalElements;
                 $defer.resolve(data.content);
+                $scope.bomDataList = data
               }).error(function (response) {
                 toaster.pop('error', response);
               });

+ 10 - 1
src/main/webapp/resources/js/vendor/app.js

@@ -1121,7 +1121,6 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
 	});
 
 	app.controller('editPictureCtrl', ['$scope', 'pic', '$modalInstance', function ($scope, pic, $modalInstance) {
-		console.log('log');
 		$scope.pic = pic;
 		$scope.cancel = function () {
 			$modalInstance.close();
@@ -1303,5 +1302,15 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
     }
 
   }]);
+
+  // 查看发票信息
+  app.controller('invoiceInfoCtrl', ['$scope','$modalInstance', 'ChooseInvoice', 'source', function ($scope, $modalInstance, ChooseInvoice, source) {
+  		$scope.chooseInvoice = ChooseInvoice
+      	$scope.chooseInvoice.billInfo = angular.fromJson($scope.chooseInvoice.billInfo);
+	  	$scope.isUserCenter = source
+		$scope.closeInvoice = function () {
+			$modalInstance.close();
+		};
+    }]);
 	return app;
 });

+ 1 - 0
src/main/webapp/resources/js/vendor/controllers/cusPurchaseCtrl.js

@@ -172,6 +172,7 @@ define(['app/app'], function(app) {
 							$scope.counts = {};
 						}
 						$scope.purchases = page.content;
+
 						getExMsgState(); // 获取异常消息状态
 						getReturnByPurchaseIds(); // 获取退货单信息
 

+ 1 - 0
src/main/webapp/resources/js/vendor/controllers/forstore/purchasAttendtion_ctrl.js

@@ -5,6 +5,7 @@ define(['app/app'], function (app) {
         function ($scope, $location, $rootScope, $stateParams, $state, toaster,
            $modal, $http, Attendtion, ngTableParams, BaseService, toaster) {
           document.title = '商机关注-优软商城';
+          $rootScope.active = 'vendor_seek_purchase';
           $scope.keyWord = ''
           $scope.isSearch = false
           $scope.type = 'yes'

+ 2 - 1
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_applylist_ctrl.js

@@ -1,8 +1,9 @@
 define([ 'app/app' ], function(app) {
     // 器件审批
-    app.register.controller('vendorComponentApplyListCtrl', ['$scope', 'ngTableParams', 'ComponentsSubmit', 'BaseService', '$stateParams', 'AuthenticationService', 'toaster', function($scope, ngTableParams, ComponentsSubmit, BaseService, $stateParams, AuthenticationService, toaster) {
+    app.register.controller('vendorComponentApplyListCtrl', ['$scope', 'ngTableParams', 'ComponentsSubmit', 'BaseService', '$stateParams', 'AuthenticationService', 'toaster', '$rootScope', function($scope, ngTableParams, ComponentsSubmit, BaseService, $stateParams, AuthenticationService, toaster, $rootScope) {
         BaseService.scrollBackToTop();
         document.title = '器件申请-优软商城';
+        $rootScope.active = 'vendor_component_apply'
         var loadMyComponentsSubmit = function(){
             $scope.componentTableParams = new ngTableParams({
                 page : 1,

+ 3 - 2
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_component_batchapplylist_ctrl.js

@@ -1,10 +1,10 @@
 define([ 'app/app' ], function(app) {
     // 器件审批
-    app.register.controller('vendorComponentBatchApplyListCtrl', ['$scope', 'ngTableParams', 'BaseService', 'ComponentSubmit', 'toaster', function($scope, ngTableParams, BaseService, ComponentSubmit, toaster) {
+    app.register.controller('vendorComponentBatchApplyListCtrl', ['$scope', 'ngTableParams', 'BaseService', 'ComponentSubmit', 'toaster', '$rootScope', function($scope, ngTableParams, BaseService, ComponentSubmit, toaster, $rootScope) {
         BaseService.scrollBackToTop();
         document.title = '器件申请-优软商城';
         $scope.active = 'all';
-
+        $rootScope.active = 'vendor_component_apply'
         $scope.setActive = function(result) {
             $scope.active = result;
             console.log($scope.active);
@@ -44,6 +44,7 @@ define([ 'app/app' ], function(app) {
                 ComponentSubmit[getStatus()].call(null, param, function(page) {
                     if (page) {
                         params.total(page.totalElements);
+                        $scope.allLength = page.totalElements
                         $defer.resolve(page.content);
                     }
                 }, function(err){

+ 26 - 1
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_invoice_ctrl.js

@@ -1,6 +1,6 @@
 define([ 'app/app' ], function(app) {
     'use strict';
-    app.register.controller('vendorInvoiceCtrl', ['$scope','$rootScope','$modal','BillSubmit','BaseService', 'toaster','ngTableParams','$state', function ($scope, $rootScope, $modal, BillSubmit, BaseService, toaster, ngTableParams, $state) {
+    app.register.controller('vendorInvoiceCtrl', ['$scope','$rootScope','$modal','BillSubmit','BaseService', 'toaster','ngTableParams','$state','$filter', function ($scope, $rootScope, $modal, BillSubmit, BaseService, toaster, ngTableParams, $state, $filter) {
         $rootScope.active = 'vendor_invoice';
         // 切换tab
         document.title = '卖家发票管理-优软商城';
@@ -170,5 +170,30 @@ define([ 'app/app' ], function(app) {
             })
         }
 
+        // 加密订单的ID过滤器
+        var enIdFilter = $filter('EncryptionFilter');
+
+
+        /**
+         * 查看发票信息
+         */
+        $scope.lookInvoiceInfo = function(invoice) {
+            var modalInstance = $modal.open({
+                templateUrl : 'static/view/vendor/modal/invoice_look_modal.html',
+                size : 'md',
+                controller : 'invoiceInfoCtrl',
+                resolve : {
+                    ChooseInvoice: function() {
+                        return invoice
+                    },
+                    source: function() {
+                        return false
+                    }
+                }
+            });
+            modalInstance.result.then(function(){
+            }, function(){
+            });
+        }
     }]);
 });

+ 1 - 0
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_order_ctrl.js

@@ -586,6 +586,7 @@ define(['app/app'], function (app) {
                         }
 
                         $scope.purchases = page.content;
+                        $scope.currenctOrdersList = page
                         angular.forEach($scope.purchases, function (data) {
                             if (data.installmentId && data.installment.status == 504) {
                                 angular.forEach(data.installment.installmentDetails, function (list) {

+ 5 - 0
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_undercarriageCtrl.js

@@ -264,6 +264,11 @@ define([ 'app/app' ], function(app) {
                 }else{
                     $scope.goodsAll.start = 0 ;
                 }
+                if ($scope.param.currentPage === data.totalPages) {
+                    $scope.endNumber = data.totalElements;
+                } else {
+                    $scope.endNumber = data.number * data.size;
+                }
                 $scope.param.currentPage = data.number;
                 $scope.acculatePages(data.number, data.totalPages);
                 // 获取币别信息

+ 6 - 1
src/main/webapp/resources/lib/angular/ng-table.js

@@ -726,6 +726,9 @@
              * @returns {Object|Number} Current page or `this`
              */
             this.page = function(page) {
+                if (page) {
+                  this.redirectPage = page
+                }
                 return angular.isDefined(page) ? this.parameters({
                     'page': page
                 }) : params.page;
@@ -1121,6 +1124,8 @@
                 });
             };
 
+
+            this.redirectPage = 1 // init redirectPge for 1
             /**
              * @ngdoc method
              * @name NgTableParams#hasErrorState
@@ -2291,7 +2296,7 @@ angular.module('ngTable').run(['$templateCache', function ($templateCache) {
 	$templateCache.put('ng-table/filters/text.html', '<input type="text" name="{{name}}" ng-disabled="$filterRow.disabled" ng-model="params.filter()[name]" class="input-filter form-control" placeholder="{{getFilterPlaceholderValue(filter, name)}}"/> ');
 	$templateCache.put('ng-table/groupRow.html', '<tr ng-if="params.hasGroup()" ng-show="$groupRow.show" class="ng-table-group-header"> <th colspan="{{getVisibleColumns().length}}" class="sortable" ng-class="{ \'sort-asc\': params.hasGroup($selGroup, \'asc\'), \'sort-desc\':params.hasGroup($selGroup, \'desc\') }"> <a href="" ng-click="isSelectorOpen=!isSelectorOpen" class="ng-table-group-selector"> <strong class="sort-indicator">{{$selGroupTitle}}</strong> <button class="btn btn-default btn-xs ng-table-group-close" ng-click="$groupRow.show=false; $event.preventDefault(); $event.stopPropagation();"> <span class="glyphicon glyphicon-remove"></span> </button> <button class="btn btn-default btn-xs ng-table-group-toggle" ng-click="toggleDetail(); $event.preventDefault(); $event.stopPropagation();"> <span class="glyphicon" ng-class="{ \'glyphicon-resize-small\': params.settings().groupOptions.isExpanded, \'glyphicon-resize-full\': !params.settings().groupOptions.isExpanded }"></span> </button> </a> <div class="list-group" ng-if="isSelectorOpen"> <a href="" class="list-group-item" ng-repeat="group in getGroupables()" ng-click="groupBy(group)"> <strong>{{ getGroupTitle(group)}}</strong> <strong ng-class="isSelectedGroup(group) && \'sort-indicator\'"></strong> </a> </div> </th> </tr> ');
 	$templateCache.put('ng-table/header.html', '<ng-table-group-row></ng-table-group-row> <ng-table-sorter-row></ng-table-sorter-row> <ng-table-filter-row></ng-table-filter-row> ');
-	$templateCache.put('ng-table/pager.html', '<div class="ng-cloak ng-table-pager" ng-if="params.data.length"> <ul ng-if="pages.length" class="pagination ng-table-pagination" style="float:right;margin-left:20px;"><li><input type="text" class="page-number" ng-model="page.redirectPage"></li><li><a href="" class="page-a" ng-click="params.page(page.redirectPage)">GO</a></li></ul> <ul ng-if="pages.length" class="pagination ng-table-pagination" style="float: right;"> <li ng-class="{\'disabled\': !page.active && !page.current, \'active\': page.current}" ng-repeat="page in pages" ng-switch="page.type"> <a ng-switch-when="prev" ng-click="params.page(page.number)" href="">&laquo;</a> <a ng-switch-when="first" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="page" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="more" ng-click="params.page(page.number)" href="">&#8230;</a> <a ng-switch-when="last" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="next" ng-click="params.page(page.number)" href="">&raquo;</a> </li> </ul> </div> ');
+	$templateCache.put('ng-table/pager.html', '<div class="ng-cloak ng-table-pager" ng-if="params.data.length"> <ul ng-if="pages.length" class="pagination ng-table-pagination" style="float:right;margin-left:20px;"><li><input type="text" class="page-number" ng-model="params.redirectPage"></li><li><a href="" class="page-a" ng-click="params.page(params.redirectPage)">GO</a></li></ul> <ul ng-if="pages.length" class="pagination ng-table-pagination" style="float: right;"> <li ng-class="{\'disabled\': !page.active && !page.current, \'active\': page.current}" ng-repeat="page in pages" ng-switch="page.type"> <a ng-switch-when="prev" ng-click="params.page(page.number)" href="">&laquo;</a> <a ng-switch-when="first" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="page" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="more" ng-click="params.page(page.number)" href="">&#8230;</a> <a ng-switch-when="last" ng-click="params.page(page.number)" href=""><span ng-bind="page.number"></span></a> <a ng-switch-when="next" ng-click="params.page(page.number)" href="">&raquo;</a> </li> </ul> </div> ');
 	$templateCache.put('ng-table/sorterRow.html', '<tr class="ng-table-sort-header"> <th title="{{$column.headerTitle(this)}}" ng-repeat="$column in $columns" ng-class="{ \'sortable\': $column.sortable(this), \'sort-asc\': params.sorting()[$column.sortable(this)]==\'asc\', \'sort-desc\': params.sorting()[$column.sortable(this)]==\'desc\' }" ng-click="sortBy($column, $event)" ng-if="$column.show(this)" ng-init="template=$column.headerTemplateURL(this)" class="header {{$column.class(this)}}"> <div ng-if="!template" class="ng-table-header" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'div\'}"> <span ng-bind="$column.title(this)" ng-class="{\'sort-indicator\': params.settings().sortingIndicator==\'span\'}"></span> </div> <div ng-if="template" ng-include="template"></div> </th> </tr> ');
 }]);
     return angular.module('ngTable');

File diff suppressed because it is too large
+ 0 - 0
src/main/webapp/resources/lib/angular/ng-table.min.js


+ 139 - 0
src/main/webapp/resources/view/admin/modal/admin_news_modal.html

@@ -0,0 +1,139 @@
+<style>
+	#msg{
+		position: relative;
+	}
+	#msg .message{
+		position: absolute;
+		top: -46px;
+		right: 45px;
+		width: 78px;
+		height: 26px;
+		line-height: 26px;
+		text-align: center;
+		font-size: 12px;
+		color: #fff;
+		background-color: #31a5e7;
+		border-radius: 4px;
+		cursor: pointer;
+	}
+	#msg .message .red-dot {
+		position: absolute;
+		top: -2px;
+		right: -8px;
+		width: 18px;
+		height: 18px;
+		line-height: 18px;
+		font-size: 12px;
+		color: #fff;
+		border-radius: 50%;
+		background: #f00;
+	}
+	#msg .message:hover .angle-hover-up{
+		-webkit-transform: rotateZ(180deg);
+		-moz-transform: rotateZ(180deg);
+		-o-transform: rotateZ(180deg);
+		-ms-transform: rotateZ(180deg);
+		transform: rotateZ(180deg);
+	}
+	#msg .msg-show{
+		position: absolute;
+		top: -20px;
+		right: 42px;
+		z-index: 1000;
+		background-color: #ffffff;
+		border-radius: 4px;
+		border: solid 1px #31a5e7;
+	}
+	#msg .msg-show table{
+		width: 1350px;
+		table-layout: fixed;
+	}
+	#msg .msg-show table thead{
+		width: 100%;
+		height: 45px;
+		background-color: rgba(49, 165, 231, 0.1);
+		border-radius: 4px;
+	}
+	#msg .msg-show table tr th{
+		height: 45px;
+	}
+	#msg .msg-show table tr th,.main-container .msg-show table tr td{
+		vertical-align: middle;
+		font-weight: normal;
+		position:relative;
+		text-align: center;
+	}
+	#msg .msg-show table tr th b{
+		position: absolute;
+		top: 13px;
+		left: 0;
+		width: 1px;
+		height: 20px;
+		border: solid 1px #bfbfbf;
+	}
+	#msg .msg-show table tr th.choose-type .all-type {
+		cursor: pointer;
+	}
+	#msg .msg-show table tr th.choose-type .dropdown-menu{
+		position: absolute;
+		top: 30px;
+		left: 45px;
+		z-index: 1000;
+		display: none;
+		float: left;
+		font-size: 14px;
+		border-radius: 4px;
+		-webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175);
+		box-shadow: 0 6px 12px rgba(0,0,0,0.175);
+		-webkit-background-clip: padding-box;
+		background-clip: padding-box;
+		width: 100px;
+		height: 78px;
+		background-color: #ffffff;
+		border: solid 1px #d2d2d2;
+	}
+	#msg .msg-show table tr th.choose-type .dropdown-menu li{
+		width: 100%;
+		height: 25px;
+		line-height: 25px;
+		text-align: center;
+		font-size: 14px;
+		color: #333;
+	}
+	#msg .msg-show table tbody tr{
+		border-bottom: 1px solid #dcdcdc;
+	}
+	#msg .msg-show table tbody tr td{
+		padding: 10px 0;
+	}
+</style>
+<div id="msg" ng-controller="adminNewsCtrl">
+	<span class="message" ng-click="lookNews($data)">待处理 <i class="fa fa-angle-double-down angle-hover-up"></i><span class="red-dot">99</span></span>
+	<div class="msg-show">
+		<table ng-table="newsTableParams">
+			<thead>
+			<tr>
+				<th width="250" class="choose-type">
+					<span class="all-type dropdown-toggle">全部类型 <i class="fa fa-angle-double-down angle-hover-up"></i></span>
+					<ul class="dropdown-menu">
+						<li><a>确认收款</a></li>
+						<li><a>付款申请</a></li>
+						<li><a>财务结算</a></li>
+					</ul>
+				</th>
+				<th width="500"><b></b>任务描述</th>
+				<th width="400"><b></b>发起人</th>
+				<th width="auto"><b></b>发起时间</th>
+			</tr>
+			</thead>
+			<tbody>
+			<tr ng-repeat="news in $data">
+				<td><span ng-bind="news.type">确认收款</span></td>
+				<td><span ng-bind-html="news.content">订单 <a href="">SS2018070500000035</a> 买家已付款成功,请确认是否收款成功!</span></td>
+				<td><span ng-bind="news.sendUserName">深圳市华商龙科技商龙科技商龙科技有限公司(采购商名称)</span></td>
+				<td><span>{{news.createTime | date:'yyyy-MM-dd HH:mm:ss'}}</span></td>
+			</tr>
+			</tbody>
+		</table>
+	</div>
+</div>

+ 165 - 0
src/main/webapp/resources/view/admin/news.html

@@ -0,0 +1,165 @@
+<style>
+	#msg{
+		position: relative;
+	}
+	#msg .message{
+		position: absolute;
+		top: -46px;
+		right: 45px;
+		width: 78px;
+		height: 26px;
+		line-height: 26px;
+		text-align: center;
+		font-size: 12px;
+		color: #fff;
+		background-color: #31a5e7;
+		border-radius: 4px;
+		cursor: pointer;
+	}
+	#msg .message .red-dot {
+		position: absolute;
+		top: -2px;
+		right: -8px;
+		width: 18px;
+		height: 18px;
+		line-height: 18px;
+		font-size: 12px;
+		color: #fff;
+		border-radius: 50%;
+		background: #f00;
+	}
+	#msg .message:hover .angle-hover-up{
+		-webkit-transform: rotateZ(180deg);
+		-moz-transform: rotateZ(180deg);
+		-o-transform: rotateZ(180deg);
+		-ms-transform: rotateZ(180deg);
+		transform: rotateZ(180deg);
+	}
+	#msg .msg-show{
+		position: absolute;
+		top: -20px;
+		right: 42px;
+		z-index: 1000;
+		background-color: #ffffff;
+		border-radius: 4px;
+		border: solid 1px #31a5e7;
+	}
+	#msg .msg-show table{
+		width: 850px;
+		table-layout: fixed;
+	}
+	#msg .msg-show table thead{
+		width: 100%;
+		height: 45px;
+		background-color: rgba(49, 165, 231, 0.1);
+		border-radius: 4px;
+	}
+	#msg .msg-show table thead tr th{
+		font-size: 14px;
+	}
+	#msg .msg-show table tr th{
+		height: 45px;
+	}
+	#msg .msg-show table tr th,.main-container .msg-show table tr td{
+		vertical-align: middle;
+		font-weight: normal;
+		position:relative;
+		text-align: center;
+	}
+	#msg .msg-show table tr th b{
+		position: absolute;
+		top: 13px;
+		left: 0;
+		width: 1px;
+		height: 20px;
+		border: solid 1px #bfbfbf;
+	}
+	#msg .msg-show table tr th.choose-type .all-type {
+		cursor: pointer;
+	}
+	#msg .msg-show table tr th.choose-type .dropdown-menu{
+		position: absolute;
+		top: 30px;
+		left: 45px;
+		z-index: 1000;
+		display: none;
+		float: left;
+		font-size: 14px;
+		border-radius: 4px;
+		-webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175);
+		box-shadow: 0 6px 12px rgba(0,0,0,0.175);
+		-webkit-background-clip: padding-box;
+		background-clip: padding-box;
+		width: 100px;
+		height: 78px;
+		background-color: #ffffff;
+		border: solid 1px #d2d2d2;
+	}
+	#msg .msg-show table tr th.choose-type .dropdown-menu li{
+		width: 100%;
+		height: 25px;
+		line-height: 25px;
+		text-align: center;
+		font-size: 14px;
+		color: #333;
+	}
+	#msg .msg-show table tbody tr{
+		border-bottom: 1px solid #dcdcdc;
+	}
+	#msg .msg-show table tbody tr td{
+		padding: 10px 0;
+	}
+    #msg .msg-show table tbody tr td span{
+        display: inline-block;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        text-align: center;
+        width: 98%;
+    }
+	#msg .msg-show table tbody tr td.hover-color span{
+		cursor: pointer;
+	}
+	#msg .msg-show table tbody tr td.hover-color:hover span{
+		color: #1e9de5;
+	}
+    #msg .msg-show .ng-table-pager {
+        overflow: hidden;
+        margin-top: 15px;
+    }
+</style>
+<div id="msg" ng-controller="adminNewsCtrl">
+	<span class="message" ng-click="lookNews()">待处理 <i class="fa fa-angle-double-down angle-hover-up"></i><span class="red-dot" ng-bind="totalElements || '0'">99</span></span>
+	<div class="msg-show" ng-show="newShow">
+		<table ng-table="newsTableParams">
+			<thead>
+			<tr>
+				<th width="110" class="choose-type">
+					<span class="all-type dropdown-toggle">全部类型 <i class="fa fa-angle-double-down angle-hover-up"></i></span>
+					<ul class="dropdown-menu">
+						<li><a>确认收款</a></li>
+						<li><a>付款申请</a></li>
+						<li><a>财务结算</a></li>
+					</ul>
+				</th>
+				<th width="400"><b></b>任务描述</th>
+				<th width="200"><b></b>发起人</th>
+				<th width="auto"><b></b>发起时间</th>
+			</tr>
+			</thead>
+			<tbody ng-if="$data">
+			<tr ng-repeat="news in $data">
+				<td><span ng-bind="news.newsType">确认收款</span></td>
+				<td ng-click="jumpNewsDetail(news)" class="hover-color"><span ng-bind-html="news.content" title="{{news.content}}">订单 <a>SS2018070500000035</a> 买家已付款成功,请确认是否收款成功!</span></td>
+				<td><span ng-bind="news.sendUserName" title="{{news.sendUserName}}">深圳市华商龙科技商龙科技商龙科技有限公司(采购商名称)</span></td>
+				<td><span title="{{news.createTime | date:'yyyy-MM-dd HH:mm:ss'}}">{{news.createTime | date:'yyyy-MM-dd HH:mm:ss'}}</span></td>
+			</tr>
+			</tbody>
+            <tbody ng-if="$data.length == 0">
+            <tr>
+                <td colspan="4">暂无消息</td>
+            </tr>
+            </tbody>
+		</table>
+	</div>
+</div>

+ 48 - 2
src/main/webapp/resources/view/admin/store_application_maintenance.html

@@ -44,7 +44,7 @@
 		background: #229ee6;
 		margin: 0;
 		line-height: 40px;
-		overflow: hidden;
+		/*overflow: hidden;*/
 	}
 	.menu02{
 		width: 100%;
@@ -97,6 +97,45 @@
 		width: 270px;
 		height: 40px;
 	}
+	.menu .sreach-input .options{
+		position: absolute;
+		left: -58px;
+		top: 1px;
+		width: 60px;
+		height: 28px;
+		line-height: 28px;
+		text-align: center;
+		color: #666;
+		font-size: 14px;
+		background: #fff;
+		border-top-left-radius: 5px;
+		border-bottom-left-radius: 5px;
+		cursor: pointer;
+	}
+	.menu .sreach-input .options b{
+		position: absolute;
+		top: 6px;
+		right: -5px;
+		width: 2px;
+		height: 18px;
+		background: #dcdcdc;
+	}
+	.menu .sreach-input .options ul {
+		position: absolute;
+		top: 28px;
+		left: 0;
+		width: 60px;
+	}
+	.menu .sreach-input .options ul li{
+		width: 60px;
+		height: 30px;
+		line-height: 30px;
+		border-radius: 5px;
+		background: #666;
+		color: rgba(255, 255, 255, 0.89);
+		text-align: center;
+		font-size: 12px;
+	}
 	.menu .sreach-input .form-control{
 		height: 30px;
 		float: left;
@@ -176,7 +215,14 @@
 		</div>
 		<div class="col-sm-3">
 			<div class="sreach-input">
-				<input type="search" class="form-control" placeholder="请输入公司名称" ng-model="keyword" ng-search="refreshTableData()"/>
+				<div class="options">
+					<span ng-click="isShowSearch(true)">{{search === 'STORE_NAME' ? '店铺名' : '审核人'}} <i class="fa fa-angle-down"></i><b></b></span>
+					<ul ng-show="showSearch">
+						<li ng-hide="search === 'STORE_NAME'" ng-click="switchSearch('STORE_NAME', false)">店铺名</li>
+						<li ng-hide="search === 'AUDITOR'" ng-click="switchSearch('AUDITOR', false)">审核人</li>
+					</ul>
+				</div>
+				<input type="search" class="form-control" placeholder="{{placeValue}}" ng-model="keyword" ng-search="refreshTableData()"/>
 				<button ng-click="refreshTableData()">搜索</button>
 			</div>
 		</div>

+ 4 - 4
src/main/webapp/resources/view/admin/trade/trade_buyer_order.html

@@ -233,7 +233,7 @@
 						<th class="th-normal" width="70">总数量</th>
 						<th class="th-normal" width="100">销售<br/>总金额</th>
 						<th class="th-normal" width="50">币种</th>
-						<th class="th-normal" width="50">税率</th>
+						<!--<th class="th-normal" width="50">税率</th>-->
 					</tr>
 				</thead>
 				<tbody>
@@ -310,7 +310,7 @@
 						<!-- 币别 -->
 						<td>{{order.currency}}</td>
 						<!-- 税率 -->
-						<td><span ng-if="order.taxRate">{{order.taxRate * 100}}%</span></td>
+						<!--<td><span ng-if="order.taxRate">{{order.taxRate * 100}}%</span></td>-->
 					</tr>
 					<tr ng-if="page.totalPages == 0">
 						<td colspan="18">
@@ -365,7 +365,7 @@
 						<th class="th-normal" width="70">订单<br/>总数量</th>
 						<th class="th-normal" width="100">订单<br/>总金额</th>
 						<th class="th-normal" width="50">币种</th>
-						<th class="th-normal" width="50">税率</th>
+						<!--<th class="th-normal" width="50">税率</th>-->
 					</tr>
 				</thead>
 				<tbody>
@@ -404,7 +404,7 @@
 						<!-- 币种 -->
 						<td>{{order.currency}}</td>
 						<!-- 税率 -->
-						<td><span ng-if="order.taxRate != null">{{order.taxRate * 100}}%</span></td>
+						<!--<td><span ng-if="order.taxRate != null">{{order.taxRate * 100}}%</span></td>-->
 					</tr>
 					<tr ng-if="page.totalPages == 0">
 						<td colspan="16">

+ 85 - 1
src/main/webapp/resources/view/admin/trade/trade_order_detail.html

@@ -31,6 +31,14 @@
 	.orderid {
 		border: 1px solid #ddd;
 		padding: 5px;
+		overflow: hidden;
+	}
+	.orderid h3{
+		float: left;
+	}
+	.orderid .handle-btn {
+		float: right;
+		padding-top: 15px;
 	}
 	
 	.flow {
@@ -61,8 +69,84 @@
 	.row {
 		line-height: 30px;
 	}
+	/*审核不通过弹框*/
+	.audit-failure-modal {
+		display: block !important;
+		position: fixed;
+		background-color: white;
+		opacity: 1;
+		width: 300px;
+		height: 140px;
+		top: 250px;
+		left: 554px;
+		font-family: "microsoft yahei";
+		border: 1px solid #d9d5ce;
+		z-index: 10;
+	}
+
+	.audit-failure-modal .title {
+		line-height: 31px;
+		height: 31px;
+		font-size: 14px;
+		background-color: #3a76e4;
+		color: white;
+		text-align: left;
+		font-family: microsoft yahei;
+		padding-left: 15px;
+	}
+
+	.audit-failure-modal .content input {
+		width: 80%;
+		height: 31px;
+		line-height: 31px;
+		border-radius: 4px;
+		margin-top: 10px;
+		margin-left: 28px;
+		margin-bottom: 15px;
+	}
+
+	.audit-failure-modal  .footer{
+		margin: 0 auto;
+		text-align: center;
+	}
+
+	.audit-failure-modal  .footer .confirm {
+		width: 90px;
+		padding: 5px 10px;
+		background-color: #3A76E4;
+		border: none;
+		color: white;
+		font-size: 14px;
+	}
+
+	.audit-failure-modal .footer .cancle-button {
+		width: 90px;
+		padding: 5px 10px;
+		background-color: #D9D5CE;
+		border: none;
+		color: #333333;
+		font-size: 14px;
+	}
 </style>
-<div class="orderid"><h3>订单号:<span class="content" ng-bind="orderDetailInfo.orderid"></span></h3></div>
+<div class="orderid">
+	<h3>订单号:<span class="content" ng-bind="orderDetailInfo.orderid"></span></h3>
+	<div class="handle-btn">
+		<a ng-if="orderDetailInfo.status==504 || orderDetailInfo.status==503" style="position: relative;">
+			<button type="button" ng-if="(orderDetailInfo.status==504 && !orderDetailInfo.installmentId) || (orderDetailInfo.status==504 && orderDetailInfo.installmentId && orderDetailInfo.installment.status==503)" class="btn btn-default btn-sm" ng-click="ensurePay(orderDetailInfo)">确认收款</button>
+			<button ng-if="orderDetailInfo.status==504" type="button" class="btn btn-default btn-sm" ng-click="showAuditFailureModal(orderDetailInfo)">审核不通过</button>
+			<div class="audit-failure-modal" ng-if="orderDetailInfo.dislayModal">
+				<div class="title">审核不通过的原因</div>
+				<div class="content">
+					<input class="form-control" ng-model="orderDetailInfo.auditFailureReason" placeholder="请输入审核不通过的原因"/>
+				</div>
+				<div class="footer">
+					<button class="confirm" ng-click="auditFailure(orderDetailInfo)">确认</button>
+					<button class="cancle-button" ng-click="orderDetailInfo.dislayModal = false">取消</button>
+				</div>
+			</div>
+		</a>
+	</div>
+</div>
 <div class="row col-md-12">
 	<div class="col-md-1 {{styl0}}"><span>待确认</span></div>
 	<div class="col-md-1 {{styl1}}"><span>待付款</span></div>

+ 1 - 1
src/main/webapp/resources/view/common/header.html

@@ -279,7 +279,7 @@
 			<div class="mall-search" ng-controller="SearchCtrl">
 				<div class="input-group">
 					<input ng-model="keyword" ng-change="onChange()" type="text" class="form-control"
-						   placeholder="型号/类目/品牌" ng-search="search()" ng-focus="onFocus()"
+						   placeholder="型号/物料名称/品牌" ng-search="search()" ng-focus="onFocus()"
 						   ng-blur="onBlur()" ng-keyup="onKeyup()"/>
 					<span class="input-group-btn" ng-click="search()">
                         <button class="btn btn-default" type="button">搜索</button>

+ 1 - 1
src/main/webapp/resources/view/common/modal/delete_modal.html

@@ -81,7 +81,7 @@
         <a ng-click="cancleDelete()"><i class="fa fa-close fa-lg"></i></a>
     </div>
     <div class="content">
-        <p><i class="fa fa-exclamation-circle"></i>是否删除此信息</p>
+        <p><i class="fa fa-exclamation-circle"></i>是否删除此产品</p>
         <div class="red"
              ng-if="message">*<i ng-if="message" ng-bind="message"></i>
         </div>

+ 1 - 1
src/main/webapp/resources/view/prod/my_cart.html

@@ -588,7 +588,7 @@ span.search:HOVER {
 <div class="row" ng-if="cartExist">
 	<div class="col-xs-offset-6 col-xs-4">
 		<div class="input-group col-xs-12">
-			<input class="form-control" type="search" ng-model="product.keyword" placeholder="输入搜索类目、品牌、器件">
+			<input class="form-control" type="search" ng-model="product.keyword" placeholder="输入搜索物料名称、品牌、器件">
 			<span class="form-control-feedback text-simple"><i class="fa fa-search"></i></span>
 		</div>
 	</div>

+ 1 - 1
src/main/webapp/resources/view/search/search_component.html

@@ -216,7 +216,7 @@
 	<div id="notFound" ng-if="componentDatas.total == 0">
 		<div>很抱歉,我们没有找到相关的产品型号!</div>
 		<div>
-			您可以选择 <a href="product#/home">按类目查找产品</a> 或 <a href="product#/brandList">按品牌查找产品</a>。
+			您可以选择 <a href="product#/home">按物料名称(类目)查找产品</a> 或 <a href="product#/brandList">按品牌查找产品</a>。
 		</div>
 	</div>
 </div>

+ 2 - 2
src/main/webapp/resources/view/sso/header.html

@@ -219,13 +219,13 @@
             </ul>
         </div>
         <div id="mall-search" class="search-right fr" ng-controller="SearchCtrl">
-            <input type="text" ng-model="keyword" ng-change="onChange()" ng-search="search()" ng-focus="onFocus()" ng-blur="onBlur()" ng-keyup="onKeyup()"placeholder="品牌/类目/型号" />
+            <input type="text" ng-model="keyword" ng-change="onChange()" ng-search="search()" ng-focus="onFocus()" ng-blur="onBlur()" ng-keyup="onKeyup()"placeholder="品牌/物料名称/型号" />
             <a class="seek" ng-click="search()">搜索</a>
             <ul class="association" ng-show="associate || associateEnter"  ng-class="{'none': !associate || !associateEnter}" ng-mouseenter="onAssociateEnter()" ng-mouseleave="onAssociateLeave()">
                 <li class="similar-title" ng-if="associates.component && associates.brand.length > 0">品牌:</li>
                 <li ng-repeat="as in associates.brand" ng-bind="as.nameCn" ng-class="{'active': $index==selectIndex}"
                     ng-click="onAssociateClick(as.nameCn)"></li>
-                <li class="similar-title" ng-if="associates.component && associates.kind.length > 0">类目:</li>
+                <li class="similar-title" ng-if="associates.component && associates.kind.length > 0">物料名称(类目):</li>
                 <li ng-repeat="as in associates.kind" ng-bind="as.nameCn" ng-class="{'active': $index==selectIndex}"
                     ng-click="onAssociateClick(as.nameCn)"></li>
                 <li class="similar-title" ng-if="associates.component && associates.component.length > 0">型号:</li>

+ 3 - 2
src/main/webapp/resources/view/sso/staffManagement.html

@@ -425,6 +425,7 @@
         line-height: 32px;
         float: right;
         padding-left: 5px;
+        border: 1px solid #5078cb;
     }
     .auth-info-header .searchUser-group >div {
         background: #fff;
@@ -914,11 +915,11 @@
             <div class="auth-info-header">
                 <div class="addUser-group">
                     <!--<i class="fa fa-user-plus fa-fw"></i>-->
-                    <div class="addUser-btn" ng-click="setAdding(!adding)" ng-mouseenter="setInSelect(true)" ng-mouseleave="setInSelect(false)">
+                    <div class="addUser-btn" ng-mouseenter="setInSelect(true)" ng-mouseleave="setInSelect(false)">
                         <img src="static/img/vendor/images/addUser.png" alt="">
                         <span>新增用户</span>
                     </div>
-                    <div class="addUser-expand" ng-show="adding" ng-mouseenter="setInSelect(true)" ng-mouseleave="setInSelect(false)">
+                    <div class="addUser-expand" ng-show="inSelect" ng-mouseenter="setInSelect(true)" ng-mouseleave="setInSelect(false)">
                         <div ng-click="setAddingUser(true)">
                             <i class="fa fa-plus-circle"></i>
                             <span>添加未注册用户</span>

+ 12 - 12
src/main/webapp/resources/view/usercenter/forstore/buyer_invoice.html

@@ -639,18 +639,18 @@
                         </div>
                         <div class="text-inverse error col-md-3" ng-show="form.account.$touched&&(form.account.$invalid)" ng-bind="form.account.$error.required?'请填写开户银行账号':'请填写30位以内的数字'"></div>
                     </div>
-                    <div class="form-group"  ng-if="billType == 1205">
-                        <label class="col-md-2 control-label"><b class="text-inverse">*</b>上传开户许可证:{{form.permissionUpload}}</label>
-                        <div class="form-input-line file-line">
-                            <input type="text" name="permission" required class="form-control" ng-model="bill.attachUrl" readonly style="background: #fff">
-                        </div>
-                        <div class="col-md-1">
-                            <label class="select-file-box">
-                                <span>选择文件</span>
-                                <input class="input-file-default" type="file" ng-file-select ng-model="bill.billInfo" ng-change="onUploadPermission()" ng-multiple="false" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg,application/pdf,*.pdf">
-                            </label></div>
-                        <div class="text-inverse error col-md-3" ng-show="isDoUpload&&(form.permission.$error.required)">请勿超过3M</div>
-                    </div>
+                    <!--<div class="form-group"  ng-if="billType == 1205">-->
+                        <!--<label class="col-md-2 control-label"><b class="text-inverse">*</b>上传开户许可证:{{form.permissionUpload}}</label>-->
+                        <!--<div class="form-input-line file-line">-->
+                            <!--<input type="text" name="permission" required class="form-control" ng-model="bill.attachUrl" readonly style="background: #fff">-->
+                        <!--</div>-->
+                        <!--<div class="col-md-1">-->
+                            <!--<label class="select-file-box">-->
+                                <!--<span>选择文件</span>-->
+                                <!--<input class="input-file-default" type="file" ng-file-select ng-model="bill.billInfo" ng-change="onUploadPermission()" ng-multiple="false" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg,application/pdf,*.pdf">-->
+                            <!--</label></div>-->
+                        <!--<div class="text-inverse error col-md-3" ng-show="isDoUpload&&(form.permission.$error.required)">请勿超过3M</div>-->
+                    <!--</div>-->
                     <div class="form-group">
                         <label class="col-md-2 control-label"><b class="text-inverse">*</b>收票人:</label>
                         <div class="form-input-line">

+ 25 - 5
src/main/webapp/resources/view/usercenter/forstore/buyer_invoice_record.html

@@ -43,6 +43,22 @@
         vertical-align: middle;
         text-align: center;
     }
+    .invoice-com-tab tbody>tr>td a.invoice-detail{
+        display: block;
+    }
+    .invoice-com-tab tbody>tr>td:hover a.invoice-detail{
+        color: #5078cb;
+    }
+    .invoice-com-tab tbody>tr:hover>td b.invoice-info{
+        display: block;
+    }
+    .invoice-com-tab tbody>tr>td b.invoice-info{
+        display: none;
+        font-size: 12px;
+        font-weight: normal;
+        color: #5078cb;
+        cursor: pointer;
+    }
     .invoice-com-tab thead>tr>th.select-line{
         padding: 8px 0;
     }
@@ -99,8 +115,8 @@
         width: 330px;
         height: 32px;
         line-height: 32px;
-        font-size: 12px;
-        border-radius: 0;
+        font-size: 14px;
+        border-radius: 2px;
         border: #5078cb 1px solid;
         background: #fff;
         float: left;
@@ -114,6 +130,7 @@
         font-size: 14px;
         color: #fff;
         float: right;
+        border-radius: 2px;
     }
     body div.ng-table-pager a.page-a {
         float: right;
@@ -195,12 +212,15 @@
                     <tbody>
                         <tr ng-repeat="item in billData">
                             <td ng-bind="item.createTime | date : 'yyyy-MM-dd'"></td>
-                            <td ng-bind="item.sellername"></td>
+                            <td><a ng-href="{{'store/' + item.storeid}}" ng-bind="item.sellername" target="_blank"></a></td>
                             <td>
-                                <span style="display: block" ng-repeat="orderid in item.orderids.split(',')" ng-bind="orderid"></span>
+                                <a ng-href="user#/order/detail/{{orderid | EncryptionFilter}}" ng-repeat="orderid in item.orderids.split(',')" ng-bind="orderid" target="_blank" class="invoice-detail"></a>
                             </td>
                             <td ng-bind="item.price"></td>
-                            <td ng-bind="item.invoicetype==1206?'普票':'专票'"></td>
+                            <td style="padding: 0;">
+                                <span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>
+                                <b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b>
+                            </td>
                             <td ng-bind="item.invoicetitle"></td>
                             <td ng-bind="item.receiverName"></td>
                             <td ng-bind="item.recTel"></td>

+ 8 - 4
src/main/webapp/resources/view/usercenter/forstore/buyer_no_invoice.html

@@ -60,6 +60,9 @@
     vertical-align: middle;
     text-align: center;
 }
+.invoice-com-tab tbody>tr>td:hover a {
+    color: #5078cb;
+}
 /*无记录与记录条数*/
 .table>tbody>tr.record-num td{
     padding: 0;
@@ -129,8 +132,8 @@
     width: 330px;
     height: 32px;
     line-height: 32px;
-    font-size: 12px;
-    border-radius: 0;
+    font-size: 14px;
+    border-radius: 2px;
     border: #5078cb 1px solid;
     background: #fff;
     float: left;
@@ -144,6 +147,7 @@
     font-size: 14px;
     color: #fff;
     float: right;
+    border-radius: 2px;
 }
 body div.ng-table-pager a.page-a {
     float: right;
@@ -254,9 +258,9 @@ body div.ng-table-pager a.page-a {
                                     <label for={{$index+1}}></label>
                                 </lable>
                             </td>
-                            <td ng-bind="item.storeName"></td>
+                            <td><a ng-href="{{'store/' + item.storeid}}" ng-bind="item.storeName" target="_blank"></a></td>
                             <td>
-                                <span style="display: block" ng-repeat="orderid in item.orderid.split(',')" ng-bind="orderid"></span>
+                                <a ng-href="user#/order/detail/{{orderid | EncryptionFilter}}" ng-repeat="orderid in item.orderid.split(',')" ng-bind="orderid" target="_blank" style="display: block;"></a>
                             </td>
                             <td ng-bind="item.price"></td>
                         </tr>

+ 14 - 8
src/main/webapp/resources/view/usercenter/forstore/buyer_order.html

@@ -435,9 +435,8 @@
 	/*搜索时间筛选*/
 	.screen{
 		background: #fff;
-		padding-top: 16px;
-		padding-bottom: 16px;
-		height: 66px;
+		height: 40px;
+		padding-top: 4px;
 	}
 	.screen .sreach input{
 		border: #dfdfdf 1px solid;
@@ -462,18 +461,22 @@
 		margin: 0 5px;
 	}
 	.screen .sreach a.seek{
-		width: 80px;
-		height: 34px;
+		width: 70px;
+		height: 32px;
 		background: #5078cb;
 		color: #fff;
-		line-height: 34px;
+		line-height: 32px;
 		float: none;
+		border-radius: 2px;
 	}
 	.screen .sreach a.seek:hover{
 		background: #3f7ae3;
 	}
 	.screen .sreach .form-control{
-		border-radius: 1px;
+		border-radius: 2px;
+		border: 1px solid #5078cb;
+		height: 32px;
+		line-height: 32px;
 	}
 	.data-input{
 		float: left;
@@ -484,7 +487,7 @@
 		right: 1px;
 		top: 1px;
 		width: 20px;
-		height: 32px;
+		height: 30px;
 		background: url(static/img/user/images/xiala.png) right no-repeat #fff !important;
 		background-position-x: 100% !important;
 		border: none;
@@ -1030,6 +1033,9 @@
 						<b class="total">总金额:<em ng-bind="::order.ensurePrice | formateNumber : 2 | currencySysmbol : order.currency"></em></b>
 						<b>总共<em ng-bind="::order.batchQty || 0"></em>件产品</b></dd>
 				</div>
+				<div ng-if="currenctOrders.length > 0" class="text-right" style="margin: 20px 0 12px 0;padding-right:15px;" >
+					显示&nbsp;{{(currenctOrdersList.number - 1 ) * currenctOrdersList.tobepaid + 1}}-{{currenctOrdersList.totalElements >= 10 ? (currenctOrdersList.number * currenctOrdersList.tobepaid > currenctOrdersList.totalElements ? currenctOrdersList.totalElements : currenctOrdersList.number * currenctOrdersList.tobepaid) : currenctOrdersList.totalElements}}&nbsp;条,共&nbsp;{{currenctOrdersList.totalElements}}&nbsp;条
+				</div>
 				<div ng-if="currenctOrders.length == 0" class="text-center">
 					<div class="col-xs-offset-3 col-xs-2" >
 						<img src="static/img/all/empty-cart.png">

+ 16 - 4
src/main/webapp/resources/view/usercenter/forstore/first_rate.html

@@ -233,10 +233,22 @@
                 <em>{{order.sellername}}</em>
             </a>
         </span>
-        <span style="position: relative; width: 10%; margin-left: 50px;">
+        <span style="position: relative; width: 10%; margin-left: 50px;" ng-controller="ChatContactCtrl as chat">
             <img src="static/img/common/songguo.png"/>
-            <a href="javascript:void(0)" class="contact_btn" ng-click="cont = !cont">联系卖家</a>
-            <div class="seller-contact" ng-if="cont" ng-class="{true : 'seller-contact-info', false : 'display-none'}[cont]">
+            <a  href="javascript:void(0)" class="contact_btn" ng-click="chat.contactWithOther(order.sellPhone, order.sellerenuu)">联系卖家</a>
+            <div class="com-mall-del-box link-saler-box" ng-if="showLinkBox">
+                <div class="title">
+                  <i ng-click="setShowLinkBox(false)"></i>
+                </div>
+                <div class="content">
+                  <p><i class="fa fa-exclamation-circle"></i>抱歉,暂时无法与卖家在线沟通!</p>
+                  <p>卖家联系电话:<span ng-bind="phone"></span></p>
+                  <div>
+                    <a ng-click="setShowLinkBox(false)">我知道了</a>
+                  </div>
+                </div>
+              </div>
+           <!-- <div class="seller-contact" ng-if="cont" ng-class="{true : 'seller-contact-info', false : 'display-none'}[cont]">
                                  <div class="contact-title">
                                      <a ng-click="setContFalse()"><i class="fa fa-close fa-lg" aria-hidden="true"></i></a>
                                  </div>
@@ -252,7 +264,7 @@
                                      <textarea class="send-message" placeholder="给卖家发送站内消息"></textarea>
                                  </div>
                                  <div style="display: none;" class="send-button"><a class="send">发送</a></div>
-                            </div>
+                            </div>-->
         </span>
         <span style="float: right;margin-right: 46px; font-size: 12px;">其他买家需要你的建议喔</span>
     </div>

+ 2 - 2
src/main/webapp/resources/view/usercenter/forstore/home_center.html

@@ -108,8 +108,8 @@
             <!--快速导航-->
             <div class="user_r_03">
                 <ul>
-                    <li><a ui-sref="componentCol"><img src="static/img/user/images/menu01.png"/><p>产品收藏</p></a></li>
-                    <li><a ui-sref="store_focus"><img src="static/img/user/images/menu02.png"/><p>店铺关注</p></a></li>
+                    <li><a ui-sref="componentCol"  target="_blank"><img src="static/img/user/images/menu01.png"/><p>产品收藏</p></a></li>
+                    <li><a ui-sref="store_focus" target="_blank"><img src="static/img/user/images/menu02.png"/><p>店铺关注</p></a></li>
                     <li><a href="news" target="_blank"><img src="static/img/user/images/menu05.png"/><p>优软快讯</p></a></li>
                     <li><a ui-sref="browsing_history"><img src="static/img/user/images/menu04.png"/><p>浏览历史</p></a></li>
                 </ul>

+ 1 - 1
src/main/webapp/resources/view/usercenter/forstore/order_detail.html

@@ -484,7 +484,7 @@
 						</span>
 					</dd>
 					<dd class="line60">
-						<span class="wd02" style="width: 60%; text-align: left; margin-left: 40px; line-height: 30px;">配送方式:<i ng-bind="deliveryMethod[order.deliverytype]"></i>
+						<span class="wd02" style="width: 45%; text-align: left; margin-left: 40px; line-height: 30px;">配送方式:<i ng-bind="deliveryMethod[order.deliverytype]"></i>
 							<i style="color: #999;" ng-if="rule" ng-bind="'(' + rule.ruleName + ')'">(满1000元包邮,未满足的订单收取运费20元)</i>
 						</span>
 						<span class="total-price" ng-controller="poundageCtrl">

+ 3 - 3
src/main/webapp/resources/view/usercenter/forstore/order_pay.html

@@ -817,7 +817,7 @@
 							</span>
 						</dd>
 						<dd class="line60" ng-class="{'none-border': deliveryList ? deliveryList[details[0].storeid].method==1303 : order.deliverytype=1303}">
-							<span class="style01" style="width: 60%; padding-left: 40px;" ng-class="{'line35': order.status!=501}">配送方式:
+							<span class="style01" style="width: 55%; padding-left: 40px;" ng-class="{'line35': order.status!=501}">配送方式:
 								<select ng-if="order.status == 501 && ruleMap[details[0].storeid].length != 0" class="select" ng-model="deliveryList[details[0].storeid]" style="opacity: 1;"
 										ng-options="rule as deliveryMethod[rule.method] for rule in ruleMap[details[0].storeid]"
 										ng-change="changeFare(details)">
@@ -859,8 +859,8 @@
 										<span class="price-down" ng-mouseenter="showRemindTagActivity = true" ng-mouseleave="showRemindTagActivity = false">减免</span>
 										手续费:
 									</strong>
-									<em ng-if="order.status == 501">{{order.currency == 'RMB' ? '¥ ':'$'}}0.00(<i class="price-down-tag" ng-bind="getMul(getAdd(storePrice[key], fareList[details[0].storeid]), 0.00453) | formateNumber : 2 | currencySysmbol : order.currency.substring(0,3)">$1.11</i>)</em>
-									<em ng-if="order.status != 501">
+									<em ng-if="order.status == 501" class="text-ellipse">{{order.currency == 'RMB' ? '¥ ':'$'}}0.00(<i class="price-down-tag" ng-bind="getMul(getAdd(storePrice[key], fareList[details[0].storeid]), 0.00453) | formateNumber : 2 | currencySysmbol : order.currency.substring(0,3)">$1.11</i>)</em>
+									<em ng-if="order.status != 501" class="text-ellipse">
 										<em ng-if="storeArray.length == 1">{{order.currency == 'RMB' ? '¥ ':'$'}}0.00(<i class="price-down-tag" ng-bind="getMul(order.ensurePrice, 0.00453) | formateNumber : 2 | currencySysmbol : order.currency.substring(0,3)">$1.11</i>)</em>
 										<em ng-if="storeArray.length != 1">{{order.currency == 'RMB' ? '¥ ':'$'}}0.00(<i class="price-down-tag" ng-bind="getMul(getAdd(storePrice[key], deliveryList[details[0].storeid].fare), 0.00453) | formateNumber : 2 | currencySysmbol : order.currency.substring(0,3)">$1.11</i>)</em>
 									</em>

+ 2 - 1
src/main/webapp/resources/view/usercenter/forstore/pay_center.html

@@ -348,12 +348,13 @@
 		color: #fff;
 		line-height: 32px;
 		float: none;
+		border-radius: 2px;
 	}
 	.screen .sreach a.seek:hover{
 		background: #3f7ae3;
 	}
 	.screen .sreach .form-control{
-		border-radius: 1px;
+		border-radius: 2px;
 	}
 	.data-input{
 		float: left;

+ 40 - 15
src/main/webapp/resources/view/usercenter/forstore/seekPurchase.html

@@ -141,7 +141,7 @@
         float: left;
     }
     .seek-purchase .screen .sreach input{
-        border: #4290f7 1px solid;
+        border: #5078cb 1px solid;
         height: 32px;
         width: 267px;
         box-shadow: none;
@@ -152,7 +152,7 @@
     .seek-purchase .screen .sreach .date input{
         width: 117px;
         text-align: left;
-        border: 1px solid #4290f7;
+        border: 1px solid #5078cb;
     }
     .seek-purchase .screen .sreach .date input:hover{
         cursor: pointer;
@@ -170,10 +170,11 @@
     .seek-purchase .screen .sreach a.seek{
         width: 58px;
         height: 32px;
-        background: #4290f7;
+        background: #5078cb;
         color: #fff;
         line-height: 32px;
         float: left;
+        border-radius: 2px;
     }
     .seek-purchase .screen .sreach a.seek:hover{
         background: #3f7ae3;
@@ -909,7 +910,7 @@
         margin-right: 20px;
         margin-left: 10px;
         text-align: center;
-        border: 1px solid #4290f7;
+        border: 1px solid #5078cb;
         color: #333;
     }
 </style>
@@ -1052,7 +1053,7 @@
                     </div>
                 </div>
                 <div class="sreach-input fr">
-                    <input type="search" placeholder="品牌/类目/型号" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
+                    <input type="search" placeholder="品牌/物料名称/型号" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
                     <a class="seek" href="javascript:void(0)" ng-click="onSearch()">搜索</a>
                 </div>
             </div>
@@ -1338,7 +1339,7 @@
                 <tr class="pager-row" ng-if="seekListData.totalElements > 0">
                 <td colspan="10">
                     <div>
-                        显示&nbsp;{{(seekListData.number - 1 ) * seekListData.size + 1}}-{{seekListData.totalElements >= 10 ? seekListData.number * seekListData.size : seekListData.totalElements}}&nbsp;条,共&nbsp;{{seekListData.totalElements}}&nbsp;条
+                        显示&nbsp;{{(seekListData.number - 1 ) * seekListData.size + 1}}-{{seekListData.totalElements >= 10 ? (seekListData.number * seekListData.size > seekListData.totalElements ? seekListData.totalElements : seekListData.number * seekListData.size) : seekListData.totalElements}}&nbsp;条,共&nbsp;{{seekListData.totalElements}}&nbsp;条
                     </div>
                 </td>
             </tr>
@@ -1414,14 +1415,24 @@
                     <a class="fr">查看详情</a>
                 </td>
             </tr>
-            <tr ng-if="!$data.length" class="empty">
-                <td>
-                    <div>
-                        <img src="static/img/all/empty-cart.png">
-                        <span class="f14">暂无求购信息</span>
-                    </div>
-                </td>
-            </tr>
+            </tbody>
+            <tbody class="pager-tbody">
+                <tr class="pager-row pager-row2" ng-if="$data.length > 0" style="height: auto;line-height: 24px;">
+                    <td>
+                        <div>
+                            显示&nbsp;{{(bomDataList.number - 1 ) * bomDataList.size + 1}}-{{bomDataList.totalElements >= 10 ? (bomDataList.number * bomDataList.size > bomDataList.totalElements ? bomDataList.totalElements : bomDataList.number * bomDataList.size) : bomDataList.totalElements}}&nbsp;条,共&nbsp;{{bomDataList.totalElements}}&nbsp;条
+                        </div>
+                        <div class="clear:both"></div>
+                    </td>
+                </tr>
+                <tr ng-if="!$data.length" class="empty">
+                    <td>
+                        <div>
+                            <img src="static/img/all/empty-cart.png">
+                            <span class="f14">暂无求购信息</span>
+                        </div>
+                    </td>
+                </tr>
             </tbody>
         </table>
     </div>
@@ -1471,4 +1482,18 @@
             </div>
         </div>
     </div>
-</div>
+</div>
+<style>
+    .seek-purchase .bom-manage > table tbody tr.pager-row2:hover {
+        background: rgba(0,0,0,0);
+        border: 1px solid #fff;
+    }
+    .seek-purchase .bom-manage > table tbody tr.pager-row2 td > div {
+        font-size: 12px;
+        text-align: right;
+        padding-right: 15px;
+        margin: 20px 0 12px 0;
+        display: block;
+        cursor: auto;
+    }
+</style>

+ 16 - 4
src/main/webapp/resources/view/usercenter/forstore/show_rate.html

@@ -274,10 +274,22 @@
                 <em>{{order.sellername}}</em>
             </a>
         </span>
-        <span style="position: relative; width: 10%; margin-left: 50px;">
+        <span style="position: relative; width: 10%; margin-left: 50px;" ng-controller="ChatContactCtrl as chat">
             <img src="static/img/common/songguo.png"/>
-            <a href="javascript:void(0)" class="contact_btn" ng-click="cont = !cont">联系卖家</a>
-            <div class="seller-contact" ng-if="cont" ng-class="{true : 'seller-contact-info', false : 'display-none'}[cont]">
+            <a href="javascript:void(0)" class="contact_btn" ng-click="chat.contactWithOther(order.sellPhone, order.sellerenuu)">联系卖家</a>
+            <div class="com-mall-del-box link-saler-box" ng-if="showLinkBox">
+                <div class="title">
+                  <i ng-click="setShowLinkBox(false)"></i>
+                </div>
+                <div class="content">
+                  <p><i class="fa fa-exclamation-circle"></i>抱歉,暂时无法与卖家在线沟通!</p>
+                  <p>卖家联系电话:<span ng-bind="phone"></span></p>
+                  <div>
+                    <a ng-click="setShowLinkBox(false)">我知道了</a>
+                  </div>
+                </div>
+              </div>
+            <!--<div class="seller-contact" ng-if="cont" ng-class="{true : 'seller-contact-info', false : 'display-none'}[cont]">
                                  <div class="contact-title">
                                      <a ng-click="setContFalse()"><i class="fa fa-close fa-lg" aria-hidden="true"></i></a>
                                  </div>
@@ -293,7 +305,7 @@
                                      <textarea class="send-message" placeholder="给卖家发送站内消息"></textarea>
                                  </div>
                                  <div style="display: none;" class="send-button"><a class="send">发送</a></div>
-                            </div>
+                            </div>-->
         </span>
         <span style="float: right;margin-right: 46px; font-size: 12px;">其他买家需要你的建议喔</span>
     </div>

+ 1 - 1
src/main/webapp/resources/view/usercenter/header.html

@@ -219,7 +219,7 @@
             </ul>
         </div>
         <div id="mall-search" class="search-right fr" ng-controller="SearchCtrl">
-            <input type="text" ng-model="keyword" ng-change="onChange()" ng-search="search()" ng-focus="onFocus()" ng-blur="onBlur()" ng-keyup="onKeyup()"placeholder="品牌/类目/型号" />
+            <input type="text" ng-model="keyword" ng-change="onChange()" ng-search="search()" ng-focus="onFocus()" ng-blur="onBlur()" ng-keyup="onKeyup()"placeholder="品牌/物料名称/型号" />
             <a class="seek" ng-click="search()">搜索</a>
             <ul class="association" ng-show="associate || associateEnter"  ng-class="{'none': !associate || !associateEnter}" ng-mouseenter="onAssociateEnter()" ng-mouseleave="onAssociateLeave()">
                 <li class="similar-title" ng-if="associates.component && associates.brand.length > 0">品牌:</li>

+ 2 - 2
src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_erp.html

@@ -1711,7 +1711,7 @@
 		<div ng-if="standard_tab == 'unstandard' || standard_tab =='standard'">
 			<div class="search-check">
 				<div class="search fl">
-					<input type="text" class="form-control" ng-model="param.keyword" ng-search="onSearch()" placeholder="类目/型号/品牌"/>
+					<input type="text" class="form-control" ng-model="param.keyword" ng-search="onSearch()" placeholder="物料名称/型号/品牌"/>
 					<button ng-click="onSearch()">搜索</button>
 					<!--<a ng-click="download()">批量导出</a>-->
 				</div>
@@ -2307,7 +2307,7 @@
 					<div class="apply"><em>*</em> 以下部分产品商城暂未收录,可前往<a href="vendor#/brand/apply/">品牌中心/</a><a href="vendor#/component/apply"> 器件申请</a>中提出申请</div>
 				</div>
 				<div class="search fr">
-					<input type="text" class="form-control ng-pristine ng-valid ng-touched" ng-model="param.keyword" ng-search="onSearch()" placeholder="类目/品牌/型号">
+					<input type="text" class="form-control ng-pristine ng-valid ng-touched" ng-model="param.keyword" ng-search="onSearch()" placeholder="物料名称/品牌/型号">
 					<button ng-click="onSearch()">搜索</button>
 				</div>
 			</div>

+ 2 - 2
src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_person_erp.html

@@ -1788,7 +1788,7 @@
 		<div ng-if="standard_tab == 'unstandard' || standard_tab =='standard'">
 			<div class="search-check">
 				<div class="search fl">
-					<input type="text" class="form-control" ng-model="param.keyword" ng-search="onSearch()" placeholder="类目/型号/品牌"/>
+					<input type="text" class="form-control" ng-model="param.keyword" ng-search="onSearch()" placeholder="物料名称/型号/品牌"/>
 					<button ng-click="onSearch()">搜索</button>
 					<!--<a ng-click="download()">批量导出</a>-->
 				</div>
@@ -2333,7 +2333,7 @@
 					<div class="apply"><em>*</em> 以下部分产品商城暂未收录,可前往<a href="vendor#/brand/apply/">品牌中心/</a><a href="vendor#/component/apply"> 器件申请</a>中提出申请</div>
 				</div>
 				<div class="search fr">
-					<input type="text" class="form-control ng-pristine ng-valid ng-touched" ng-model="param.keyword" ng-search="onSearch()" placeholder="类目/品牌/型号">
+					<input type="text" class="form-control ng-pristine ng-valid ng-touched" ng-model="param.keyword" ng-search="onSearch()" placeholder="物料名称/品牌/型号">
 					<button ng-click="onSearch()">搜索</button>
 				</div>
 			</div>

+ 1 - 1
src/main/webapp/resources/view/vendor/forstore/erp/vendor_undercarriage_erp.html

@@ -561,7 +561,7 @@
         </div>
         <div class="search-check">
             <div class="search fl">
-                <input type="text" class="form-control" ng-model="keyword" ng-search="onSearch()" placeholder="类目/品牌/型号"/>
+                <input type="text" class="form-control" ng-model="keyword" ng-search="onSearch()" placeholder="物料名称/品牌/型号"/>
                 <button ng-click="onSearch()">搜索</button>
                 <a ng-click="downGoods()" class="down-goods-btn">批量导出</a>
                 <form style="display: none;" id="down-load-goods" method="get">

+ 2 - 1
src/main/webapp/resources/view/vendor/forstore/pay_center.html

@@ -398,12 +398,13 @@
         color: #fff;
         line-height: 32px;
         float: none;
+        broder-radius: 2px;
     }
     .screen .sreach a.seek:hover{
         background: #3f7ae3;
     }
     .screen .sreach .form-control{
-        border-radius: 1px;
+        border-radius: 2px;
     }
     .data-input{
         float: left;

+ 18 - 13
src/main/webapp/resources/view/vendor/forstore/purchasAttendtion.html

@@ -59,9 +59,9 @@
     font-weight: 500;
     user-select:inherit;
   }
-  .seek-purchase-content tbody tr:nth-last-of-type(1) {
-    border-bottom: 0;
-  }
+  /*.seek-purchase-content tbody tr:nth-last-of-type(1) {*/
+    /*border-bottom: 0;*/
+  /*}*/
   .seek-purchase-content tbody .Attend_btn a{
     color: #5078cb;
   }
@@ -84,23 +84,27 @@
   .search-check .search .form-control{
     width: 340px;
     float: left;
-    height: 34px;
-    border-radius: 0;
+    height: 32px;
+    border-radius: 2px;
     box-shadow: none;
     border-right: none;
+    border: 1px solid #5078cb;
   }
   .search-check .search button,.search-check .search a{
     display: inline-block;
-    width: 94px;
-    height: 34px;
-    line-height: 34px;
+    width: 58px;
+    height: 32px;
+    line-height: 32px;
     text-align: center;
     font-size: 14px;
+    background: #5078cb;
+    border-radius: 2px;
+    color: #fff;
   }
   .search-check .search button{
-    background: #d3e1fc;
-    border-radius: 0;
-    border: #e2dbdb 1px solid;
+    background: #5078cb;
+    border-radius: 2px;
+    border: #5078cb 1px solid;
     border-left: none;
   }
   .search-check .search button:hover,.search-check .search a:hover{
@@ -109,10 +113,11 @@
   }
   .search-check .check{
     font-size: 14px;
-    line-height: 30px;
+    line-height: 32px;
     background: #5078cb;
     text-align: center;
     margin-right: 100px;
+    border-radius: 2px;
   }
   .search-check .check a{
     margin: 0 10px;
@@ -210,7 +215,7 @@
       </p>
     </div>
     <div class="record-line text-right ng-binding ng-scope" ng-if="totalElements > 0">
-      显示&nbsp;{{(seekListAll.number - 1 ) * seekListAll.size + 1}}-{{seekListAll.totalElements >=10 ? seekListAll.number * seekListAll.size : seekListAll.totalElements}}&nbsp;条,共&nbsp;{{seekListAll.totalElements}}&nbsp;条
+      显示&nbsp;{{(seekListAll.number - 1 ) * seekListAll.size + 1}}-{{seekListAll.totalElements >=10 ? (seekListAll.number * seekListAll.size > seekListAll.totalElements ? seekListAll.totalElements : seekListAll.number * seekListAll.size) : seekListAll.totalElements}}&nbsp;条,共&nbsp;{{seekListAll.totalElements}}&nbsp;条
     </div>
   </div>
 </div>

+ 23 - 13
src/main/webapp/resources/view/vendor/forstore/purchaseOffer.html

@@ -76,7 +76,7 @@
         float: left;
     }
     .seek-purchase .seek-purchase-content .screen .sreach input{
-        border: #4290f7 1px solid;
+        border: #5078cb 1px solid;
         height: 32px;
         width: 267px;
         box-shadow: none;
@@ -87,7 +87,7 @@
     .seek-purchase .seek-purchase-content .screen .sreach .date input{
         width: 117px;
         text-align: left;
-        border: 1px solid #4290f7;
+        border: 1px solid #5078cb;
     }
     .seek-purchase .seek-purchase-content .screen .sreach .date input:hover{
         cursor: pointer;
@@ -101,10 +101,11 @@
     .seek-purchase .seek-purchase-content .screen .sreach a.seek{
         width: 58px;
         height: 32px;
-        background: #4290f7;
+        background: #5078cb;
         color: #fff;
         line-height: 32px;
         float: left;
+        border-radius: 2px;
     }
     .seek-purchase .seek-purchase-content .screen .sreach a.seek:hover{
         background: #3f7ae3;
@@ -676,7 +677,7 @@
                     </div>
                 </div>
                 <div class="sreach-input fr">
-                    <input type="search" placeholder="品牌/类目/型号/规格/公司" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
+                    <input type="search" placeholder="品牌/物料名称/型号/规格/公司" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
                     <a class="seek" href="javascript:void(0)" ng-click="onSearch()">搜索</a>
                 </div>
             </div>
@@ -732,7 +733,7 @@
                 <td class="left-time" ng-if="seek.remainingTime > 0">剩余&nbsp;<span ng-bind="getDay(seek.remainingTime)" ng-if="getDay(seek.remainingTime) > 0" class="red-text"></span><i ng-if="getDay(seek.remainingTime) > 0">&nbsp;天&nbsp;</i><span ng-if="getDay(seek.remainingTime) <= 0" ng-bind="getHours(seek.remainingTime)" class="red-text">5</span><i ng-if="getDay(seek.remainingTime) <= 0">&nbsp;小时</i></td>
                 <td class="left-time" ng-if="seek.remainingTime <= 0"><span>已截止</span></td>
                 <td class="left-time" ng-if="seek.remainingTime == null"><span style="color: red;">-</span></td>
-                <td class="operate" ng-switch="seek.agreed">
+                <td class="operate" ng-switch="seek.agreed" style="border-right: 1px solid #dae5fd">
                     <a ng-click="setLinkBoxIndex($index)">联系买家<img src="static/img/seekPurchase/link-buyer.png" alt=""></a>
                     <div class="is-say-price" ng-if="seek.agreed != 1 && seek.agreed != 0 || seek.replies">已报价 <img src="static/img/seekPurchase/check.png" alt="">
                         <div class="say-price-history">
@@ -786,15 +787,24 @@
             </tr>
             -->
             </tbody>
+            <tbody class="pager-tbody" >
+                <tr class="pager-row" ng-if="$data.length > 0">
+                    <td colspan="10">
+                        <div style="text-align: right;margin: 20px 0 -10px 0px;padding-right: 11px;">
+                            显示&nbsp;{{(seekListData.number - 1 ) * seekListData.size + 1}}-{{seekListData.totalElements >= 10 ? (seekListData.number * seekListData.size > seekListData.totalElements ? seekListData.totalElements : seekListData.number * seekListData.size) : seekListData.totalElements}}&nbsp;条,共&nbsp;{{seekListData.totalElements}}&nbsp;条
+                        </div>
+                    </td>
+                </tr>
+            </tbody>
             <tbody ng-if="$data.length == 0">
-            <tr class="empty">
-                <td colspan="10">
-                    <div>
-                        <img src="static/img/all/empty-cart.png">
-                        <span>暂无求购信息</span>
-                    </div>
-                </td>
-            </tr>
+                <tr class="empty">
+                    <td colspan="10">
+                        <div>
+                            <img src="static/img/all/empty-cart.png">
+                            <span>暂无求购信息</span>
+                        </div>
+                    </td>
+                </tr>
             </tbody>
         </table>
     </div>

+ 5 - 2
src/main/webapp/resources/view/vendor/forstore/purchase_detail.html

@@ -541,7 +541,7 @@
 						</span>
 					</dd>
 					<dd class="line60">
-						<span class="wd02" style="width: 60%; text-align: left; margin-left: 40px; line-height: 30px;">配送方式:<i ng-bind="deliveryMethod[purchase.sendType]"></i>
+						<span class="wd02" style="width: 45%; text-align: left; margin-left: 40px; line-height: 30px;">配送方式:<i ng-bind="deliveryMethod[purchase.sendType]"></i>
 							<i style="color: #999;" ng-if="rule" ng-bind="'(' + rule.ruleName + ')'">(满1000元包邮,未满足的订单收取运费20元)</i>
 						</span>
 						<span class="total-price" ng-controller="poundageCtrl">
@@ -555,7 +555,10 @@
 										<span class="price-down" ng-mouseenter="showRemindTagActivity = true" ng-mouseleave="showRemindTagActivity = false">减免</span>
 										手续费:
 									</strong>
-									<em ng-if="!isChange">{{purchase.currency == 'RMB' ? '¥ ':'$'}}0.00(<i ng-if="!isChange" ng-bind="getMul(purchase.ensurePrice, 0.00453) | formateNumber : 2 | currencySysmbol : purchase.currency" class="price-down-tag">$1.11</i><i ng-bind="getMul(purchase.currentTotal, 0.00453) | formateNumber : 2 | currencySysmbol : purchase.currency" ng-if="isChange" class="price-down-tag">$1.11</i>)</em>
+									<em ng-if="!isChange">{{purchase.currency == 'RMB' ? '¥ ':'$'}}0.00
+										(<i ng-if="!isChange" ng-bind="getMul(purchase.ensurePrice, 0.00453) | formateNumber : 2 | currencySysmbol : purchase.currency" class="price-down-tag">$1.11</i>
+										<i ng-bind="getMul(purchase.currentTotal, 0.00453) | formateNumber : 2 | currencySysmbol : purchase.currency" ng-if="isChange" class="price-down-tag">$1.11</i>)
+									</em>
 									<em ng-if="isChange">{{purchase.currency == 'RMB' ? '¥ ':'$'}}0.00(<i ng-if="!isChange" ng-bind="getMul(purchase.ensurePrice, 0.00453) | formateNumber : 2 | currencySysmbol : purchase.currency" class="price-down-tag">$1.11</i><i ng-bind="getMul(purchase.currentTotal, 0.00453) | formateNumber : 2 | currencySysmbol : purchase.currency" ng-if="isChange" class="price-down-tag">$1.11</i>)</em>
 									<div class="remind-tag intro" ng-show="showRemindTagIntro">
 										<div class="remind-tag-content">手续费:是指第三方支付机构在交易过程中,按照一定的百分比进行收取的费用。</div>

+ 14 - 13
src/main/webapp/resources/view/vendor/forstore/seekPurchase.html

@@ -30,7 +30,7 @@
         float: left;
     }
     .seek-purchase .seek-purchase-content .screen .sreach input{
-        border: #4290f7 1px solid;
+        border: #5078cb 1px solid;
         height: 32px;
         width: 267px;
         box-shadow: none;
@@ -41,7 +41,7 @@
     .seek-purchase .seek-purchase-content .screen .sreach .date input{
         width: 117px;
         text-align: left;
-        border: 1px solid #4290f7;
+        border: #5078cb 1px solid;
     }
     .seek-purchase .seek-purchase-content .screen .sreach .date input:hover{
         cursor: pointer;
@@ -55,7 +55,7 @@
     .seek-purchase .seek-purchase-content .screen .sreach a.seek{
         width: 58px;
         height: 32px;
-        background: #4290f7;
+        background: #5078cb;
         color: #fff;
         line-height: 32px;
         float: left;
@@ -547,17 +547,17 @@
     }
     .seek-purchase .say-price-box .operate span {
         display: inline-block;
-        width: 64px;
-        height: 28px;
-        line-height: 28px;
+        width: 70px;
+        height: 30px;
+        line-height: 30px;
         text-align: center;
-        background: #4290f7;
+        background: #5078cb;
         color: #fff;
         cursor: pointer;
         border-radius: 2px;
     }
-    .seek-purchase .say-price-box .operate span:last-child {
-        margin-left: 15px;
+    .seek-purchase .say-price-box .operate span:first-child {
+        margin-right: 15px;
         background: #acabab;
     }
     .seek-purchase .link-saler-box {
@@ -619,7 +619,7 @@
         margin-right: 20px;
         margin-left: 10px;
         text-align: center;
-        border: 1px solid #4290f7;
+        border: 1px solid #5078cb ;
         color: #333;
     }
     .seek-purchase .seek-purchase-content >table tbody tr.default-row td.operate .is-say-price {
@@ -843,7 +843,7 @@
                     </div>
                 </div>
                 <div class="sreach-input fr">
-                    <input type="search" placeholder="品牌/类目/型号/规格/公司" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
+                    <input type="search" placeholder="品牌/物料名称/型号/规格/公司" class="form-control" ng-model="keyWord" ng-search="onSearch()"/>
                     <a class="seek" href="javascript:void(0)" ng-click="onSearch()">搜索</a>
                 </div>
             </div>
@@ -952,7 +952,7 @@
             </tbody>
         </table>
         <div style="text-align: right;margin-right: 20px;margin-top: -25px;" ng-if="seekListData.length != 0">
-            显示&nbsp;{{(seekListAll.number - 1 ) * seekListAll.size + 1}}-{{seekListAll.totalElements >=10 ? seekListAll.number * seekListAll.size : seekListAll.totalElements}}&nbsp;条,共&nbsp;{{seekListAll.totalElements}}&nbsp;条
+            显示&nbsp;{{(seekListAll.number - 1 ) * seekListAll.size + 1}}-{{seekListAll.totalElements >=10 ? (seekListAll.number * seekListAll.size > seekListAll.totalElements ? seekListAll.totalElements : seekListAll.number * seekListAll.size) : seekListAll.totalElements}}&nbsp;条,共&nbsp;{{seekListAll.totalElements}}&nbsp;条
         </div>
     </div>
     <div class="com-modal-wrap" ng-show="isShowSayPriceBox">
@@ -1071,8 +1071,9 @@
         -->
             </div>
             <div class="operate">
-                <span ng-click="saveOffer()">确定</span>
                 <span ng-click="setSeekActive(seek, false, index)">取消</span>
+                <span ng-click="saveOffer()">确定</span>
+
             </div>
         </div>
     </div>

+ 16 - 2
src/main/webapp/resources/view/vendor/forstore/showRate.html

@@ -444,9 +444,22 @@
                 <em>{{order.buyername + ' | ' + order.sellername}}</em>
             </a>
         </span>
-        <span style="position: relative; width: 10%; margin-left: 50px;">
+        <span style="position: relative; width: 10%; margin-left: 50px;" ng-controller="ChatContactCtrl as chat">
             <img src="static/img/common/songguo.png"/>
-            <a href="javascript:void(0)" class="contact_btn" ng-click="cont = !cont">联系买家</a>
+            <a href="javascript:void(0)" class="contact_btn" ng-click="chat.contactWithOther(order.buyerTel, order.buyerenuu)">联系买家</a>
+            <div class="com-mall-del-box link-saler-box" ng-if="showLinkBox">
+                <div class="title">
+                  <i ng-click="setShowLinkBox(false)"></i>
+                </div>
+                <div class="content">
+                  <p><i class="fa fa-exclamation-circle"></i>抱歉,暂时无法与买家在线沟通!</p>
+                  <p>买家联系电话:<span ng-bind="phone"></span></p>
+                  <div>
+                    <a ng-click="setShowLinkBox(false)">我知道了</a>
+                  </div>
+                </div>
+              </div>
+<!--
             <div class="buyer-contact" ng-if="cont" ng-class="{true : 'buyer-contact-info', false : 'display-none'}[cont]">
                                  <div class="contact-title">
                                      <a ng-click="setContFalse()"><i class="fa fa-close fa-lg" aria-hidden="true"></i></a>
@@ -463,6 +476,7 @@
                                  </div>
                                  <div style="display: none;" class="send-button"><a class="send">发送</a></div>
                             </div>
+-->
         </span>
         <!--<span style="float: right;margin-right: 46px; font-size: 12px;">其他买家需要你的建议喔</span>-->
     </div>

+ 35 - 6
src/main/webapp/resources/view/vendor/forstore/vendor-invoice.html

@@ -60,6 +60,23 @@
         vertical-align: middle;
         text-align: center;
     }
+    .invoice-com-tab tbody>tr>td a.link-order{
+        cursor: default;
+        display: block;
+    }
+    .invoice-com-tab tbody>tr>td:hover a.link-order{
+        color: #666;
+    }
+    .invoice-com-tab tbody>tr:hover>td b.invoice-info{
+        display: block;
+    }
+    .invoice-com-tab tbody>tr>td b.invoice-info{
+        display: none;
+        font-size: 12px;
+        font-weight: normal;
+        color: #5078cb;
+        cursor: pointer;
+    }
     /*无记录与记录条数*/
     .table>tbody>tr.record-num td{
         padding: 0;
@@ -226,8 +243,8 @@
         height: 32px;
         line-height: 32px;
         font-size: 12px;
-        border-radius: 0;
-        border: #5078cb 1px solid;
+        border-radius: 2px;
+        border:#5078cb 1px solid;
         background: #fff;
         float: left;
     }
@@ -240,6 +257,11 @@
         font-size: 14px;
         color: #fff;
         float: right;
+        border-radius: 2px;
+    }
+    .invoice-search button:hover {
+        background: #3f7ae3;
+        cursor: pointer;
     }
     body div.ng-table-pager a.page-a {
         float: right;
@@ -337,10 +359,14 @@
                         </td>
                         <td ng-bind="item.createTime | date : 'yyyy-MM-dd'"></td>
                         <td>
-                            <span style="display: block" ng-repeat="orderid in item.orderids.split(',')" ng-bind="orderid"></span>
+                            <!--<a ng-href="vendor#/purchase/detail/{{orderid | EncryptionFilter}}" ng-repeat="orderid in item.orderids.split(',')" ng-bind="orderid"></a>-->
+                            <a ng-repeat="orderid in item.orderids.split(',')" ng-bind="orderid" class="link-order"></a>
                         </td>
                         <td ng-bind="item.price"></td>
-                        <td ng-bind="item.invoicetype==1206?'普票':'专票'"></td>
+                        <td style="padding: 0;">
+                            <span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>
+                            <b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b>
+                        </td>
                         <td ng-bind="item.invoicetitle"></td>
                         <td ng-bind="item.receiverName"></td>
                         <td class="address" title="{{item.area+'&#10;'+item.detailAddr}}">
@@ -398,10 +424,13 @@
                 <tr ng-repeat="item in billData track by $index">
                     <td ng-bind="item.createTime | date : 'yyyy-MM-dd'"></td>
                     <td>
-                        <span style="display: block" ng-repeat="orderid in item.orderids.split(',')" ng-bind="orderid"></span>
+                        <!--<a ng-href="vendor#/purchase/detail/{{orderid | EncryptionFilter}}" ng-repeat="orderid in item.orderids.split(',')" ng-bind="orderid" target="_blank"></a>-->
+                        <a ng-repeat="orderid in item.orderids.split(',')" ng-bind="orderid" class="link-order"></a>
                     </td>
                     <td ng-bind="item.price"></td>
-                    <td ng-bind="item.invoicetype==1206?'普票':'专票'"></td>
+                    <td style="padding: 0;">
+                        <span ng-bind="item.invoicetype==1206?'普票':'专票'"></span>
+                        <b ng-click="lookInvoiceInfo(item)" class="invoice-info">开票信息</b></td>
                     <td ng-bind="item.invoicetitle"></td>
                     <td ng-bind="item.receiverName"></td>
                     <td class="address" title="{{item.area+'&#10;'+item.detailAddr}}">

+ 1 - 1
src/main/webapp/resources/view/vendor/forstore/vendor_component_batchapplylist.html

@@ -152,7 +152,7 @@
                         </tr>
                         </tbody>
                     </table>
-                    <div class="empty">
+                    <div class="empty" ng-if="allLength === 0">
                         <p class="empty-img">
                             <img src="static/img/all/empty-cart.png">
                         </p>

+ 3 - 0
src/main/webapp/resources/view/vendor/forstore/vendor_logistics.html

@@ -61,6 +61,9 @@
 	.com_tab ul li.active:after{
 		display: block
 	}
+	.modal-content .btn:hover {
+		border: 1px solid #5078cb
+	}
 </style>
 <!--右侧主体部分-->
 <div class="count user_right fr">

+ 13 - 3
src/main/webapp/resources/view/vendor/forstore/vendor_material.html

@@ -269,6 +269,8 @@
 	}
 	.search-check .search .keyword-material {
 		width: 260px;
+		border: #5078cb 1px solid;
+		border-radius: 2px;
 	}
 	.search-check .search button,.search-check .search a{
 		display: inline-block;
@@ -279,10 +281,11 @@
 		font-size: 14px;
 	}
 	.search-check .search button{
-		background: #d3e1fc;
-		border-radius: 0;
+		background: #5078cb;
 		border: #e2dbdb 1px solid;
 		border-left: none;
+		border-radius: 2px;
+		color: #fff;
 	}
 	.search-check .search a{
 		background: #5078cb;
@@ -301,13 +304,14 @@
 		font-size: 14px;
 		margin-right: 20px;
 		color: #fff !important;
-		background: #5078cb;
+		background: #4290f7;
 		position: relative;
 		display: inline-block;
 		height: 30px;
 		line-height: 30px;
 		padding: 0 10px;
 		cursor: pointer;
+		border-radius: 2px;
 	}
 	.search-check .check > .operate-btn .expander {
 		position: absolute;
@@ -1963,6 +1967,12 @@
 	.ToforAdminLook:hover .forAdminLook {
 		display: block;
 	}
+	.com-mall-del-box .content div a {
+		width: 70px;
+		display: inline-block;
+		height: 30px;
+		line-height: 30px;
+	}
 
 </style>
 <div class="user_right fr">

+ 6 - 4
src/main/webapp/resources/view/vendor/forstore/vendor_material_person.html

@@ -211,9 +211,9 @@
 		width: 340px;
 		float: left;
 		height: 34px;
-		border-radius: 0;
+		border-radius: 2px;
 		box-shadow: none;
-		border-right: none;
+		border:1px solid #5078cb;
 	}
 	.search-check .search button,.search-check .search a{
 		display: inline-block;
@@ -224,10 +224,12 @@
 		font-size: 14px;
 	}
 	.search-check .search button{
-		background: #d3e1fc;
+		background: #5078cb;
 		border-radius: 0;
-		border: #e2dbdb 1px solid;
+		border: #5078cb 1px solid;
 		border-left: none;
+		color: #fff;
+		border-radius: 2px;
 	}
 	.search-check .search a{
 		background: #5078cb;

+ 19 - 0
src/main/webapp/resources/view/vendor/forstore/vendor_onSale.html

@@ -807,6 +807,7 @@
         text-align: center;
         display: inline-block;
         margin-left: 300px;
+        background: #5078cb
     }
     .search-check .check > .operate-btn.more-operate:hover .expander {
         display: block;
@@ -985,6 +986,24 @@
         display: block;
     }
 
+    .search-check .search .form-control{
+        width: 340px;
+        float: left;
+        height: 34px;
+        border-radius: 2px;
+        box-shadow: none;
+        border:1px solid #5078cb;
+    }
+
+    .search-check .search button{
+        background: #5078cb;
+        border-radius: 0;
+        border: #5078cb 1px solid;
+        border-left: none;
+        color: #fff;
+        border-radius: 2px;
+    }
+
 </style>
 <div class="user_right fr">
     <!--货品管理-->

Some files were not shown because too many files changed in this diff