소스 검색

Merge branch 'master' of http://git.ds-bay.com/project/kmall-pt-general

zcb 4 년 전
부모
커밋
d255f420fc

+ 8 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsController.java

@@ -90,6 +90,8 @@ public class GoodsController {
         return R.ok().put("page", pageUtil);
     }
 
+
+
     /**
      * 查看信息
      */
@@ -106,6 +108,12 @@ public class GoodsController {
         return R.ok().put("goods", goods);
     }
 
+    @RequestMapping("/queryGoodsName")
+    public R queryGoodsName(@RequestParam String goodsName) {
+        List<GoodsEntity> goodsList = goodsService.queryByName(goodsName);
+        return R.ok().put("goodsList", goodsList);
+    }
+
     /**
      * 查看信息
      */

+ 30 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/PickUpCodeController.java

@@ -5,16 +5,19 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import com.kmall.admin.entity.PickUpCodeEntity;
 import com.kmall.admin.service.PickUpCodeService;
 import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.SessionUtils;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.utils.PageUtils;
 import com.kmall.common.utils.Query;
 import com.kmall.common.utils.R;
+import org.apache.commons.lang.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -161,6 +164,33 @@ public class PickUpCodeController {
         return R.ok().put("pickUpCode",pickUpCodeEntity );
     }
 
+    /**
+     * 确认提货
+     * @param orderSn
+     * @return
+     */
+    @RequestMapping("/confirmDelivery/{orderSn}")
+    public R confirmDelivery(@PathVariable("orderSn") String orderSn){
+        if(StringUtils.isEmpty(orderSn)){
+            return R.error("订单编号为空!");
+        }
+
+        PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(orderSn);
+        if(Objects.isNull(pickUpCodeEntity)){
+            return R.error("没有查找到该订单!");
+        }
+
+        if(!"1".equals(pickUpCodeEntity.getPickUpCodeStatus())){
+            return R.error("该订单还不能提货!");
+        }
+
+        pickUpCodeEntity.setPickUpCodeStatus("5");
+        pickUpCodeEntity.setModerSn(String.valueOf(ShiroUtils.getUserId()));
+        pickUpCodeEntity.setModTime(new Date());
+        pickUpCodeService.update(pickUpCodeEntity);
+
+        return R.ok("提货成功!");
+    }
 
     /**
      * 删除

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java

@@ -60,4 +60,6 @@ public interface GoodsDao extends BaseDao<GoodsEntity> {
      * @return
      */
     List<GoodsEntity> queryListByBarcode(@Param("prodBarcode")String prodBarcode, @Param("storeId")Integer storeId);
+
+    List<GoodsEntity> queryByName(@Param("goodsName")String goodsName);
 }

+ 6 - 0
kmall-admin/src/main/java/com/kmall/admin/service/GoodsService.java

@@ -185,4 +185,10 @@ public interface GoodsService {
 
     void updateForImgUrl(GoodsEntity goodsEntity);
 
+    /**
+     * 根据商品名称查询商品
+     * @param goodsName
+     * @return
+     */
+    List<GoodsEntity> queryByName(String goodsName);
 }

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -616,6 +616,11 @@ public class GoodsServiceImpl implements GoodsService {
         goodsDao.update(goodsEntity);
     }
 
+    @Override
+    public List<GoodsEntity> queryByName(String goodsName) {
+        return goodsDao.queryByName(goodsName);
+    }
+
     /**
      * 更新门店商品是否有修改字段
      * @param storeId

+ 2 - 1
kmall-admin/src/main/java/com/kmall/admin/websocket/WebSocketServer.java

@@ -79,6 +79,7 @@ public class WebSocketServer {
             // 查询所有的取货码
         Map<String,Object> dataParam = new HashMap<>();
         dataParam.put("pickUpCodeCreatetime",new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+        dataParam.put("unEqualPickUpCodeStatus", "5");
 //        dataParam.put("pickUpCodeStatus","0");
         pickUpList = pickUpCodeService.queryList(dataParam);
         pickUpCodeMap.put(param,pickUpList);
@@ -135,7 +136,6 @@ public class WebSocketServer {
      * @param session
      * @param message
      */
-
     public static void sendMessage(Session session, String message,String picNo) {
         try {
 //            List<PickUpCodeEntity> pickUpCodeEntities = new ArrayList<>();
@@ -156,6 +156,7 @@ public class WebSocketServer {
                 if("broadcast".equalsIgnoreCase(message)){
                     Map<String,Object> dataParam = new HashMap<>();
                     dataParam.put("pickUpCodeCreatetime",new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+                    dataParam.put("unEqualPickUpCodeStatus", "5");
                     List<PickUpCodeEntity> pickUpList = pickUpCodeService.queryList(dataParam);
                     data.put("pickUpCodeList", pickUpList);
                     String info = JSONObject.toJSONString(data);

+ 8 - 0
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -754,5 +754,13 @@
         and r.stock_num > 0 order by r.stock_num desc
     </select>
 
+    <select id="queryByName" resultType="com.kmall.admin.entity.GoodsEntity">
+        select id,name,sku,prod_barcode
+        from mall_goods
+        where 1=1
+        <if test="goodsName != null and goodsName != ''">
+            and name like concat('%',#{goodsName},'%');
+        </if>
+    </select>
 
 </mapper>

+ 1 - 1
kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml

@@ -2018,7 +2018,7 @@
             AND o.order_sn LIKE concat('%',#{orderSn},'%')
         </if>
         <if test="payName != null and payName.trim() != ''">
-            AND o.pay_name = LIKE concat('%',#{payName},'%')
+            AND o.pay_name LIKE concat('%',#{payName},'%')
         </if>
         <if test="payMobile != null and payMobile.trim() != ''">
             AND o.pay_mobile LIKE concat('%',#{pay_mobile},'%')

+ 4 - 1
kmall-admin/src/main/resources/mybatis/mapper/PickUpCodeDao.xml

@@ -66,6 +66,9 @@
 		<if test="pickUpCodeStatus != null and pickUpCodeStatus.trim() != ''">
 			AND `pick_up_code_status` = #{pickUpCodeStatus}
 		</if>
+		<if test="unEqualPickUpCodeStatus != null and unEqualPickUpCodeStatus.trim() != ''">
+			AND `pick_up_code_status` != #{unEqualPickUpCodeStatus}
+		</if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}
@@ -144,7 +147,7 @@
 
 
 	<select id="queryMaxPickUpCode" resultType="java.lang.String">
-		select pick_up_code_sn from mall_pick_up_code where pick_up_code_createtime &gt; #{nowTime} order by pick_up_code_sn desc limit 1
+		select pick_up_code_sn from mall_pick_up_code where pick_up_code_createtime &gt; #{nowTime} order by pick_up_code_createtime desc limit 1
 	</select>
 
 

+ 14 - 2
kmall-admin/src/main/resources/mybatis/mapper/SalesDataUploadDao.xml

@@ -43,6 +43,12 @@
 		<if test="name != null and name.trim() != ''">
 			AND u.file_name LIKE concat('%',#{name},'%')
 		</if>
+		<if test="startTime != null and startTime.trim() != ''">
+			AND u.creater_time >= #{startTime}
+		</if>
+		<if test="endTime != null and endTime.trim() != ''">
+			AND u.creater_time &lt;= #{endTime}
+		</if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}
@@ -62,9 +68,15 @@
         <if test="name != null and name.trim() != ''">
             AND file_name LIKE concat('%',#{name},'%')
         </if>
+		<if test="startTime != null and startTime.trim() != ''">
+			AND u.creater_time >= #{startTime}
+		</if>
+		<if test="endTime != null and endTime.trim() != ''">
+			AND u.creater_time &lt;= #{endTime}
+		</if>
 	</select>
-	 
-	<insert id="save" parameterType="com.kmall.admin.entity.SalesDataUploadEntity" useGeneratedKeys="true" keyProperty="fileId">
+
+    <insert id="save" parameterType="com.kmall.admin.entity.SalesDataUploadEntity" useGeneratedKeys="true" keyProperty="fileId">
 		insert into mall_sales_data_upload(
 			`file_name`,
 			`file_type`,

+ 1 - 0
kmall-admin/src/main/webapp/WEB-INF/page/sale/pickupcode.html

@@ -50,6 +50,7 @@
                     <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#83e7b4;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn,item.pickUpCodeSn)" v-if="item.pickUpCodeStatus == 1" >{{item.pickUpCodeSn}}</i-button>
                     <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#808080;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn,item.pickUpCodeSn)" v-if="item.pickUpCodeStatus == 2" >{{item.pickUpCodeSn}}</i-button>
                     <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#FF0000;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn,item.pickUpCodeSn)" v-if="item.pickUpCodeStatus == 4" >{{item.pickUpCodeSn}}</i-button>
+                    <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#ffc800;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn,item.pickUpCodeSn)" v-if="item.pickUpCodeStatus == 5" >{{item.pickUpCodeSn}}</i-button>
                 </div>
             </div>
         </div>

+ 40 - 2
kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html

@@ -20,6 +20,33 @@
             font-size: 1.3em;
             margin-left: 20px;
         }
+
+
+        .search_menu{
+            /*border-top:5px solid #3388FF;*/
+            /*display: none;*/
+            background-color: ghostwhite;
+            position: absolute;
+            z-index: 999;
+            /*top:30px;*/
+            width:87%;
+        }
+        .search_menu ul{
+            margin-bottom: 0;  //去除ul的底部外边距
+        }
+        .search_menu li {
+            padding: 5px;
+            font-size: 1.1em;
+            cursor: pointer;
+            overflow: hidden;
+            white-space: nowrap;
+        }
+        .search_menu li:hover{
+            background-color: beige;
+        }
+        .search:hover .search_menu {
+            display: block;
+        }
     </style>
     <link rel="stylesheet" href="${rc.contextPath}/statics/plugins/jqgrid/ui.jqgrid-bootstrap.css">
     <!--<link rel="stylesheet" href="${rc.contextPath}/statics/css/sale.css">-->
@@ -58,10 +85,20 @@
     <div class="container-fluid" style="margin-top: 15px">
         <div id="content" class="row-fluid">
             <div class="col-md-3">
+                <div>
+                    <i-input class="search" placeholder="输入或扫码商品条形码" id="saomiao" v-model.trim='prodBarcode' @on-enter="searchQuery(prodBarcode)"/>
+                </div>
+                <div v-show="prodBarcode" class="search_menu">
+                    <ul>
+                        <li v-for="item in searchGoodsList" :key="item.id" @click="searchQuery(item.prodBarcode)" title="item.prodBarcode">
+                            {{item.name}}
+                        </li>
+                    </ul>
+                </div>
                 <ul class="list-unstyled">
-                    <li >
+                    <!--<li >
                         <i-input v-model="prodBarcode" @on-enter="query" placeholder="输入或扫码商品条形码" id="saomiao"  />
-                    </li>
+                    </li>-->
                     <li style="margin-top: 50px;" >
                         <div v-show="goodsDetail" style="font-size: 1.2em">
                             <img style="height: 400px;width: 400px;" :src="goods.primaryPicUrl" class="img-rounded"/>
@@ -308,6 +345,7 @@
                         </div>
                         <div class="modal-footer">
                             <button type="button" style="margin:0 30px 0 20px;font-size: 20px;float: left" class="btn ivu-btn-error" @click="refundOrder()" id="refundOrder" data-dismiss="modal">退款</button>
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-warning" @click="confirmDelivery" id="confirmDelivery" data-dismiss="modal">确定提货</button>
                             <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-primary" @click="resendNotice" id="resendNotice" data-dismiss="modal">重发通知</button>
                             <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-primary" @click="resendWaybill" id="resendWaybill" data-dismiss="modal">重发运单</button>
                             <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-primary" @click="resendPayment" id="resendPayment" data-dismiss="modal">重发支付单</button>

+ 6 - 0
kmall-admin/src/main/webapp/WEB-INF/page/sale/salesdataupload.html

@@ -12,6 +12,12 @@
                 <i-col span="4">
                     <i-input v-model="q.name" @on-enter="query" placeholder="名称"/>
                 </i-col>
+                <i-col span="3">
+                    <Date-picker v-model="q.startTime" placeholder="上传开始时间"/>
+                </i-col>
+                <i-col span="3">
+                    <Date-picker v-model="q.endTime" placeholder="上传结束时间"/>
+                </i-col>
                 <i-button @click="query">查询</i-button>
                 <i-button @click="reloadSearch">重置</i-button>
             </div>

+ 14 - 4
kmall-admin/src/main/webapp/js/sale/pickupcode.js

@@ -124,11 +124,17 @@ let vm = new Vue({
 		currentOrderNo: null,
 		pickUpCode: null,
 		tax:0,
-		response: ""
+		response: "",
+
+		isQuery: false
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			if(vm.isQuery){
+				vm.reload();
+			}else {
+				vm.isQuery = true;
+			}
 		},
 		/*add: function () {
 			vm.showList = false;
@@ -203,15 +209,19 @@ let vm = new Vue({
             vm.reload();
 		},
 		reload: function () {
+			if(!vm.q.startTime || !vm.q.endTime){
+				alert("请选择下单时间在进行查询!");
+				return ;
+			}
+
 			let url = "../order/pickUpCodeList";
 			let params = {
 				'orderSn': vm.q.orderSn,
 				'payName': vm.q.payName,
 				'payMobile': vm.q.payMobile,
-				'startTime': vm.timestampToDate(vm.q.startTime)/* ? vm.timestampToDate(vm.q.startTime) : new Date().toLocaleDateString().replace(/\//g, '-')*/,
+				'startTime': vm.timestampToDate(vm.q.startTime),
 				'endTime': vm.timestampToDate(vm.q.endTime)
 			}
-			console.log(JSON.stringify(params));
 			$.ajax({
 				type: "POST",
 				url: url,

+ 66 - 13
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -3,7 +3,7 @@ $(function () {
     openWebSocket();
     queryAssistantInfo();
 
-
+    vm.queryGoods();
 });
 
 window.onbeforeunload = function(){
@@ -482,9 +482,15 @@ function calculateGoodsByZhjsp(r){
         });
     }
     console.log(vm.compareCombinationPrice);
-
 }
 
+const delay = (function () {
+    let timer = 0;
+    return function (callback, ms) {
+        clearTimeout(timer);
+        timer = setTimeout(callback.ms)
+    }
+});
 
 let vm = new Vue({
     el: '#rrapp',
@@ -567,23 +573,64 @@ let vm = new Vue({
         // 支付码
         parCode : "",
         // 总件数
-        totalCount:0
+        totalCount:0,
+
+        searchGoodsList: [],
+        timer: null,
+        searchGoods: []
+    },
+    watch: {
+        prodBarcode (){
+            if(vm.timer){
+                clearTimeout(vm.timer);
+            }
+            if(!vm.prodBarcode){
+                this.searchGoodsList = [];
+                return ;
+            }
+            vm.timer = null;
+            vm.timer = setTimeout(() => {
+                vm.queryGoods();
+            }, 1000*15);
+
+            let result = [];
+            for(let i=0; i<vm.searchGoods.length; i++){
+                if(vm.searchGoods[i].name.indexOf(vm.prodBarcode) > -1){
+                    if(result.length <= 9){
+                        result.push(vm.searchGoods[i]);
+                    }else{
+                        break;
+                    }
+                }
+            }
+            vm.searchGoodsList = result;
+        }
     },
     methods: {
-
         myDebounce:debounce(function(){
-
-
             toPayOrder();
         },2000),
 
+        queryGoods: function(){
+            $.get("../goods/queryGoodsName?goodsName=", function (r) {
+                if (r.code == 0) {
+                    vm.searchGoods = r.goodsList;
+                } else {
+                    alert(r.msg);
+                }
+            });
+        },
+        searchQuery: function (prodBarcode){
+            vm.prodBarcode = prodBarcode;
+            vm.query();
+        },
         queryOrderStatus:function(){
             $.get("../order/queryOrderStatus/"+vm.orderSn, function (r) {
                 alert(r.msg);
             });
         },
         query: function () {
-            vm.storeId = sessionStorage.getItem("storeId");;
+            vm.storeId = sessionStorage.getItem("storeId");
             var thisGoods = {};
             var overflowLi = this.$refs.overflowLi;
             $.get("../goods/details/"+vm.prodBarcode+"/"+vm.storeId, function (r) {
@@ -1036,7 +1083,14 @@ let vm = new Vue({
                     }
                 });
             })
-
+        },
+        //确认提货
+        confirmDelivery: function(){
+            confirm('确认提货吗?', function () {
+                $.get("../pickupcode/confirmDelivery/"+vm.orderEntity.orderSn, function (r) {
+                    alert(r.msg);
+                });
+            })
         },
         retrySendOrder:function(){
         },
@@ -1082,7 +1136,7 @@ let vm = new Vue({
 });
 
 function getPrintContent(ticket) {
-    var content = "<div style=\"width: 250px;font-family: 微软雅黑;font-size: 15px;\">";
+    var content = "<div style=\"width: 300px;font-family: 微软雅黑;font-size: 15px;\">";
     // // 打印ogo
     // content += "<div style=\"text-align: center;width: 100%;height: 50px;\">";
     // // content += "<img src='./../../statics/img/cw_logo.png' />";
@@ -1140,7 +1194,6 @@ function printArea(content) {
 
     frameWindow.focus();
     frameWindow.print();
-    frameWindow.print();
     alert('打印小票完成');
     /*if(!vm.firstPrint){
         setTimeout(function() {
@@ -1201,8 +1254,8 @@ function openWebSocket() {
         //无法使用wss,浏览器打开WebSocket时报错
         //ws对应http、wss对应https。
         // webSocket = new WebSocket("ws://183.62.225.124:8080/ws/server/"+storeId);
-        // webSocket = new WebSocket("ws://127.0.0.1:8080//ws/server/"+storeId);
-        webSocket = new WebSocket("wss://cb.k1net.cn/ws/server/"+storeId);
+        webSocket = new WebSocket("ws://127.0.0.1:8070//ws/server/"+storeId);
+        // webSocket = new WebSocket("wss://cb.k1net.cn/ws/server/"+storeId);
         if (webSocket.readyState === webSocket.CONNECTING) {
             console.log('1.连接正在打开......');
         }
@@ -1285,7 +1338,7 @@ function parsedate(value){
 }
 
 function getPrintContentOrder(ticket) {
-    var content = "<div style=\"width: 250px;font-family: 微软雅黑;font-size: 8px;\">";
+    var content = "<div style=\"width: 300px;font-family: 微软雅黑;font-size: 8px;\">";
     // 打印ogo
     content += "<div style=\"text-align: center;width: 100%;height: 260px;\">";
     content += "<img src='/statics/img/cw_logo2.png' style='width: 100%;height: 100%;' />";

+ 28 - 9
kmall-admin/src/main/webapp/js/sale/salesdataupload.js

@@ -45,13 +45,15 @@ let vm = new Vue({
         showList: true,
         title: null,
 		salesDataUpload: {},
-		ruleValidate: {
+		/*ruleValidate: {
 			name: [
 				{required: true, message: '名称不能为空', trigger: 'blur'}
 			]
-		},
+		},*/
 		q: {
-		    name: ''
+		    name: '',
+			startTime: '',
+			endTime: ''
 		}
 	},
 	methods: {
@@ -128,9 +130,19 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
+
+			if(!vm.q.startTime && !vm.q.endTime){
+				alert("请选择上传时间!");
+				return;
+			}
+
             let page = $("#jqGrid").jqGrid('getGridParam', 'page');
 			$("#jqGrid").jqGrid('setGridParam', {
-                postData: {'name': vm.q.name},
+                postData: {
+                	'name': vm.q.name,
+					'startTime': vm.timestampToDate(vm.q.startTime)+" 00:00:00",
+					'endTime': vm.timestampToDate(vm.q.endTime)+" 23:59:59"
+				},
                 page: page
             }).trigger("reloadGrid");
             vm.handleReset('formValidate');
@@ -162,12 +174,19 @@ let vm = new Vue({
 			});
 		},
 		download: function (event){
-			debugger;
-			let fileData = getSelectedRowData();
-			if (fileData.length != 1 && fileData.length != undefined){
-				return;
+			let fileIds = getSelectedRows();
+			if(null != fileIds && fileIds.length < 3){
+				for(let i=0; i<fileIds.length; i++){
+					let fileData = $("#jqGrid").jqGrid('getRowData', fileIds[i]);
+					window.location.href = "../salesdataupload/download?filePath="+fileData.uploadAddress+"&fileName="+fileData.fileName+"&fileId="+fileData.fileId;
+				}
+			}
+		},
+		timestampToDate: function (timestamp){
+			if(timestamp){
+				return new Date(timestamp).toLocaleDateString().replace(/\//g, '-')
 			}
-			window.location.href = "../salesdataupload/download?filePath="+fileData.uploadAddress+"&fileName="+fileData.fileName+"&fileId="+fileData.fileId;
+			return '';
 		}
 	}
 });