自动化立体仓库 - WMS系统
#
野心家
2023-09-01 ca301e64c071ecbdf9e7442070fa7b9b80ca56e4
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -3,30 +3,41 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.param.OpenOrderPakinParam;
import com.zy.asrs.entity.param.Review;
import com.zy.asrs.mapper.ReportQueryMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.WorkLogHandler;
import com.zy.asrs.utils.MatUtils;
import com.zy.asrs.utils.PostMesDataUtils;
import com.zy.asrs.utils.Utils;
import com.zy.common.CodeRes;
import com.zy.common.constant.MesConstant;
import com.zy.common.entity.Parameter;
import com.zy.common.model.DetlDto;
import com.zy.common.model.MesCombParam;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.*;
/**
 * 移动端服务核心类
@@ -34,7 +45,7 @@
 */
@Slf4j
@Service
public class MobileServiceImpl implements MobileService {
public class MobileServiceImpl extends AbstractHandler<String> implements MobileService{
    @Autowired
    private MatService matService;
@@ -58,6 +69,54 @@
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private StaDescService staDescService;
    @Autowired
    private CommonService commonService;
    @Autowired
    private NodeService nodeService;
    @Autowired
    private ManLocDetlService manLocDetlService;
    @Autowired
    private TestMastService testMastService;
    @Autowired
    private WorkService workService;
    @Autowired
    private PackQualifiedService packQualifiedService;
    @Autowired
    private ReportQueryMapper reportQueryMapper;
    @Value("${mes.url}")
    private String mesUrl;
    @Value("${ren.url1}")
    private String renUrl1;
    @Value("${ren.url2}")
    private String renUrl2;
    @Value("${ren.url3}")
    private String renUrl3;
    @Value("${ren.url4}")
    private String renUrl4;
    @Value("${ren.url5}")
    private String renUrl5;
    @Value("${ren.url6}")
    private String renUrl6;
    @Value("${ren.startUpTestPACK}")
    private String startUpTestPACK;
    @Value("${ren.suspendTestPACK}")
    private String suspendTestPACK;
    @Value("${mes.inPath}")
    private String inpath;
    @Override
    @Transactional
@@ -70,6 +129,13 @@
                eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
            throw new CoolException(param.getBarcode() + "数据正在进行入库");
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
        if (countLoc > 0 || countWrk > 0) {
            throw new CoolException("工作档/库存条码数据已存在===>>" + param.getBarcode());
        }
        Date now = new Date();
        // 无单组托
@@ -124,9 +190,9 @@
                if (elem.getAnfme() > orderDetl.getEnableQty()) {
                    throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                }
                // 修改订单明细数量
                if (!orderDetlService.increase(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) {
                    throw new CoolException("修改单据明细数量失败");
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) {
                    throw new CoolException("修改单据作业数量失败");
                }
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
@@ -146,7 +212,7 @@
                WaitPakin waitPakin = new WaitPakin();
                waitPakin.sync(mat);
                waitPakin.setOrderNo(order.getOrderNo());   // 单据编号
                waitPakin.setBatch(detlDto.getBatch());     // 批号
                waitPakin.setBatch(detlDto.getBatch());     // 序列码
                waitPakin.setZpallet(param.getBarcode());   // 托盘码
                waitPakin.setIoStatus("N");     // 入出状态
                waitPakin.setAnfme(detlDto.getAnfme());  // 数量
@@ -162,6 +228,39 @@
            orderService.updateSettle(order.getId(), 2L, userId);
        }
    }
    @Override
    public void onSale(CombParam param) {
        // 获取库位号
        String locNo = param.getLocNo();
        Node node = nodeService.selectByUuid(locNo);
        if (Cools.isEmpty(node)) {
            throw new CoolException(param.getLocNo() + ":库位不存在");
        }
        // 获取商品列表
        for(CombParam.CombMat combMat : param.getCombMats()){
            Mat mat = matService.selectByMatnr(combMat.getMatnr());
            if (Cools.isEmpty(mat)){
                throw new CoolException(combMat.getMatnr() + ":商品档案不存在!");
            }
            if (Cools.isEmpty(combMat.getAnfme()) || combMat.getAnfme()==0){
                throw new CoolException(combMat.getMatnr() + ":商品数量有误!");
            }
            if (Cools.isEmpty(combMat.getBatch())){
                throw new CoolException(combMat.getMatnr() + ":商品批号有误!");
            }
            ManLocDetl manLocDetl = new ManLocDetl();
            manLocDetl.setLocNo(locNo);
            manLocDetl.setNodeId(node.getId());
            manLocDetl.setMatnr(combMat.getMatnr());
            manLocDetl.setBatch(combMat.getBatch());
            manLocDetl.setAnfme(combMat.getAnfme());
            if (!manLocDetlService.insert(manLocDetl)) {
                throw new CoolException("商品上架失败!");
            }
        }
    }
    @Override
@@ -273,7 +372,10 @@
                        throw new CoolException(elem.getMatnr() + "条码已下线,请检查!");
                    }
                }
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
                Mat analyse = MatUtils.analyseMat(elem.getMatnr());
                // 条码、物料代码、序列号、数量
                DetlDto detlDto = new DetlDto(elem.getMatnr(), analyse.getMatnr(), analyse.getBarcode(), elem.getAnfme());
//                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                    assert one != null;
@@ -286,10 +388,13 @@
            if (packDown) {
                MesCombParam mesCombParam = new MesCombParam();
                mesCombParam.setZpallet(param.getBarcode());
                mesCombParam.setCombTime(DateUtils.convert(now));
                mesCombParam.setPakinTime(DateUtils.convert(now));
                mesCombParam.setLgort("5008");
                mesCombParam.setPlantCode("5000");
                mesCombParam.setFromCode("5012-20");
                mesCombParam.setStationCode("JJQ-PFZPDB-XX");
                for (DetlDto detlDto : detlDtos) {
                    mesCombParam.getList().add(new MesCombParam.Detl(detlDto.getMatnr(), detlDto.getAnfme()));
                    mesCombParam.getList().add(new MesCombParam.Detl(detlDto.getOrderNo(), detlDto.getAnfme()));
                }
                String response = "";
                boolean success = false;
@@ -355,9 +460,9 @@
                if (detlDto.getAnfme() > orderDetl.getEnableQty()) {
                    throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                }
                // 修改订单明细数量
                if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                    throw new CoolException("修改单据明细数量失败");
                // 修改订单作业数量
                if (!orderDetlService.increaseWorkQty(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                    throw new CoolException("修改单据作业数量失败");
                }
                // 保存入库通知档
@@ -381,7 +486,7 @@
                    throw new CoolException("保存入库通知档失败");
                }
                // 修改打包数据状态
                Pack pack = packService.selectByBarcode(detlDto.getMatnr());
                Pack pack = packService.selectByBarcode(detlDto.getOrderNo());
                pack.setSettle(2L);
                pack.setUpdateTime(now);
                pack.setUpdateBy(userId);
@@ -393,4 +498,408 @@
        }
    }
    @Override
    @Transactional
    public void pakoutByOrder(JSONObject param, Long userId) {
        Integer staNo = param.containsKey("staNo") ? Integer.parseInt(param.get("staNo").toString()) : 0;
        String orderNo = param.containsKey("orderNo") ? param.get("orderNo").toString() : "";
        BasDevp sta = basDevpService.checkSiteStatus(staNo);
        //根据订单号生成出库任务工作档
        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderNo));
        if (order.getSettle() != 1 && order.getSettle() != 2){
            throw new CoolException("该订单已处理");
        }
        List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", orderNo));
        Date now = new Date();
        for(OrderDetl orderDetl : orderDetls){
            //查询所有库位状态为F的库位信息
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(),orderDetl.getBatch(),null,null);
            if (locDetls.size() == 0) {
                throw new CoolException("库存中没有该物料");
            }
            for(LocDetl locDetl : locDetls){
                //如果该库位出库路线所用的堆垛机out_enable不为Y,跳过该循环
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                        .eq("loc_no", locDetl.getLocNo()));
                if (Cools.isEmpty(locMast)) {
                    continue;
                }
                BasCrnp crn_no = basCrnpService.selectOne(new EntityWrapper<BasCrnp>()
                        .eq("crn_no", locMast.getCrnNo()));
                if (Cools.isEmpty(crn_no) || !crn_no.getOutEnable().equals("Y")){
                    continue;
                }
                //可出库数量 = 订单数量 - 作业中数量
                Double outQty = orderDetl.getAnfme() - orderDetl.getWorkQty();
                if(outQty <= 0){
                    break;
                }
                // 判断入出库类型:101.全板出库 or 103.拣料出库
                Double sumCount = locDetlService.getLocDetlSumQty(locDetl.getLocNo());
                Double curOutQty = outQty >= locDetl.getAnfme() ? locDetl.getAnfme() : outQty;   //本次出库量
                int ioType = sumCount <= curOutQty ? 101 : 103;
                stockOut(orderDetl, sta, locDetl, curOutQty, ioType, userId, now);
                order.setSettle(2L);
                order.setUpdateBy(userId);
                order.setUpdateTime(now);
                if(!orderService.update(order, new EntityWrapper<Order>().eq("order_no", orderNo))){
                    throw new CoolException("更新订单状态失败");
                }
                orderDetl.setWorkQty(orderDetl.getWorkQty() + curOutQty);
                orderDetl.setUpdateBy(userId);
                orderDetl.setUpdateTime(now);
                Wrapper wrapper = new EntityWrapper<OrderDetl>().eq("order_no", orderNo)
                        .eq("matnr",orderDetl.getMatnr());
                if(!Cools.isEmpty(orderDetl.getBatch())){
                    wrapper.eq("batch", orderDetl.getBatch());
                }
                if(!orderDetlService.update(orderDetl, wrapper)){
                    throw new CoolException("更新订单明细失败");
                }
            }
        }
    }
    @Override
    @Transactional
    public void stockOut(OrderDetl orderDetl, BasDevp staNo, LocDetl locDetl,
                         Double curOutQty, Integer ioType, Long userId, Date now) {
        // 获取库位
        LocMast locMast = locMastService.selectById(locDetl.getLocNo());
        // 获取路径
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", ioType)
                .eq("stn_no", staNo.getDevNo())
                .eq("crn_no", locMast.getCrnNo());
        StaDesc staDesc = staDescService.selectOne(wrapper);
        if (Cools.isEmpty(staDesc)) {
            throw new CoolException("出库路径不存在");
        }
        // 生成工作号
        int workNo = commonService.getWorkNo(2);
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(ioType); // 入出库状态
        wrkMast.setIoPri(13D); // 优先级:13
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
        wrkMast.setSourceLocNo(locDetl.getLocNo()); // 源库位
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId); // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        wrkMast.setBarcode(locMast.getBarcode());
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:" + locDetl.getLocNo());
        }
        WrkDetl wrkDetl = new WrkDetl();
        wrkDetl.sync(locDetl);
        wrkDetl.setWrkNo(workNo);
        wrkDetl.setIoTime(now);
        wrkDetl.setAnfme(curOutQty); // 数量
        wrkDetl.setOrderNo(orderDetl.getOrderNo());
        wrkDetl.setAppeTime(now);
        wrkDetl.setAppeUser(userId);
        wrkDetl.setModiTime(now);
        wrkDetl.setModiUser(userId);
        if (!wrkDetlService.insert(wrkDetl)) {
            throw new CoolException("保存工作档明细失败");
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
        locMast = locMastService.selectById(locDetl.getLocNo());
        if (locMast.getLocSts().equals("F")) {
            locMast.setLocSts(ioType == 101 ? "R" : "P");
            locMast.setModiUser(userId);
            locMast.setModiTime(new Date());
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("预约库位状态失败,库位号:" + locDetl.getLocNo());
            }
        } else {
            throw new CoolException(locDetl.getLocNo() + "库位不是在库状态");
        }
    }
    /*...........................赣州新增..............以下.............赣州新增...........................*/
    @Override
    @Transactional
    public void startUpTestPACK(TestMast testMast) {
        if(Cools.isEmpty(testMast.getLocNo())){
            log.error("库位号为空");
            return;
        }else if(Cools.isEmpty(testMast.getBarcode())){
            log.error("PACK码为空");
            return;
        }
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                .eq("loc_no", testMast.getLocNo())
                .eq("loc_sts","F")
        );
        if (Cools.isEmpty(locMast)) {
            log.error("未查询到库位号:"+testMast.getLocNo()+" 请检查库位号或者检查库位状态是否未在库");
            return;
        }
        Date now = new Date();
        testMast.setModiTime(now);
        testMast.setAppeTime(now);
//        启动测试请求
        ReturnT<String> result=startUpTestPACK1(testMast);
        if (Cools.isEmpty(result) || !result.isSuccess()) {
            log.error("测试申请失败", testMast.getBarcode());
            return;
        }
        testMast.setStatus(3);
        if (!testMastService.update(testMast,new EntityWrapper<TestMast>().eq("barcode", testMast.getBarcode()))){
            log.error("更新testMast失败");
            return;
        }
        locMast.setPackStatus(2);
        locMast.setModiTime(now);
        if (!locMastService.update(locMast,new EntityWrapper<LocMast>().eq("loc_no", testMast.getLocNo()))){
            log.error("申请测试失败");
        }
        //3.开始测试上报
        CombParam combParam = new CombParam();
        combParam.setPackNo(testMast.getBarcode());
        combParam.setLocNo(locMast.getLocNo());
        combParam.setPackSts(0);
        combParam.setStepSts(3);
        combParam.setRequestTime(DateUtils.convert(now));
        new PostMesDataUtils().postMesData("MES系统",mesUrl,inpath,combParam);
    }
    @Override
    @Transactional
    public boolean suspendTestPACK(String channel) {
        ReturnT<String> result=suspendTestPACK1(channel);
        if (!result.isSuccess()) {
            log.error("暂停测试失败");
        }
        return result.isSuccess();
    }
    @Transactional
    public ReturnT<String> startUpTestPACK1(TestMast testMast){
        String renUrl="";
        try {
            Review review=new Review();
            review.setLocNo(testMast.getLocNo());
            review.setBarcode(testMast.getBarcode());
            review.setChannel(testMast.getChannel().toString());
            review.setRequestTime(DateUtils.convert(new Date()));
            if (testMast.getChannel()<1 || testMast.getChannel()>48){
                log.error("通道有误,请查看!");
                return null;
            } else if (testMast.getChannel()<=8){
                renUrl=renUrl1;
            }else if (testMast.getChannel()<=16){
                renUrl=renUrl2;
            }else if (testMast.getChannel()<=24){
                renUrl=renUrl3;
            }else if (testMast.getChannel()<=32){
                renUrl=renUrl4;
            }else if (testMast.getChannel()<=40){
                renUrl=renUrl5;
            }else if (testMast.getChannel()<=48){
                renUrl=renUrl6;
            }
            return new PostMesDataUtils().postMesData("测试系统",renUrl,startUpTestPACK,review);
        }catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
    }
    @Transactional
    public ReturnT<String> suspendTestPACK1(String channel){
        String renUrl="";
        try {
            Review review=new Review();
            review.setPause("true");
            review.setChannel(channel);
            review.setRequestTime(DateUtils.convert(new Date()));
            switch (channel){
                case "1":
                case "2":
                case "3":
                case "4":
                case "5":
                case "6":
                case "7":
                case "8":
                    renUrl=renUrl1;
                    break;
                case "9":
                case "10":
                case "11":
                case "12":
                case "13":
                case "14":
                case "15":
                case "16":
                    renUrl=renUrl2;
                    break;
                case "17":
                case "18":
                case "19":
                case "20":
                case "21":
                case "22":
                case "23":
                case "24":
                    renUrl=renUrl3;
                    break;
                case "25":
                case "26":
                case "27":
                case "28":
                case "29":
                case "30":
                case "31":
                case "32":
                    renUrl=renUrl4;
                    break;
                case "33":
                case "34":
                case "35":
                case "36":
                case "37":
                case "38":
                case "39":
                case "40":
                    renUrl=renUrl5;
                    break;
                case "41":
                case "42":
                case "43":
                case "44":
                case "45":
                case "46":
                case "47":
                case "48":
                    renUrl=renUrl6;
                    break;
                default:
                    log.error("通道有误,请查看!");
            }
            return new PostMesDataUtils().postMesData("测试系统",renUrl,suspendTestPACK,review);
        }catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
    }
    /*
    * 测试库信息
    * */
    @Override
    @Transactional
    public List<LocMast> packTestBasicInformation() {
        List<LocMast> locMasts=locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_type1", 1).and().ne("loc_sts","O"));
        for (LocMast locMast:locMasts) {
            LocDetl locDetl=locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no",locMast.getLocNo()));
            if(Cools.isEmpty(locDetl)){
                locMast.setMk("无信息");
            }else{
                locMast.setMk(locDetl.getMatnr());
            }
        }
        return locMasts;
    }
    /*
     * 测试库使用情况
     * */
    @Override
    @Transactional
    public List<PackUsageRate> packUsageRate() {
        ArrayList<PackUsageRate> packUsageRates = new ArrayList<>();
        for (int i = 0 ;i<5;i++){
            PackUsageRate packUsageRate = new PackUsageRate();
            packUsageRate.setTotal(locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_type1", i)));
            packUsageRate.setCurrentQuantity(locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_type1", i).and().ne("loc_sts","O")));
            packUsageRates.add(packUsageRate);
        }
        return packUsageRates;
    }
    @Data
    public static class PackUsageRate{
        private int total;
        private int currentQuantity;
    }
    @Data
    public static class PackUsageRate2{
        private int total;
        private int qualified;
        private int unqualified;
        private String week;
    }
    /*
     * 测试库合格数
     * */
    @Override
    @Transactional
    public List<PackUsageRate2> packQualified() {
        Date now = new Date();
        Date date7 = Utils.timeYesterday(now);
        Date date14 = Utils.timeYesterday(date7);
        ArrayList<PackUsageRate2> packUsageRates = new ArrayList<>();
        PackUsageRate2 packUsageRate = new PackUsageRate2();
        packUsageRate.setTotal(packQualifiedService.selectTotal(date7,now));
        packUsageRate.setQualified(packQualifiedService.selectCurrentQuantity(true,date7,now));
        packUsageRate.setUnqualified(packQualifiedService.selectCurrentQuantity(false,date7,now));
        packUsageRate.setWeek("本周");
        packUsageRates.add(packUsageRate);
        PackUsageRate2 packUsageRate2 = new PackUsageRate2();
        packUsageRate2.setTotal(packQualifiedService.selectTotal(date14,date7));
        packUsageRate2.setQualified(packQualifiedService.selectCurrentQuantity(true,date14,date7));
        packUsageRate2.setUnqualified(packQualifiedService.selectCurrentQuantity(false,date14,date7));
        packUsageRate2.setWeek("上周");
        packUsageRates.add(packUsageRate2);
        return packUsageRates;
    }
    /*
     * 测试库合格数
     * */
    @Override
    @Transactional
    public List<WorkChartAxis> chartAxisEvening() {
        return reportQueryMapper.getChartAxisEvening();
    }
    /*
     * 测试库合格数
     * */
    @Override
    @Transactional
    public List<WorkChartAxis> chartAxisMorning() {
        return reportQueryMapper.getChartAxisMorning();
    }
    /*...........................赣州新增..............以上.............赣州新增...........................*/
}