1
0
Переглянути джерело

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

lhm 3 роки тому
батько
коміт
d181ec6301

+ 8 - 5
kmall-admin/src/main/java/com/kmall/admin/dao/haikong/StockChangeDao.java

@@ -5,6 +5,7 @@ import com.kmall.manager.dao.BaseDao;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * Dao
@@ -17,11 +18,13 @@ public interface StockChangeDao extends BaseDao<StockChangeEntity> {
 
     /**
      * 更新审核状态
-     *
-     * @param ids  要更新的数据
-     * @param type 状态
+     * @param map
+     *  ids         要更新的数据
+     *  auditBy     修改人
+     *  auditTime   修改时间
+     *  type        状态
      */
-    void updateAuditStatus(@Param("array") String[] ids, @Param("type") String type);
+    void updateAuditStatus(@Param("map")Map map,@Param("ids")String[] ids);
 
-    List<StockChangeEntity> queryListByIds(String[] ids);
+    List<StockChangeEntity> queryListByIds(String... ids);
 }

+ 53 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/StockChangeEntity.java

@@ -1,6 +1,7 @@
 package com.kmall.admin.entity.haikong;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -27,6 +28,7 @@ public class StockChangeEntity implements Serializable {
     /**
      * 出、入库时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     private Date time;
     /**
      * 商户编号
@@ -87,6 +89,32 @@ public class StockChangeEntity implements Serializable {
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     private Date auditTime;
+    /**
+     * 规格
+     */
+
+    private String specification;
+    /**
+     * 商品名称
+     */
+
+    private String product;
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public String getProduct() {
+        return product;
+    }
+
+    public void setProduct(String product) {
+        this.product = product;
+    }
 
     /**
      * 设置:出、入库单单号,手动录入
@@ -309,4 +337,29 @@ public class StockChangeEntity implements Serializable {
     public Date getAuditTime() {
         return auditTime;
     }
+
+    @Override
+    public String toString() {
+        return "StockChangeEntity{" +
+                "id='" + id + '\'' +
+                ", type='" + type + '\'' +
+                ", time=" + time +
+                ", merchSn='" + merchSn + '\'' +
+                ", merch='" + merch + '\'' +
+                ", storeId=" + storeId +
+                ", store='" + store + '\'' +
+                ", thirdMerchSn='" + thirdMerchSn + '\'' +
+                ", audit='" + audit + '\'' +
+                ", thirdMerch='" + thirdMerch + '\'' +
+                ", remark='" + remark + '\'' +
+                ", createBy='" + createBy + '\'' +
+                ", createTime=" + createTime +
+                ", modifyBy='" + modifyBy + '\'' +
+                ", modifyTime=" + modifyTime +
+                ", auditBy='" + auditBy + '\'' +
+                ", auditTime=" + auditTime +
+                ", specification='" + specification + '\'' +
+                ", product='" + product + '\'' +
+                '}';
+    }
 }

+ 3 - 0
kmall-admin/src/main/java/com/kmall/admin/service/MerchService.java

@@ -69,4 +69,7 @@ public interface MerchService {
      * @return 删除条数
      */
     int deleteBatch(Integer[] ids);
+
+    MerchEntity queryByMerchSn(String merchSn);
+
 }

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

@@ -69,4 +69,9 @@ public class MerchServiceImpl
     public int deleteBatch(Integer[] ids) {
         return merchDao.deleteBatch(ids);
     }
+
+    @Override
+    public MerchEntity queryByMerchSn(String merchSn) {
+        return merchDao.findByMerchSn(merchSn);
+    }
 }

+ 65 - 6
kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/StockChangeServiceImpl.java

@@ -5,13 +5,13 @@ import cn.hutool.core.date.DateUtil;
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dto.StockChangeDto;
 import com.kmall.admin.dto.StockChangeRecordDto;
+import com.kmall.admin.entity.MerchEntity;
 import com.kmall.admin.entity.StoreEntity;
+import com.kmall.admin.entity.ThirdMerchantBizEntity;
 import com.kmall.admin.entity.haikong.StockChangeRecordEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.haikong.constant.Constants;
-import com.kmall.admin.service.GoodsService;
-import com.kmall.admin.service.ProductStoreRelaService;
-import com.kmall.admin.service.StoreService;
+import com.kmall.admin.service.*;
 import com.kmall.admin.service.haikong.StockChangeRecordService;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.utils.MapBeanUtil;
@@ -59,6 +59,14 @@ public class StockChangeServiceImpl implements StockChangeService {
     @Autowired
     private GoodsService goodsService;
 
+    @Autowired
+    private ThirdMerchantBizService thirdMerchantBizService;
+
+    @Autowired
+    private MerchService merchService;
+
+
+
     private static final Logger log = LoggerFactory.getLogger(StockChangeServiceImpl.class);
 
     @Override
@@ -78,6 +86,37 @@ public class StockChangeServiceImpl implements StockChangeService {
 
     @Override
     public int save(StockChangeEntity stockChange) {
+        List<StockChangeEntity> stockChangeEntities = stockChangeDao.queryListByIds(stockChange.getId());
+        if (!stockChangeEntities.isEmpty()){
+            log.info("工单号已存在:{}",stockChange.getId());
+            throw new RRException("工单号已存在!");
+        }
+        MerchEntity merchEntity = merchService.queryByMerchSn(stockChange.getMerchSn());
+        if (Objects.isNull(merchEntity)){
+            log.info("商户名称查询不到:{}",stockChange.getMerchSn());
+            throw new RRException("商户编号不存在:"+stockChange.getMerchSn());
+        }
+
+        StoreEntity storeEntity = storeService.queryObject(stockChange.getStoreId());
+        if (Objects.isNull(storeEntity)){
+            log.info("门店名称查询不到:{}",stockChange.getStoreId());
+            throw new RRException("门店id不存在:"+stockChange.getStoreId());
+        }
+        ThirdMerchantBizEntity thirdMerchangByCode = thirdMerchantBizService.getThirdMerchangByCode(stockChange.getThirdMerchSn());
+        if (Objects.isNull(thirdMerchangByCode)){
+
+
+              throw new RRException("第三方商户代码不存在:"+stockChange.getThirdMerchSn());
+        }
+        //商户名称
+        stockChange.setMerch(merchEntity.getMerchName());
+        //门店名称
+        stockChange.setStore(storeEntity.getStoreName());
+        //第三方商户名称
+        stockChange.setThirdMerch(thirdMerchangByCode.getThirdPartyMerchName());
+        SysUserEntity userEntity = ShiroUtils.getUserEntity();
+        stockChange.setCreateBy(userEntity.getUsername());
+        stockChange.setCreateTime(new Date());
         return stockChangeDao.save(stockChange);
     }
 
@@ -198,11 +237,15 @@ public class StockChangeServiceImpl implements StockChangeService {
         // 更新库存
         List<StockChangeEntity> inChangeEntities = new ArrayList<>();
         List<StockChangeEntity> outChangeEntities = new ArrayList<>();
+        List<StockChangeEntity> stockChangeEntities = queryListByIds(ids);
         // 审核成功才需要更新库存
         if (Constants.AuditStatus.AUDIT_SUCCESS.getType().equals(type)) {
-            List<StockChangeEntity> stockChangeEntities = queryListByIds(ids);
 
-            stockChangeEntities.forEach(stockChangeEntity -> {
+
+            stockChangeEntities.stream().filter(stockChangeEntity -> {
+                log.info("工单号为:{}的审核状态为成功",stockChangeEntity.getId());
+                return !stockChangeEntity.getAudit().equals(Constants.AuditStatus.AUDIT_SUCCESS.getType());
+            }).peek(stockChangeEntity -> {
                 String type1 = stockChangeEntity.getType();
                 if (Constants.StockChangeType.item_0.getType().equals(type1)
                 || Constants.StockChangeType.item_1.getType().equals(type1)) {
@@ -226,9 +269,25 @@ public class StockChangeServiceImpl implements StockChangeService {
                 productStoreRelaService.updateStockNumberByOutbound(stockChangeRecordEntities);
                 goodsService.updateStockNumberByOutbound(stockChangeRecordEntities);
             }
+        }else if (Constants.AuditStatus.AUDIT_REJECT.getType().equals(type)){
+            ArrayList<String> crjectIdList = new ArrayList<>();
+            for (StockChangeEntity stockChangeEntity : stockChangeEntities) {
+                if (!stockChangeEntity.getAudit().equals(Constants.AuditStatus.AUDIT_SUCCESS.getType())){
+                    crjectIdList.add(stockChangeEntity.getId());
+                }
+            }
+            if (crjectIdList.isEmpty()){
+                log.info("修改出入库单审核状态时,可修改的单号为空!");
+                throw new RRException("选中的单号都为审核成功");
+            }
+            ids =  crjectIdList.toArray(new String[crjectIdList.size()]);
         }
 
-        stockChangeDao.updateAuditStatus(ids, type);
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("auditBy", ShiroUtils.getUserEntity().getUsername());
+        map.put("auditTime",new Date());
+        map.put("type",type);
+        stockChangeDao.updateAuditStatus(map,ids);
     }
 
     @Override

+ 45 - 25
kmall-admin/src/main/resources/mybatis/mapper/haikong/StockChangeDao.xml

@@ -48,34 +48,54 @@
 
 	<select id="queryList" resultType="com.kmall.admin.entity.haikong.StockChangeEntity">
 		select
-    		`id`,
-    		`type`,
-    		`time`,
-    		`merch_sn`,
-    		`merch`,
-    		`store_id`,
-    		`store`,
-    		`third_merch_sn`,
-    		`audit`,
-    		`third_merch`,
-    		`remark`,
-    		`create_by`,
-    		`create_time`,
-    		`modify_by`,
-    		`modify_time`,
-    		`audit_by`,
-    		`audit_time`
-		from mall_stock_change
+    		c.`id`,
+			c.`type`,
+			c.`time`,
+			c.`merch_sn`,
+    		c.`merch`,
+    		c.`store_id`,
+    		c.`store`,
+			c.`third_merch_sn`,
+			c.`audit`,
+			c.`third_merch`,
+			c.`remark`,
+			c.`create_by`,
+			c.`create_time`,
+			c.`modify_by`,
+			c.`modify_time`,
+			c.`audit_by`,
+			c.`audit_time`,
+		    r.product,
+		    r.specification
+		from mall_stock_change c
+		left join mall_stock_change_record r
+		on c.id =r.parent_id
 		WHERE 1=1
 		<if test="name != null and name.trim() != ''">
-			AND name LIKE concat('%',#{name},'%')
+			AND c.name LIKE concat('%',#{name},'%')
+		</if>
+		<if test="orderId != null and orderId.trim() != ''">
+			AND c.id = #{orderId}
+		</if>
+		<if test="type != null and type.trim() != ''">
+			AND c.type = #{type}
+		</if>
+
+		<if test="time != null and time.trim() != ''">
+			AND c.time &gt; #{time}
+		</if>
+		<if test="audit != null and audit.trim() != ''">
+			AND c.audit = #{audit}
+		</if>
+		<if test="storeId != null and storeId.trim() != ''">
+			AND c.store_id = #{storeId}
 		</if>
-        <choose>
+		<choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}
             </when>
 			<otherwise>
-                order by id desc
+                order by c.id desc
 			</otherwise>
         </choose>
 		<if test="offset != null and limit != null">
@@ -162,11 +182,11 @@
 		where id = #{id}
 	</update>
 
-    <update id="updateAuditStatus">
-		update mall_stock_change set audit = #{type}
+    <update id="updateAuditStatus" >
+		update mall_stock_change set audit = #{map.type},audit_by =#{map.auditBy},audit_time=#{map.auditTime}
 		where id in
-		<foreach collection="array" item="item" open="(" separator="," close=")">
-			#{item}
+		<foreach collection="ids" item="ids" open="(" separator="," close=")">
+			#{ids}
 		</foreach>
 	</update>
 

+ 46 - 33
kmall-admin/src/main/webapp/WEB-INF/page/shop/stockchange.html

@@ -12,6 +12,34 @@
                 <i-col span="4">
                     <i-input v-model="q.name" @on-enter="query" placeholder="名称"/>
                 </i-col>
+                <i-col span="4">
+                    <i-input v-model="q.orderId" @on-enter="query" placeholder="单号"/>
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.type" placeholder="类型" filterable label-in-value>
+                        <i-option v-for="stockChangeType in stockChangeTypes" :value="stockChangeType.value"
+                                  :key="stockChangeType.id">{{stockChangeType.name}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-col span="4">
+                    <i-input v-model="q.time" @on-enter="query" placeholder="出入库时间" type="date" />
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.audit" placeholder="审核状态" filterable label-in-value >
+                        <i-option v-for="stockChangeAudit in stockChangeAudits" :value="stockChangeAudit.value"
+                                  :key="stockChangeAudit.id">{{stockChangeAudit.name}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.storeId" placeholder="门店" filterable label-in-value>
+                        <i-option v-for="store in stores" :value="store.id"
+                                  :key="store.id">{{store.storeName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+
                 <i-button @click="query">查询</i-button>
                 <i-button @click="reloadSearch">重置</i-button>
             </div>
@@ -31,7 +59,7 @@
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
 
                 <i-button type="primary" @click="audit('1')"><i class="fa fa-pencil-square-o"></i>&nbsp;审核通过</i-button>
-                <i-button type="error" @click="audit('0')"><i class="fa fa-pencil-square-o"></i>&nbsp;审核拒绝</i-button>
+                <i-button type="error" @click="audit('2')"><i class="fa fa-pencil-square-o"></i>&nbsp;审核拒绝</i-button>
 
             </div>
         </Row>
@@ -42,54 +70,39 @@
     <Card v-show="!showList">
         <p slot="title">{{title}}</p>
 		<i-form ref="formValidate" :model="stockChange" :rules="ruleValidate" :label-width="80">
+            <Form-item label="单号" prop="stockChangeId">
+                <i-input v-model="stockChange.id" placeholder="单号"/>
+            </Form-item>
             <Form-item label="出、入库类型,0:普通入库 1:调拨入库 2:销售出库 3:普通出库 4:调拨出库" prop="type">
-                <i-input v-model="stockChange.type" placeholder="出、入库类型,0:普通入库 1:调拨入库 2:销售出库 3:普通出库 4:调拨出库"/>
+                <i-select v-model="stockChange.type" placeholder="出、入库类型,0:普通入库 1:调拨入库 2:销售出库 3:普通出库 4:调拨出库" filterable label-in-value>
+                    <i-option v-for="stockChangeType in stockChangeTypes" :value="stockChangeType.value"
+                              :key="stockChangeType.id">{{stockChangeType.name}}
+                    </i-option>
+                </i-select>
             </Form-item>
             <Form-item label="出、入库时间" prop="time">
-                <i-input v-model="stockChange.time" placeholder="出、入库时间"/>
+                <i-input v-model="stockChange.time" placeholder="出、入库时间" type="datetime-local"/>
             </Form-item>
             <Form-item label="商户编号" prop="merchSn">
-                <i-input v-model="stockChange.merchSn" placeholder="商户编号"/>
-            </Form-item>
-            <Form-item label="商户名称" prop="merch">
-                <i-input v-model="stockChange.merch" placeholder="商户名称"/>
+                <i-input v-model="stockChange.merchSn" placeholder="商户编号" />
             </Form-item>
             <Form-item label="门店id" prop="storeId">
                 <i-input v-model="stockChange.storeId" placeholder="门店id"/>
             </Form-item>
-            <Form-item label="门店名称" prop="store">
-                <i-input v-model="stockChange.store" placeholder="门店名称"/>
-            </Form-item>
-            <Form-item label="第三方商户" prop="thirdMerchSn">
+            <Form-item label="第三方商户代码" prop="thirdMerchSn">
                 <i-input v-model="stockChange.thirdMerchSn" placeholder="第三方商户"/>
             </Form-item>
             <Form-item label="审核状态,0:待审核 1:审核成功 2:审核拒绝" prop="audit">
-                <i-input v-model="stockChange.audit" placeholder="审核状态,0:待审核 1:审核成功 2:审核拒绝"/>
-            </Form-item>
-            <Form-item label="第三方商户名称" prop="thirdMerch">
-                <i-input v-model="stockChange.thirdMerch" placeholder="第三方商户名称"/>
+                <i-select v-model="stockChange.audit" placeholder="审核状态" filterable label-in-value >
+                    <i-option v-for="stockChangeAudit in stockChangeAudits" :value="stockChangeAudit.value"
+                              :key="stockChangeAudit.id">{{stockChangeAudit.name}}
+                    </i-option>
+                </i-select>
             </Form-item>
             <Form-item label="备注" prop="remark">
                 <i-input v-model="stockChange.remark" placeholder="备注"/>
             </Form-item>
-            <Form-item label="创建人" prop="createBy">
-                <i-input v-model="stockChange.createBy" placeholder="创建人"/>
-            </Form-item>
-            <Form-item label="创建时间" prop="createTime">
-                <i-input v-model="stockChange.createTime" placeholder="创建时间"/>
-            </Form-item>
-            <Form-item label="修改人" prop="modifyBy">
-                <i-input v-model="stockChange.modifyBy" placeholder="修改人"/>
-            </Form-item>
-            <Form-item label="修改时间" prop="modifyTime">
-                <i-input v-model="stockChange.modifyTime" placeholder="修改时间"/>
-            </Form-item>
-            <Form-item label="审核人" prop="auditBy">
-                <i-input v-model="stockChange.auditBy" placeholder="审核人"/>
-            </Form-item>
-            <Form-item label="审核时间" prop="auditTime">
-                <i-input v-model="stockChange.auditTime" placeholder="审核时间"/>
-            </Form-item>
+
             <Form-item>
                 <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
                 <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>

+ 43 - 4
kmall-admin/src/main/webapp/js/shop/stockchange.js

@@ -23,6 +23,7 @@ $(function () {
 			{label: '商户名称', name: 'merch', index: 'merch', width: 80, align: 'center'},
 			{label: '门店id', name: 'storeId', index: 'store_id', width: 80, align: 'center'},
 			{label: '门店名称', name: 'store', index: 'store', width: 80, align: 'center'},
+			{label: '商品名称', name: 'product', index: 'product', width: 80, align: 'center'},
 			{label: '第三方商户', name: 'thirdMerchSn', index: 'third_merch_sn', width: 80, align: 'center'},
 			{label: '审核状态', name: 'audit', index: 'audit', width: 80, align: 'center', formatter: function (value) {
 					if (value == '0') {
@@ -41,7 +42,9 @@ $(function () {
 			{label: '修改人', name: 'modifyBy', index: 'modify_by', width: 80, align: 'center'},
 			{label: '修改时间', name: 'modifyTime', index: 'modify_time', width: 80, align: 'center'},
 			{label: '审核人', name: 'auditBy', index: 'audit_by', width: 80, align: 'center'},
-			{label: '审核时间', name: 'auditTime', index: 'audit_time', width: 80, align: 'center'}],
+			{label: '审核时间', name: 'auditTime', index: 'audit_time', width: 80, align: 'center'},
+			{label: '规格', name: 'specification', index: 'specification', width: 80, align: 'center'},
+		],
 		viewrecords: true,
         height: 550,
         rowNum: 10,
@@ -80,9 +83,18 @@ let vm = new Vue({
 			]
 		},
 		q: {
-		    name: ''
+		    name: '',
+			orderId:'',
+			type:'',
+			time:'',
+			audit:'',
+			storeId:''
 		},
 		uploadData:[],
+		stores:[],
+		stockChangeTypes:[],
+		stockChangeAudits:[],
+		saveOrUpdateState:true
 	},
 	methods: {
 		query: function () {
@@ -92,8 +104,10 @@ let vm = new Vue({
 			vm.showList = false;
 			vm.title = "新增";
 			vm.stockChange = {};
+			vm.saveOrUpdateState=true;
 		},
 		update: function (event) {
+			vm.saveOrUpdateState=false;
             let id = getSelectedRow();
 			if (id == null) {
 				alert("请选择数据!");
@@ -105,7 +119,9 @@ let vm = new Vue({
             vm.getInfo(id)
 		},
 		saveOrUpdate: function (event) {
-            let url = vm.stockChange.id == null ? "../stockchange/save" : "../stockchange/update";
+            let url = vm.saveOrUpdateState ? "../stockchange/save" : "../stockchange/update";
+			var time = vm.stockChange.time;
+			vm.stockChange.time = vm.timeFommater(vm.stockChange.time);
 			$.ajax({
 				type: "POST",
 			    url: url,
@@ -201,7 +217,7 @@ let vm = new Vue({
 			vm.showList = true;
             let page = $("#jqGrid").jqGrid('getGridParam', 'page');
 			$("#jqGrid").jqGrid('setGridParam', {
-                postData: {'name': vm.q.name},
+                postData: {'name': vm.q.name,'orderId':vm.q.orderId,'type':vm.q.type,'time':vm.q.time,'audit':vm.q.audit,"storeId":vm.q.storeId},
                 page: page
             }).trigger("reloadGrid");
             vm.handleReset('formValidate');
@@ -243,6 +259,29 @@ let vm = new Vue({
 			});
 			return promise; //通过返回一个promis对象解决
 
+		},
+		timeFommater:function (value) {
+			var dateee = new Date(value).toJSON();
+			var date = new Date(+new Date(dateee) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
+			return date;
 		}
+	},
+	mounted() {
+		// this.uploadList = this.$refs.upload.fileList;
+		/*$.get("../category/getCategorySelect", function (r) {
+            vm.queryCategories = r.list;
+        });*/
+		$.get("../sys/macro/queryMacrosByValue?value=stockChangeType", function (r) {
+			vm.stockChangeTypes = r.list;
+		});
+		$.get("../sys/macro/queryMacrosByValue?value=stockChangeAudit", function (r) {
+			vm.stockChangeAudits = r.list;
+		});
+		$.get("../store/queryAll", function (r) {
+			vm.stores = r.list;
+		});
+
+
+
 	}
 });