From dfd61f47ab99e875d6dbac51e96ef27b7d882d51 Mon Sep 17 00:00:00 2001
From: 王佳豪 <g675230687@126.com>
Date: 星期六, 29 五月 2021 11:02:55 +0800
Subject: [PATCH] 库存同步功能

---
 src/main/java/zy/cloud/wms/manager/mapper/WrkLocSyncMapper.java            |   18 +
 src/main/java/zy/cloud/wms/manager/service/WrkLocSyncService.java          |   13 +
 src/main/java/zy/cloud/wms/manager/controller/LocSyncController.java       |  131 +++++++++++++
 src/main/resources/mapper/WrkLocSyncMapper.xml                             |   34 +++
 src/main/webapp/static/js/locSync/locSync.js                               |  140 ++++++++++++++
 src/main/java/zy/cloud/wms/manager/service/impl/LocSyncServiceImpl.java    |   23 ++
 src/main/java/zy/cloud/wms/manager/service/impl/WrkLocSyncServiceImpl.java |   27 ++
 version/v1.0.2/change_log                                                  |   38 +++
 src/main/java/zy/cloud/wms/manager/entity/LocSum.java                      |   21 ++
 src/main/java/zy/cloud/wms/manager/mapper/LocSyncMapper.java               |   16 +
 src/main/java/zy/cloud/wms/manager/service/LocSyncService.java             |   12 +
 src/main/resources/mapper/LocSyncMapper.xml                                |   23 ++
 src/main/java/zy/cloud/wms/manager/entity/WrkLocSync.java                  |   30 +++
 src/main/webapp/views/locSync/locSync.html                                 |   36 +++
 14 files changed, 562 insertions(+), 0 deletions(-)

diff --git a/src/main/java/zy/cloud/wms/manager/controller/LocSyncController.java b/src/main/java/zy/cloud/wms/manager/controller/LocSyncController.java
new file mode 100644
index 0000000..aebec2f
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/controller/LocSyncController.java
@@ -0,0 +1,131 @@
+package zy.cloud.wms.manager.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.common.SnowflakeIdWorker;
+import com.core.exception.CoolException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import zy.cloud.wms.common.model.BillDto;
+import zy.cloud.wms.common.service.erp.ErpService;
+import zy.cloud.wms.common.web.BaseController;
+import zy.cloud.wms.manager.entity.LocSum;
+import zy.cloud.wms.manager.entity.Pakout;
+import zy.cloud.wms.manager.entity.WrkLocSync;
+import zy.cloud.wms.manager.service.LocSyncService;
+import zy.cloud.wms.manager.service.PakoutService;
+import zy.cloud.wms.manager.service.WrkLocSyncService;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@Slf4j
+public class LocSyncController extends BaseController {
+    @Autowired
+    private LocSyncService locSyncService;
+    @Autowired
+    private WrkLocSyncService wrkLocSyncService;
+    @Autowired
+    private ErpService erpService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+
+    @RequestMapping(value = "/locSync/queryLocSum")
+    @ManagerAuth(memo = "鑾峰彇鎬诲簱瀛樻竻鍗�")
+    public R queryLocSum() {
+        return R.ok(locSyncService.queryLocSum());
+    }
+
+    @RequestMapping(value = "/locSync/syncLocWrkCount")
+    @ManagerAuth(memo = "鑾峰彇搴撳瓨鍚屾涓婁紶娓呭崟鏁伴噺")
+    public R getSyncLocWrkCount() {
+        return R.ok(wrkLocSyncService.getSyncLocWrkCount());
+    }
+
+
+    @RequestMapping(value = "/locSync/insertWrklocSync")
+    @ManagerAuth(memo = "鍚屾涓婁紶娓呭崟鏁版嵁鎻掑叆")
+    public R insertWrklocSync(@RequestBody JSONObject param) {
+        List<WrkLocSync> list = JSONObject.parseArray(param.getJSONArray("list").toJSONString(), WrkLocSync.class);
+        // 鎻掑叆鍒涘缓浜哄憳鍜屽垱寤烘椂闂�
+        if (list.size() > 0) {
+            for (WrkLocSync elist : list) {
+                elist.setCreateBy(getUserId());
+                elist.setCreateTime(new Date());
+            }
+        }
+        Integer result = 0;
+        result = wrkLocSyncService.insertWrkLocSync(list);
+        return R.ok(result);
+    }
+
+
+    @RequestMapping(value = "/locSync/updateWrklocSync")
+    @ManagerAuth(memo = "娓呯┖鍚屾涓婁紶娓呭崟鏁版嵁锛屽苟鎻掑叆")
+    public R updateWrklocSync(@RequestBody JSONObject param) {
+        // 娓呯┖鍚屾涓婁紶娓呭崟鏁版嵁
+        if (!wrkLocSyncService.clearWrkLocSync()) {
+            throw new CoolException("鍚屾涓婁紶娓呭崟鏁版嵁娓呯┖澶辫触锛岃鑱旂郴绠$悊鍛�");
+        }
+        ;
+        List<WrkLocSync> list = JSONObject.parseArray(param.getJSONArray("list").toJSONString(), WrkLocSync.class);
+        // 鎻掑叆鍒涘缓浜哄憳鍜屽垱寤烘椂闂�
+        if (list.size() > 0) {
+            for (WrkLocSync elist : list) {
+                elist.setCreateBy(getUserId());
+                elist.setCreateTime(new Date());
+            }
+        }
+        Integer result = 0;
+        result = wrkLocSyncService.insertWrkLocSync(list);
+        return R.ok(result);
+    }
+
+    /* 鍚屾涓婁紶erp[uploadBill] 鍗曟嵁涓婁紶 */
+    @Scheduled(cron = "0/5 * * * * ? ")
+    public void execute() {
+        List<String> orderList = new ArrayList<>();
+        orderList.add("state");
+        orderList.add("create_time");
+        List<WrkLocSync> syncList = wrkLocSyncService.selectList(new EntityWrapper<WrkLocSync>().orderDesc(orderList));
+        // 鍚屾涓婁紶娓呭崟澶勭悊锛屽彇绗竴鏉�
+        if (!Cools.isEmpty(syncList)) {
+            WrkLocSync executeData = syncList.get(0);
+            // 璁㈠崟鍙�
+            String docNum = String.valueOf(snowflakeIdWorker.nextId());
+            // 璁㈠崟绫诲瀷 34閲囪喘鍗�
+            Integer docId = 34;
+            List<BillDto> dtos = new ArrayList<BillDto>();
+            BillDto res = new BillDto();
+            res.setMatnr(executeData.getMatnr());
+            res.setQty(executeData.getQty());
+            dtos.add(res);
+            if (erpService.uploadBill(dtos, docId, docNum)) {
+                // 鎴愬姛鍚庡垹闄や换鍔�
+                if (!wrkLocSyncService.delete(new EntityWrapper<WrkLocSync>().eq("matnr", executeData.getMatnr()))) {
+                    log.info("搴撳瓨鍚屾鍒犻櫎浠诲姟澶辫触,浠诲姟matnr=" + executeData.getMatnr() + "鏃堕棿=" + new Date());
+                }
+            } else {
+                // 澶辫触鍚庡皢浠诲姟鐘舵�乻tate鏇存柊涓篘
+                executeData.setState("X");
+                executeData.setUpdateBy(getUserId());
+                executeData.setCreateTime(new Date());
+                if(!wrkLocSyncService.update(executeData, new EntityWrapper<WrkLocSync>().eq("matnr", executeData.getMatnr()))) {
+                    log.info("搴撳瓨鍚屾鏇存柊浠诲姟澶辫触,浠诲姟matnr=" + executeData.getMatnr() + "鏃堕棿=" + new Date());
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/zy/cloud/wms/manager/entity/LocSum.java b/src/main/java/zy/cloud/wms/manager/entity/LocSum.java
new file mode 100644
index 0000000..df24e54
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/entity/LocSum.java
@@ -0,0 +1,21 @@
+package zy.cloud.wms.manager.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@TableName("asr_sumloc_view")
+@Data
+public class LocSum implements Serializable {
+    private String matnr;
+
+    private String maktx;
+
+    private Double anfme;
+
+    private String altme;
+
+    private String memo;
+}
diff --git a/src/main/java/zy/cloud/wms/manager/entity/WrkLocSync.java b/src/main/java/zy/cloud/wms/manager/entity/WrkLocSync.java
new file mode 100644
index 0000000..1224420
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/entity/WrkLocSync.java
@@ -0,0 +1,30 @@
+package zy.cloud.wms.manager.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("asr_wrk_loc_sync")
+@Data
+public class WrkLocSync implements Serializable {
+    private String matnr;
+
+    private Double qty;
+
+    private String state;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("create_by")
+    private Long createBy;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("update_by")
+    private Long updateBy;
+}
diff --git a/src/main/java/zy/cloud/wms/manager/mapper/LocSyncMapper.java b/src/main/java/zy/cloud/wms/manager/mapper/LocSyncMapper.java
new file mode 100644
index 0000000..7bf2271
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/mapper/LocSyncMapper.java
@@ -0,0 +1,16 @@
+package zy.cloud.wms.manager.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+import zy.cloud.wms.manager.entity.LocSum;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface LocSyncMapper extends BaseMapper<LocSum> {
+    List<LocSum> queryLocSum();
+
+    Integer getSyncLocWrkCount();
+}
diff --git a/src/main/java/zy/cloud/wms/manager/mapper/WrkLocSyncMapper.java b/src/main/java/zy/cloud/wms/manager/mapper/WrkLocSyncMapper.java
new file mode 100644
index 0000000..023ae58
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/mapper/WrkLocSyncMapper.java
@@ -0,0 +1,18 @@
+package zy.cloud.wms.manager.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+import zy.cloud.wms.manager.entity.WrkLocSync;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface WrkLocSyncMapper extends BaseMapper<WrkLocSync> {
+    Integer getSyncLocWrkCount();
+
+    Integer insertWrkLocSync(List<WrkLocSync> list);
+
+    Boolean clearWrkLocSync();
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/LocSyncService.java b/src/main/java/zy/cloud/wms/manager/service/LocSyncService.java
new file mode 100644
index 0000000..0a1ea76
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/LocSyncService.java
@@ -0,0 +1,12 @@
+package zy.cloud.wms.manager.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import zy.cloud.wms.manager.entity.LocSum;
+
+import java.util.List;
+
+public interface LocSyncService extends IService<LocSum> {
+    List<LocSum> queryLocSum();
+
+    Integer getSyncLocWrkCount();
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/WrkLocSyncService.java b/src/main/java/zy/cloud/wms/manager/service/WrkLocSyncService.java
new file mode 100644
index 0000000..510e721
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/WrkLocSyncService.java
@@ -0,0 +1,13 @@
+package zy.cloud.wms.manager.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import zy.cloud.wms.manager.entity.WrkLocSync;
+import java.util.List;
+
+public interface WrkLocSyncService extends IService<WrkLocSync> {
+    Integer getSyncLocWrkCount();
+
+    Integer insertWrkLocSync(List<WrkLocSync> list);
+
+    Boolean clearWrkLocSync();
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/LocSyncServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/LocSyncServiceImpl.java
new file mode 100644
index 0000000..0c0975b
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/impl/LocSyncServiceImpl.java
@@ -0,0 +1,23 @@
+package zy.cloud.wms.manager.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import zy.cloud.wms.manager.mapper.LocSyncMapper;
+import org.springframework.stereotype.Service;
+import zy.cloud.wms.manager.entity.LocSum;
+import zy.cloud.wms.manager.service.LocSyncService;
+
+import java.util.List;
+
+@Service("locSyncService")
+public class LocSyncServiceImpl extends ServiceImpl<LocSyncMapper, LocSum> implements LocSyncService{
+
+    @Override
+    public List<LocSum> queryLocSum() {
+        return this.baseMapper.queryLocSum();
+    }
+
+    @Override
+    public Integer getSyncLocWrkCount() {
+        return this.baseMapper.getSyncLocWrkCount();
+    }
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/WrkLocSyncServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/WrkLocSyncServiceImpl.java
new file mode 100644
index 0000000..311449b
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/impl/WrkLocSyncServiceImpl.java
@@ -0,0 +1,27 @@
+package zy.cloud.wms.manager.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import zy.cloud.wms.manager.entity.WrkLocSync;
+import zy.cloud.wms.manager.mapper.WrkLocSyncMapper;
+import zy.cloud.wms.manager.service.WrkLocSyncService;
+
+import java.util.List;
+
+@Service("wrkLocSyncService")
+public class WrkLocSyncServiceImpl extends ServiceImpl<WrkLocSyncMapper, WrkLocSync> implements WrkLocSyncService {
+    @Override
+    public Integer getSyncLocWrkCount() {
+        return this.baseMapper.getSyncLocWrkCount();
+    }
+
+    @Override
+    public Integer insertWrkLocSync(List<WrkLocSync> list) {
+        return this.baseMapper.insertWrkLocSync(list);
+    }
+
+    @Override
+    public Boolean clearWrkLocSync() {
+        return this.baseMapper.clearWrkLocSync();
+    }
+}
diff --git a/src/main/resources/mapper/LocSyncMapper.xml b/src/main/resources/mapper/LocSyncMapper.xml
new file mode 100644
index 0000000..f88e34c
--- /dev/null
+++ b/src/main/resources/mapper/LocSyncMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="zy.cloud.wms.manager.mapper.LocSyncMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="zy.cloud.wms.manager.entity.LocSum">
+        <result column="matnr" property="matnr" />
+        <result column="maktx" property="maktx" />
+        <result column="anfme" property="anfme" />
+        <result column="altme" property="altme" />
+        <result column="memo" property="memo" />
+    </resultMap>
+
+    <select id="queryLocSum" resultMap="BaseResultMap">
+        select matnr,maktx,sum(anfme) as anfme,altme, memo from asr_sumloc_view group by matnr,maktx,altme,memo
+    </select>
+
+    <select id="getSyncLocWrkCount" resultType="integer">
+        select count(*) from asr_wrk_loc_sync;
+    </select>
+
+
+</mapper>
diff --git a/src/main/resources/mapper/WrkLocSyncMapper.xml b/src/main/resources/mapper/WrkLocSyncMapper.xml
new file mode 100644
index 0000000..ebf33cb
--- /dev/null
+++ b/src/main/resources/mapper/WrkLocSyncMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="zy.cloud.wms.manager.mapper.WrkLocSyncMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="zy.cloud.wms.manager.entity.WrkLocSync">
+        <result column="matnr" property="matnr" />
+        <result column="qty" property="qty" />
+        <result column="state" property="state" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+    <select id="getSyncLocWrkCount" resultType="integer">
+        select count(*) from asr_wrk_loc_sync;
+    </select>
+
+    <insert id="insertWrkLocSync">
+        BEGIN
+        <foreach collection="list" item="item" index="index">
+            INSERT INTO asr_wrk_loc_sync (matnr, qty, state, create_time, create_by, update_time, update_by)
+            VALUES (#{item.matnr,jdbcType=VARCHAR}, #{item.qty,jdbcType=DECIMAL}, 'N',
+            #{item.createTime,jdbcType=TIMESTAMP},#{item.createBy,jdbcType=DECIMAL},
+            #{item.updateTime,jdbcType=TIMESTAMP}, #{item.updateBy,jdbcType=DECIMAL})
+        </foreach>
+        END;
+    </insert>
+
+    <delete id="clearWrkLocSync">
+        DELETE FROM asr_wrk_loc_sync
+    </delete>
+</mapper>
diff --git a/src/main/webapp/static/js/locSync/locSync.js b/src/main/webapp/static/js/locSync/locSync.js
new file mode 100644
index 0000000..00e4f42
--- /dev/null
+++ b/src/main/webapp/static/js/locSync/locSync.js
@@ -0,0 +1,140 @@
+var syncTableData = [];
+
+layui.use(['table', 'laydate', 'form'], function () {
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#locSum',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl + '/locSync/queryLocSum',
+        page: true,
+        // limit: 16,
+        // limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {field: 'matnr', align: 'center', title: '鐗╂枡缂栫爜', width: 200}
+            , {field: 'maktx', align: 'center', title: '鐗╂枡鍚嶇О'}
+            , {field: 'anfme', align: 'center', title: '鎬绘暟閲廩骞充粨+绔嬪簱]', width: 180}
+            , {field: 'altme', align: 'center', title: '鍗曚綅', width: 80}
+            , {field: 'memo', align: 'center', title: '澶囨敞'}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl + "/";
+            }
+            pageCurr = curr;
+            limit();
+            syncTableData = res.data;
+        }
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(locSum)', function (obj) {
+        switch (obj.event) {
+            case 'btnSync':
+                $.ajax({
+                    url: baseUrl + "/locSync/syncLocWrkCount",
+                    headers: {'token': localStorage.getItem('token')},
+                    data: {},
+                    method: 'POST',
+                    traditional: true,
+                    success: function (res) {
+                        if (res.code === 200) {
+                            var msg = '';
+                            if (res.data == 0) {
+                                msg = '纭畾瑕佸悓姝ュ簱瀛樻暟鎹悧?'
+                            } else {
+                                msg = '鍚屾浠诲姟姝e湪杩涜锛岀‘瀹氳涓骞堕噸鏂板悓姝ュ悧?'
+                            }
+                            layer.confirm(msg, {
+                                    shadeClose: true
+                                    , btn: ['纭畾']
+                                }, function () {
+                                    var paramList = [];
+                                    syncTableData.map(function (e) {
+                                        paramList.push({
+                                            matnr: e.matnr,
+                                            qty: e.anfme,
+                                        });
+                                    });
+                                    var param = {
+                                        'list': paramList,
+                                    };
+                                    if (res.data > 0) {
+                                        // 娓呯┖鍚屾涓婁紶娓呭崟鏁版嵁,鍐嶈繘琛屾彃鍏ユ暟鎹�
+                                        $.ajax({
+                                            url: baseUrl + "/locSync/updateWrklocSync",
+                                            headers: {'token': localStorage.getItem('token')},
+                                            data: JSON.stringify(param),
+                                            dataType: 'json',
+                                            contentType: 'application/json;charset=UTF-8',
+                                            method: 'POST',
+                                            success: function (res) {
+                                                if (res.code === 200) {
+                                                    layer.msg("搴撳瓨鍚屾涓紒");
+                                                } else if (res.code === 403) {
+                                                    top.location.href = baseUrl + "/";
+                                                } else {
+                                                    layer.msg(res.msg)
+                                                }
+                                            }
+                                        });
+                                    } else {
+                                        // 璋冪敤鍚屾涓婁紶娓呭崟鏁版嵁鎻掑叆鎺ュ彛
+                                        $.ajax({
+                                            url: baseUrl + "/locSync/insertWrklocSync",
+                                            headers: {'token': localStorage.getItem('token')},
+                                            data: JSON.stringify(param),
+                                            dataType: 'json',
+                                            contentType: 'application/json;charset=UTF-8',
+                                            method: 'POST',
+                                            success: function (res) {
+                                                if (res.code === 200) {
+                                                    layer.msg("搴撳瓨鍚屾涓紒");
+                                                } else if (res.code === 403) {
+                                                    top.location.href = baseUrl + "/";
+                                                } else {
+                                                    layer.msg(res.msg)
+                                                }
+                                            }
+                                        });
+                                    }
+                                    layer.closeAll();
+                                }
+                            );
+                        } else if (res.code === 403) {
+                            top.location.href = baseUrl + "/";
+                        } else {
+                            layer.msg(res.msg)
+                        }
+                    }
+                });
+                break;
+            default:
+                break;
+        }
+    });
+});
\ No newline at end of file
diff --git a/src/main/webapp/views/locSync/locSync.html b/src/main/webapp/views/locSync/locSync.html
new file mode 100644
index 0000000..4e8907d
--- /dev/null
+++ b/src/main/webapp/views/locSync/locSync.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+    <style>
+
+    </style>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <!-- 琛ㄦ牸 -->
+    <div class="layui-form">
+        <table class="layui-hide" id="locSum" lay-filter="locSum"></table>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn " id="btn-sync" lay-event="btnSync" style="margin-left: 10px">鍚屾搴撳瓨</button>
+    </div>
+</script>
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/locSync/locSync.js" charset="utf-8"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/version/v1.0.2/change_log b/version/v1.0.2/change_log
new file mode 100644
index 0000000..2ff75a9
--- /dev/null
+++ b/version/v1.0.2/change_log
@@ -0,0 +1,38 @@
+// 鏂板缓瑙嗗浘 asr_sumloc_view
+select matnr,maktx,anfme, altme, memo from asr_loc_detl
+union all
+select matnr,maktx,anfme, unit as altme,  memo from man_loc_detl
+
+// 鏂板琛ㄧ粨鏋�
+SET ANSI_NULLS ON
+GO
+
+SET QUOTED_IDENTIFIER ON
+GO
+
+SET ANSI_PADDING ON
+GO
+
+CREATE TABLE [dbo].[asr_wrk_loc_sync](
+	[matnr] [varchar](255) NOT NULL,
+	[qty] [decimal](24, 9) NOT NULL,
+	[state] [varchar](10) NULL,
+	[create_time] [datetime] NULL,
+	[create_by] [bigint] NULL,
+	[update_time] [datetime] NULL,
+	[update_by] [bigint] NULL
+) ON [PRIMARY]
+
+GO
+
+SET ANSI_PADDING OFF
+GO
+
+EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'鐗╂枡缂栫爜' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'asr_wrk_loc_sync', @level2type=N'COLUMN',@level2name=N'matnr'
+GO
+
+EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'鏁伴噺' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'asr_wrk_loc_sync', @level2type=N'COLUMN',@level2name=N'qty'
+GO
+
+EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'鐘舵��(N鏈笂浼�,X涓婁紶澶辫触)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'asr_wrk_loc_sync', @level2type=N'COLUMN',@level2name=N'state'
+GO
\ No newline at end of file

--
Gitblit v1.9.1