From 4dd1de806329aee03af0cf9f63521af1da81d2df Mon Sep 17 00:00:00 2001 From: whycq <whycq> Date: 星期三, 16 三月 2022 16:23:19 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/bfwcs' into bfwcs --- src/main/java/com/zy/asrs/entity/BasSteErr.java | 148 +++++++++++++++++++++ src/main/java/com/zy/asrs/service/BasSteErrService.java | 8 + src/main/java/com/zy/core/model/command/SteCommand.java | 4 src/main/java/com/zy/core/thread/SteThread.java | 108 ++++++++------- src/main/java/com/zy/core/model/protocol/SteProtocol.java | 2 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 30 ++-- src/main/java/com/zy/asrs/controller/CarController.java | 30 ++++ src/main/java/com/zy/asrs/mapper/BasSteErrMapper.java | 12 + src/main/resources/mapper/WrkMastMapper.xml | 2 src/main/java/com/zy/asrs/service/impl/BasSteErrServiceImpl.java | 12 + src/main/java/com/zy/common/CodeBuilder.java | 2 src/main/resources/mapper/BasSteErrMapper.xml | 16 ++ 12 files changed, 305 insertions(+), 69 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/CarController.java b/src/main/java/com/zy/asrs/controller/CarController.java index 21c959d..cc72746 100644 --- a/src/main/java/com/zy/asrs/controller/CarController.java +++ b/src/main/java/com/zy/asrs/controller/CarController.java @@ -1,7 +1,37 @@ package com.zy.asrs.controller; +import com.zy.asrs.service.BasSteErrService; +import com.zy.asrs.service.BasSteService; +import com.zy.asrs.service.LocMastService; +import com.zy.asrs.service.WrkMastService; +import com.zy.asrs.service.impl.MainServiceImpl; +import com.zy.core.properties.SlaveProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + /** + * 绌挎杞︽帴鍙� * Created by vincent on 2022/3/14 */ +@Slf4j +@RestController +@RequestMapping("/car") public class CarController { + + private SlaveProperties slaveProperties; + @Autowired + private WrkMastService wrkMastService; + @Autowired + private BasSteErrService basSteErrService; + @Autowired + private BasSteService basSteService; + @Autowired + private MainServiceImpl mainService; + @Autowired + private LocMastService locMastService; + + + } diff --git a/src/main/java/com/zy/asrs/entity/BasSteErr.java b/src/main/java/com/zy/asrs/entity/BasSteErr.java new file mode 100644 index 0000000..ca59e78 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/BasSteErr.java @@ -0,0 +1,148 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import com.core.common.Cools; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +@TableName("asr_bas_ste_err") +public class BasSteErr implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 寮傚父鐮� + */ + @ApiModelProperty(value= "寮傚父鐮�") + @TableId(value = "error_code", type = IdType.INPUT) + @TableField("error_code") + private Long errorCode; + + /** + * 寮傚父 + */ + @ApiModelProperty(value= "寮傚父") + @TableField("err_name") + private String errName; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value= "淇敼浜哄憳") + @TableField("modi_user") + private Long modiUser; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value= "淇敼鏃堕棿") + @TableField("modi_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date modiTime; + + /** + * 娣诲姞浜哄憳 + */ + @ApiModelProperty(value= "娣诲姞浜哄憳") + @TableField("appe_user") + private Long appeUser; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value= "娣诲姞鏃堕棿") + @TableField("appe_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date appeTime; + + public BasSteErr() {} + + public BasSteErr(Long errorCode,String errName,Long modiUser,Date modiTime,Long appeUser,Date appeTime) { + this.errorCode = errorCode; + this.errName = errName; + this.modiUser = modiUser; + this.modiTime = modiTime; + this.appeUser = appeUser; + this.appeTime = appeTime; + } + +// BasSteErr basSteErr = new BasSteErr( +// null, // 寮傚父鐮乕闈炵┖] +// null, // 寮傚父 +// null, // 淇敼浜哄憳 +// null, // 淇敼鏃堕棿 +// null, // 娣诲姞浜哄憳 +// null // 娣诲姞鏃堕棿 +// ); + + public Long getErrorCode() { + return errorCode; + } + + public void setErrorCode(Long errorCode) { + this.errorCode = errorCode; + } + + public String getErrName() { + return errName; + } + + public void setErrName(String errName) { + this.errName = errName; + } + + public Long getModiUser() { + return modiUser; + } + + public void setModiUser(Long modiUser) { + this.modiUser = modiUser; + } + + public Date getModiTime() { + return modiTime; + } + + public String getModiTime$(){ + if (Cools.isEmpty(this.modiTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); + } + + public void setModiTime(Date modiTime) { + this.modiTime = modiTime; + } + + public Long getAppeUser() { + return appeUser; + } + + public void setAppeUser(Long appeUser) { + this.appeUser = appeUser; + } + + public Date getAppeTime() { + return appeTime; + } + + public String getAppeTime$(){ + if (Cools.isEmpty(this.appeTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); + } + + public void setAppeTime(Date appeTime) { + this.appeTime = appeTime; + } + + +} diff --git a/src/main/java/com/zy/asrs/mapper/BasSteErrMapper.java b/src/main/java/com/zy/asrs/mapper/BasSteErrMapper.java new file mode 100644 index 0000000..0caf74b --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/BasSteErrMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.zy.asrs.entity.BasSteErr; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface BasSteErrMapper extends BaseMapper<BasSteErr> { + +} diff --git a/src/main/java/com/zy/asrs/service/BasSteErrService.java b/src/main/java/com/zy/asrs/service/BasSteErrService.java new file mode 100644 index 0000000..717faf0 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/BasSteErrService.java @@ -0,0 +1,8 @@ +package com.zy.asrs.service; + +import com.zy.asrs.entity.BasSteErr; +import com.baomidou.mybatisplus.service.IService; + +public interface BasSteErrService extends IService<BasSteErr> { + +} diff --git a/src/main/java/com/zy/asrs/service/impl/BasSteErrServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasSteErrServiceImpl.java new file mode 100644 index 0000000..14578fa --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/BasSteErrServiceImpl.java @@ -0,0 +1,12 @@ +package com.zy.asrs.service.impl; + +import com.zy.asrs.mapper.BasSteErrMapper; +import com.zy.asrs.entity.BasSteErr; +import com.zy.asrs.service.BasSteErrService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service("basSteErrService") +public class BasSteErrServiceImpl extends ServiceImpl<BasSteErrMapper, BasSteErr> implements BasSteErrService { + +} diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 75def28..fb33d8d 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -220,20 +220,6 @@ for (DevpSlave devp : slaveProperties.getDevp()) { // 閬嶅巻鎷f枡鍏ュ簱鍙� for (DevpSlave.Sta pickSta : devp.getPickSta()) { - // 鑾峰彇鏉$爜鎵弿浠俊鎭� - BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); - if (barcodeThread == null) { - continue; - } - String barcode = barcodeThread.getBarcode(); - if(!Cools.isEmpty(barcode)) { - log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode); - if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { - continue; - } - } else { - continue; - } // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); @@ -244,6 +230,22 @@ staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){ + + // 鑾峰彇鏉$爜鎵弿浠俊鎭� + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); + if (barcodeThread == null) { + continue; + } + String barcode = barcodeThread.getBarcode(); + if(!Cools.isEmpty(barcode)) { + log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode); + if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { + continue; + } + } else { + continue; + } + WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); if (wrkMast == null) { // 鏃犳嫞鏂欐暟鎹� diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java index 0b9411c..4a18385 100644 --- a/src/main/java/com/zy/common/CodeBuilder.java +++ b/src/main/java/com/zy/common/CodeBuilder.java @@ -18,7 +18,7 @@ generator.url="localhost:1433;databasename=bfasrs"; generator.username="sa"; generator.password="sa@123"; - generator.table="asr_bas_ste_opt"; + generator.table="asr_bas_ste_err"; generator.packagePath="com.zy.asrs"; generator.controller = false; diff --git a/src/main/java/com/zy/core/model/command/SteCommand.java b/src/main/java/com/zy/core/model/command/SteCommand.java index cbb1686..6d979bd 100644 --- a/src/main/java/com/zy/core/model/command/SteCommand.java +++ b/src/main/java/com/zy/core/model/command/SteCommand.java @@ -54,10 +54,10 @@ private Short init; // 澶嶄綅淇″彿 1=澶嶄綅 - private Short reset; + private Boolean reset; // 鍒犻櫎鎸囦护 1=鍒犻櫎 - private Short delete; + private Boolean delete; // 鎵樼洏闂磋窛 涓棿鎵樼洏涔嬮棿璺濈 鍗曚綅姣背 private Short space; diff --git a/src/main/java/com/zy/core/model/protocol/SteProtocol.java b/src/main/java/com/zy/core/model/protocol/SteProtocol.java index 81a7f81..82e95dd 100644 --- a/src/main/java/com/zy/core/model/protocol/SteProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/SteProtocol.java @@ -71,7 +71,7 @@ public Boolean lowCharge; /** - * 鐢垫睜棣堢數 0锛屾甯革紝1棣堢數 + * 鐢垫睜棣堢數 0锛屾瑺鐢碉紝1浣庣數 2婊$數 */ public Short feed; diff --git a/src/main/java/com/zy/core/thread/SteThread.java b/src/main/java/com/zy/core/thread/SteThread.java index 10c7a5e..787be85 100644 --- a/src/main/java/com/zy/core/thread/SteThread.java +++ b/src/main/java/com/zy/core/thread/SteThread.java @@ -126,7 +126,7 @@ */ private void readStatus(){ try { - OperateResultExOne<byte[]> result = siemensS7Net.Read("DB4", (short) 70); + OperateResultExOne<byte[]> result = siemensS7Net.Read("V800", (short) 70); if (result.IsSuccess) { if (null == steProtocol) { steProtocol = new SteProtocol(); @@ -134,36 +134,42 @@ steProtocol.setSteNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 0)); steProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result.Content, 2)); steProtocol.setStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 4)); -// steProtocol.setExecute(); -// steProtocol.setWaiting(); + OperateResultExOne<Boolean> executeRes = siemensS7Net.ReadBool("V2001.0"); + if (executeRes.IsSuccess) { + steProtocol.setExecute(executeRes.Content); + } + OperateResultExOne<Boolean> waitingRes = siemensS7Net.ReadBool("V2001.1"); + if (waitingRes.IsSuccess) { + steProtocol.setWaiting(waitingRes.Content); + } steProtocol.setAlarm(siemensS7Net.getByteTransform().TransInt32(result.Content, 6)); - steProtocol.setAlarm0(siemensS7Net.getByteTransform().TransInt32(result.Content, 10)); - steProtocol.setCharge(siemensS7Net.getByteTransform().TransInt16(result.Content, 14)); + steProtocol.setAlarm0(siemensS7Net.getByteTransform().TransInt32(result.Content, 8)); + steProtocol.setCharge(siemensS7Net.getByteTransform().TransInt16(result.Content, 10)); // steProtocol.setFullCharge(); // steProtocol.setLowCharge(); - steProtocol.setFeed(siemensS7Net.getByteTransform().TransInt16(result.Content, 16)); - steProtocol.setLoca(siemensS7Net.getByteTransform().TransInt16(result.Content, 18)); + steProtocol.setFeed(siemensS7Net.getByteTransform().TransInt16(result.Content, 14)); + steProtocol.setLoca(siemensS7Net.getByteTransform().TransInt16(result.Content, 16)); // steProtocol.setCloser(); // steProtocol.setSpeed(); - steProtocol.setPos(siemensS7Net.getByteTransform().TransInt16(result.Content, 28)); - steProtocol.setLoad(siemensS7Net.getByteTransform().TransInt16(result.Content, 30)); - steProtocol.setTrack(siemensS7Net.getByteTransform().TransInt16(result.Content, 32)); - steProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 38)); - steProtocol.setTaskType(siemensS7Net.getByteTransform().TransInt16(result.Content, 42)); - steProtocol.setRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 44)); - steProtocol.setBay(siemensS7Net.getByteTransform().TransInt16(result.Content, 46)); - steProtocol.setLev(siemensS7Net.getByteTransform().TransInt16(result.Content, 48)); + steProtocol.setPos(siemensS7Net.getByteTransform().TransInt16(result.Content, 18)); + steProtocol.setLoad(siemensS7Net.getByteTransform().TransInt16(result.Content, 20)); + steProtocol.setTrack(siemensS7Net.getByteTransform().TransInt16(result.Content, 22)); + steProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 24)); + steProtocol.setTaskType(siemensS7Net.getByteTransform().TransInt16(result.Content, 28)); + steProtocol.setRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 30)); + steProtocol.setBay(siemensS7Net.getByteTransform().TransInt16(result.Content, 32)); + steProtocol.setLev(siemensS7Net.getByteTransform().TransInt16(result.Content, 34)); - steProtocol.setHisTaskNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 58)); - steProtocol.setHisTaskStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 62)); - steProtocol.setCheckQty(siemensS7Net.getByteTransform().TransInt16(result.Content, 64)); - steProtocol.setReady(siemensS7Net.getByteTransform().TransInt16(result.Content, 66)); - steProtocol.setChargeNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 68)); +// steProtocol.setHisTaskNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 58)); +// steProtocol.setHisTaskStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 62)); +// steProtocol.setCheckQty(siemensS7Net.getByteTransform().TransInt16(result.Content, 64)); + steProtocol.setReady(siemensS7Net.getByteTransform().TransInt16(result.Content, 36)); +// steProtocol.setChargeNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 68)); - steProtocol.setHeart(siemensS7Net.getByteTransform().TransInt16(result.Content, 72)); - steProtocol.setCrnStopRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 74)); - steProtocol.setCrnStopFork(siemensS7Net.getByteTransform().TransInt16(result.Content, 76)); - steProtocol.setCrnAllowRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 78)); +// steProtocol.setHeart(siemensS7Net.getByteTransform().TransInt16(result.Content, 72)); + steProtocol.setCrnStopRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 38)); + steProtocol.setCrnStopFork(siemensS7Net.getByteTransform().TransInt16(result.Content, 40)); + steProtocol.setCrnAllowRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 42)); OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); @@ -218,25 +224,25 @@ // 浣滀笟 if (command.getTaskMode() != 0) { // 1.浠诲姟鍙� - OperateResult result0 = siemensS7Net.Write("DB3.0", command.getTaskNo()); + OperateResult result0 = siemensS7Net.Write("V1000", command.getTaskNo()); // 2.浣滀笟 - OperateResult result1 = siemensS7Net.Write("DB3.4", command.getTaskMode()); + OperateResult result1 = siemensS7Net.Write("V1000", command.getTaskMode()); // todo // 3.纭寮�濮嬩换鍔� if (result0.IsSuccess && result1.IsSuccess) { - result = siemensS7Net.Write("D0", true); + result = siemensS7Net.Write("V2000.0", true); } // 鍏朵粬鎸囦护 } else { // 鎺у埗妯″紡 if (command.getControlMode() != null) { - result = siemensS7Net.Write("DB3.20", command.getControlMode()); + result = siemensS7Net.Write("V1010", command.getControlMode()); // 澶嶄綅淇″彿 } else if (command.getReset() != null) { - result = siemensS7Net.Write("DB3.26", command.getReset()); + result = siemensS7Net.Write("V2000.2", command.getReset()); // 鍒犻櫎鎸囦护 } else if (command.getDelete() != null) { - result = siemensS7Net.Write("DB3.28", command.getDelete()); + result = siemensS7Net.Write("V2000.3", command.getDelete()); // 鏃犳晥鎸囦护 } else { return false; @@ -252,25 +258,27 @@ // 鏃ュ織璁板綍 if (!command.getComplete() && command.getTaskMode() != 0) { BasSteOptService bean = SpringUtils.getBean(BasSteOptService.class); - BasSteOpt basSteOpt = new BasSteOpt( - command.getTaskNo(), // 浠诲姟鍙� - command.getSteNo(), // 绌挎杞� - new Date(), // 涓嬪彂鏃堕棿 - command.getTaskModeType().desc, // 浣滀笟 - null, // 婧愭帓 - null, // 婧愬垪 - null, // 婧愬眰 - null, // 婧愮珯 - null, // 鐩爣鎺� - null, // 鐩爣鍒� - null, // 鐩爣灞� - null, // 鐩爣绔� - null, // 鍝嶅簲缁撴灉 - null, // 淇敼鏃堕棿 - null, // 淇敼浜哄憳 - null // 澶囨敞 - ); - bean.insert(basSteOpt); + if (null != bean) { + BasSteOpt basSteOpt = new BasSteOpt( + command.getTaskNo(), // 浠诲姟鍙� + command.getSteNo(), // 绌挎杞� + new Date(), // 涓嬪彂鏃堕棿 + command.getTaskModeType().desc, // 浣滀笟 + null, // 婧愭帓 + null, // 婧愬垪 + null, // 婧愬眰 + null, // 婧愮珯 + null, // 鐩爣鎺� + null, // 鐩爣鍒� + null, // 鐩爣灞� + null, // 鐩爣绔� + null, // 鍝嶅簲缁撴灉 + null, // 淇敼鏃堕棿 + null, // 淇敼浜哄憳 + null // 澶囨敞 + ); + bean.insert(basSteOpt); + } } } catch (Exception ignore) {} @@ -308,7 +316,7 @@ if (basSte != null) { // 鏇存柊plc鏁版嵁鍧� short[] arr = new short[] {this.lastRow.shortValue(), this.lastBay.shortValue(), this.lastLev.shortValue()}; - OperateResult result = siemensS7Net.Write("D0", arr); + OperateResult result = siemensS7Net.Write("V1002", arr); if (result.IsSuccess) { // 鏇存柊鏁版嵁搴� if (service.updatePos(this.lastRow, this.lastBay, this.lastLev) > 0) { diff --git a/src/main/resources/mapper/BasSteErrMapper.xml b/src/main/resources/mapper/BasSteErrMapper.xml new file mode 100644 index 0000000..c106c43 --- /dev/null +++ b/src/main/resources/mapper/BasSteErrMapper.xml @@ -0,0 +1,16 @@ +<?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="com.zy.asrs.mapper.BasSteErrMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasSteErr"> + <result column="error_code" property="errorCode" /> + <result column="err_name" property="errName" /> + <result column="modi_user" property="modiUser" /> + <result column="modi_time" property="modiTime" /> + <result column="appe_user" property="appeUser" /> + <result column="appe_time" property="appeTime" /> + + </resultMap> + +</mapper> diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml index ad9ca2e..5698997 100644 --- a/src/main/resources/mapper/WrkMastMapper.xml +++ b/src/main/resources/mapper/WrkMastMapper.xml @@ -106,7 +106,7 @@ </select> <select id="selectPickStep" resultMap="BaseResultMap"> - select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104) + select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=17 and (io_type=103 or io_type=107 or io_type=104) </select> <select id="selectPakOutStep11" resultMap="BaseResultMap"> -- Gitblit v1.9.1