From ab462319a13094ce46503a2c0213b37ce129815b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?yinjinlu-pc=5C=E5=B0=B9=E9=87=91=E8=B7=AF?= <411641505@qq.com> Date: Thu, 8 Jun 2023 15:42:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E6=8D=AE=E7=9A=84=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E4=BA=BA=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/UserTaskController.java | 55 ++++++ .../ktg/common/constant/UserConstants.java | 10 ++ .../mobile/MdVendorMobController.java | 37 ++++ .../pro/controller/ProFeedbackController.java | 2 +- .../controller/ProTransOrderController.java | 1 + .../controller/ProWorkorderController.java | 2 +- .../mobile/ProFeedBackMobController.java | 3 +- .../mobile/ProProcessMobController.java | 2 +- .../mobile/ProTaskIssueMobController.java | 2 +- .../mobile/ProTransOrderMobController.java | 4 +- .../controller/WmIssueHeaderController.java | 3 +- .../wm/controller/WmIssueLineController.java | 1 + .../wm/controller/WmItemRecptController.java | 1 + .../controller/WmItemRecptLineController.java | 1 + .../wm/controller/WmPackageController.java | 1 + .../controller/WmProductRecptController.java | 2 +- .../WmProductRecptLineController.java | 2 +- .../controller/WmProductSalseController.java | 1 + .../WmProductSalseLineController.java | 1 + .../wm/controller/WmRtIssueController.java | 1 + .../controller/WmRtIssueLineController.java | 1 + .../wm/controller/WmRtSalseController.java | 1 + .../controller/WmRtSalseLineController.java | 1 + .../wm/controller/WmRtVendorController.java | 1 + .../controller/WmRtVendorLineController.java | 1 + .../wm/controller/WmTransferController.java | 2 +- .../controller/WmTransferLineController.java | 1 + .../mobile/WmItemRecptLineMobController.java | 134 ++++++++++++++ .../mobile/WmItemRecptMobController.java | 167 ++++++++++++++++++ .../mobile/WmMaterialStockMobController.java | 49 +++++ .../java/com/ktg/system/domain/UserTask.java | 111 ++++++++++++ .../com/ktg/system/mapper/UserTaskMapper.java | 13 ++ .../ktg/system/service/IUserTaskService.java | 13 ++ .../service/impl/UserTaskServiceImpl.java | 26 +++ .../mapper/system/UserTaskMapper.xml | 132 ++++++++++++++ 35 files changed, 773 insertions(+), 12 deletions(-) create mode 100644 ktg-admin/src/main/java/com/ktg/web/controller/system/UserTaskController.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/md/controller/mobile/MdVendorMobController.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmItemRecptLineMobController.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmItemRecptMobController.java create mode 100644 ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmMaterialStockMobController.java create mode 100644 ktg-system/src/main/java/com/ktg/system/domain/UserTask.java create mode 100644 ktg-system/src/main/java/com/ktg/system/mapper/UserTaskMapper.java create mode 100644 ktg-system/src/main/java/com/ktg/system/service/IUserTaskService.java create mode 100644 ktg-system/src/main/java/com/ktg/system/service/impl/UserTaskServiceImpl.java create mode 100644 ktg-system/src/main/resources/mapper/system/UserTaskMapper.xml diff --git a/ktg-admin/src/main/java/com/ktg/web/controller/system/UserTaskController.java b/ktg-admin/src/main/java/com/ktg/web/controller/system/UserTaskController.java new file mode 100644 index 0000000..b54573e --- /dev/null +++ b/ktg-admin/src/main/java/com/ktg/web/controller/system/UserTaskController.java @@ -0,0 +1,55 @@ +package com.ktg.web.controller.system; + +import com.ktg.common.core.controller.BaseController; +import com.ktg.common.core.page.TableDataInfo; +import com.ktg.mes.md.domain.MdVendor; +import com.ktg.mes.pro.service.IProFeedbackService; +import com.ktg.mes.wm.service.*; +import com.ktg.system.domain.UserTask; +import com.ktg.system.service.IUserTaskService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Api("用户的代办已办任务") +@RestController +@RequestMapping("/mobile/usertask") +public class UserTaskController extends BaseController { + + @Autowired + private IUserTaskService userTaskService; + + /** + * 查询待处理的任务和单据 + * 1.所有自己起草的,草稿状态的单据(目前阶段只实现此条) + * 2.根据具体的业务审批流程配置,需要自己审批的单据 + */ + @ApiOperation("查询待处理的任务和单据(分页)") + @GetMapping("/listTodo") + public TableDataInfo listTodoList(Long userId) + { + startPage(); + List list = userTaskService.listTodoList(userId); + return getDataTable(list); + } + + /** + * 查询已处理的任务和单据 + * 1.所有自己起草,非草稿状态的单据(目前阶段只实现此条) + * 2.根据具体的业务审批流程配置,流经自己的单据 + */ + @ApiOperation("查询已处理的任务和单据(分页)") + @GetMapping("/listFinished") + public TableDataInfo listFinishedList(Long userId) + { + startPage(); + List list = userTaskService.listFinishedList(userId); + return getDataTable(list); + } + +} diff --git a/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java b/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java index 70e52bc..3f369f6 100644 --- a/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java +++ b/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java @@ -92,6 +92,16 @@ public class UserConstants public static final String DEFECT_CODE = "DEFECT_CODE"; public static final String SN_CODE = "SN_CODE"; public static final String TRANS_ORDER_CODE ="TRANS_ORDER_CODE"; + public static final String ITEMRECPT_CODE ="ITEMRECPT_CODE"; //物料采购入库 + public static final String WM_RTVENDOR_CODE ="WM_RTVENDOR_CODE";//退回供应商 + public static final String ISSUE_CODE ="ISSUE_CODE"; //生产领料 + public static final String RTISSUE_CODE ="RTISSUE_CODE"; //生产退料 + public static final String PRODUCTRECPT_CODE ="PRODUCTRECPT_CODE"; //产品入库 + public static final String PRODUCTSALSE_CODE ="PRODUCTSALSE_CODE"; //销售出库 + public static final String RTSALSE_CODE ="RTSALSE_CODE"; //销售退货 + public static final String TRANSFER_CODE ="TRANSFER_CODE"; //移库 + public static final String STOCKTAKING_CODE ="STOCKTAKING_CODE"; //盘库单 + public static final String FEEDBACK_CODE ="FEEDBACK_CODE"; //报工单 /** * 单据的状态类型 diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/controller/mobile/MdVendorMobController.java b/ktg-mes/src/main/java/com/ktg/mes/md/controller/mobile/MdVendorMobController.java new file mode 100644 index 0000000..ed593dd --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/md/controller/mobile/MdVendorMobController.java @@ -0,0 +1,37 @@ +package com.ktg.mes.md.controller.mobile; + +import com.ktg.common.core.controller.BaseController; +import com.ktg.common.core.page.TableDataInfo; +import com.ktg.mes.md.domain.MdVendor; +import com.ktg.mes.md.service.IMdVendorService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Api("供应商信息") +@RestController +@RequestMapping("/mobile/md/vendor") +public class MdVendorMobController extends BaseController { + + @Autowired + private IMdVendorService mdVendorService; + + /** + * 查询供应商列表 + */ + @ApiOperation("查询供应商清单(分页)") + @PreAuthorize("@ss.hasPermi('mes:md:vendor:list')") + @GetMapping("/list") + public TableDataInfo list(MdVendor mdVendor) + { + startPage(); + List list = mdVendorService.selectMdVendorList(mdVendor); + return getDataTable(list); + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProFeedbackController.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProFeedbackController.java index 10dc2e3..67237de 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProFeedbackController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProFeedbackController.java @@ -123,7 +123,7 @@ public class ProFeedbackController extends BaseController }else { return AjaxResult.error("当前生产任务对应的工作站不存在!"); } - + proFeedback.setCreateBy(getUsername()); return toAjax(proFeedbackService.insertProFeedback(proFeedback)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProTransOrderController.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProTransOrderController.java index 2c7b752..4d5f277 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProTransOrderController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProTransOrderController.java @@ -85,6 +85,7 @@ public class ProTransOrderController extends BaseController { proTransOrderService.insertProTransOrder(proTransOrder); wmBarCodeUtil.generateBarCode(UserConstants.BARCODE_TYPE_TRANSORDER,proTransOrder.getTransOrderId(),proTransOrder.getTransOrderCode(),null); + proTransOrder.setCreateBy(getUsername()); return AjaxResult.success(proTransOrder.getTransOrderId()); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProWorkorderController.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProWorkorderController.java index 3f284ba..192dfa8 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProWorkorderController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProWorkorderController.java @@ -107,7 +107,7 @@ public class ProWorkorderController extends BaseController Long workorderId = proWorkorder.getWorkorderId(); generateBomLine(workorderId); - + proWorkorder.setCreateBy(getUsername()); return AjaxResult.success(workorderId); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProFeedBackMobController.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProFeedBackMobController.java index 122eaa1..4ea29e8 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProFeedBackMobController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProFeedBackMobController.java @@ -1,4 +1,4 @@ -package com.ktg.mes.pro.controller; +package com.ktg.mes.pro.controller.mobile; import com.ktg.common.annotation.Log; import com.ktg.common.constant.UserConstants; @@ -48,6 +48,7 @@ public class ProFeedBackMobController extends BaseController { }else { return AjaxResult.error("当前生产任务对应的工作站不存在!"); } + proFeedback.setCreateBy(getUsername()); proFeedbackService.insertProFeedback(proFeedback); return AjaxResult.success(proFeedback); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProProcessMobController.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProProcessMobController.java index fa0b8fd..dc94c28 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProProcessMobController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProProcessMobController.java @@ -1,4 +1,4 @@ -package com.ktg.mes.pro.controller; +package com.ktg.mes.pro.controller.mobile; import com.ktg.common.constant.UserConstants; import com.ktg.common.core.controller.BaseController; diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProTaskIssueMobController.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProTaskIssueMobController.java index 846caae..74e4af0 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProTaskIssueMobController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProTaskIssueMobController.java @@ -1,4 +1,4 @@ -package com.ktg.mes.pro.controller; +package com.ktg.mes.pro.controller.mobile; import cn.hutool.core.collection.CollUtil; import com.ktg.common.annotation.Log; diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProTransOrderMobController.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProTransOrderMobController.java index b6d4a08..858eaa7 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProTransOrderMobController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/mobile/ProTransOrderMobController.java @@ -1,4 +1,4 @@ -package com.ktg.mes.pro.controller; +package com.ktg.mes.pro.controller.mobile; import cn.hutool.core.collection.CollectionUtil; import com.ktg.common.annotation.Log; @@ -114,7 +114,7 @@ public class ProTransOrderMobController extends BaseController { if(StringUtils.isNotNull(proTransOrder.getQuantityTransfered())){ return AjaxResult.error("请填写报工数量"); } - + proTransOrder.setCreateBy(getUsername()); proTransOrderService.insertProTransOrder(proTransOrder); //自动生成条码 diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueHeaderController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueHeaderController.java index 0c6e66b..70c22d7 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueHeaderController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueHeaderController.java @@ -119,8 +119,7 @@ public class WmIssueHeaderController extends BaseController wmIssueHeader.setAreaCode(area.getAreaCode()); wmIssueHeader.setAreaName(area.getAreaName()); } - - + wmIssueHeader.setCreateBy(getUsername()); return toAjax(wmIssueHeaderService.insertWmIssueHeader(wmIssueHeader)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueLineController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueLineController.java index 071d829..6687269 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueLineController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueLineController.java @@ -77,6 +77,7 @@ public class WmIssueLineController extends BaseController @PostMapping public AjaxResult add(@RequestBody WmIssueLine wmIssueLine) { + wmIssueLine.setCreateBy(getUsername()); return toAjax(wmIssueLineService.insertWmIssueLine(wmIssueLine)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptController.java index 0b7a26f..fd1fbf7 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptController.java @@ -118,6 +118,7 @@ public class WmItemRecptController extends BaseController wmItemRecpt.setAreaName(area.getAreaName()); } + wmItemRecpt.setCreateBy(getUsername()); return toAjax(wmItemRecptService.insertWmItemRecpt(wmItemRecpt)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptLineController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptLineController.java index cb80822..838566e 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptLineController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptLineController.java @@ -110,6 +110,7 @@ public class WmItemRecptLineController extends BaseController wmItemRecptLine.setAreaCode(area.getAreaCode()); wmItemRecptLine.setAreaName(area.getAreaName()); } + wmItemRecptLine.setCreateBy(getUsername()); return toAjax(wmItemRecptLineService.insertWmItemRecptLine(wmItemRecptLine)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmPackageController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmPackageController.java index 7b7f77f..271bd23 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmPackageController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmPackageController.java @@ -107,6 +107,7 @@ public class WmPackageController extends BaseController wmBarcode.setBarcodeContent(""+UserConstants.BARCODE_TYPE_PACKAGE+"-"+wmPackage.getPackageCode()); String path =wmBarcodeService.generateBarcode(wmBarcode); wmBarcode.setBarcodeUrl(path); + wmBarcode.setCreateBy(getUsername()); wmBarcodeService.insertWmBarcode(wmBarcode); //将条码的URL更新上去 diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductRecptController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductRecptController.java index 8b9208d..67eec8c 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductRecptController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductRecptController.java @@ -117,7 +117,7 @@ public class WmProductRecptController extends BaseController wmProductRecpt.setAreaCode(area.getAreaCode()); wmProductRecpt.setAreaName(area.getAreaName()); } - + wmProductRecpt.setCreateBy(getUsername()); return toAjax(wmProductRecptService.insertWmProductRecpt(wmProductRecpt)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductRecptLineController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductRecptLineController.java index c0e1610..2347c9e 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductRecptLineController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductRecptLineController.java @@ -109,7 +109,7 @@ public class WmProductRecptLineController extends BaseController wmProductRecptLine.setAreaCode(area.getAreaCode()); wmProductRecptLine.setAreaName(area.getAreaName()); } - + wmProductRecptLine.setCreateBy(getUsername()); return toAjax(wmProductRecptLineService.insertWmProductRecptLine(wmProductRecptLine)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductSalseController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductSalseController.java index 8b693c0..ec332ad 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductSalseController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductSalseController.java @@ -117,6 +117,7 @@ public class WmProductSalseController extends BaseController wmProductSalse.setAreaCode(area.getAreaCode()); wmProductSalse.setAreaName(area.getAreaName()); } + wmProductSalse.setCreateBy(getUsername()); return toAjax(wmProductSalseService.insertWmProductSalse(wmProductSalse)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductSalseLineController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductSalseLineController.java index 20b597e..47e2dcf 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductSalseLineController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmProductSalseLineController.java @@ -77,6 +77,7 @@ public class WmProductSalseLineController extends BaseController @PostMapping public AjaxResult add(@RequestBody WmProductSalseLine wmProductSalseLine) { + wmProductSalseLine.setCreateBy(getUsername()); return toAjax(wmProductSalseLineService.insertWmProductSalseLine(wmProductSalseLine)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtIssueController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtIssueController.java index 8e05b12..865537a 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtIssueController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtIssueController.java @@ -118,6 +118,7 @@ public class WmRtIssueController extends BaseController wmRtIssue.setAreaCode(area.getAreaCode()); wmRtIssue.setAreaName(area.getAreaName()); } + wmRtIssue.setCreateBy(getUsername()); return toAjax(wmRtIssueService.insertWmRtIssue(wmRtIssue)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtIssueLineController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtIssueLineController.java index 9a5d57e..59ca5ec 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtIssueLineController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtIssueLineController.java @@ -109,6 +109,7 @@ public class WmRtIssueLineController extends BaseController wmRtIssueLine.setAreaCode(area.getAreaCode()); wmRtIssueLine.setAreaName(area.getAreaName()); } + wmRtIssueLine.setCreateBy(getUsername()); return toAjax(wmRtIssueLineService.insertWmRtIssueLine(wmRtIssueLine)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtSalseController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtSalseController.java index 9b829e9..8b401b4 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtSalseController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtSalseController.java @@ -117,6 +117,7 @@ public class WmRtSalseController extends BaseController wmRtSalse.setAreaCode(area.getAreaCode()); wmRtSalse.setAreaName(area.getAreaName()); } + wmRtSalse.setCreateBy(getUsername()); return toAjax(wmRtSalseService.insertWmRtSalse(wmRtSalse)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtSalseLineController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtSalseLineController.java index c95ef89..d53ceb1 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtSalseLineController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtSalseLineController.java @@ -109,6 +109,7 @@ public class WmRtSalseLineController extends BaseController wmRtSalseLine.setAreaCode(area.getAreaCode()); wmRtSalseLine.setAreaName(area.getAreaName()); } + wmRtSalseLine.setCreateBy(getUsername()); return toAjax(wmRtSalseLineService.insertWmRtSalseLine(wmRtSalseLine)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtVendorController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtVendorController.java index f6acd88..01374a7 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtVendorController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtVendorController.java @@ -92,6 +92,7 @@ public class WmRtVendorController extends BaseController if(UserConstants.NOT_UNIQUE.equals(wmRtVendorService.checkCodeUnique(wmRtVendor))){ return AjaxResult.error("退货单编号已经存在!"); } + wmRtVendor.setCreateBy(getUsername()); return toAjax(wmRtVendorService.insertWmRtVendor(wmRtVendor)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtVendorLineController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtVendorLineController.java index 7b31a23..5d9316b 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtVendorLineController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmRtVendorLineController.java @@ -77,6 +77,7 @@ public class WmRtVendorLineController extends BaseController @PostMapping public AjaxResult add(@RequestBody WmRtVendorLine wmRtVendorLine) { + wmRtVendorLine.setCreateBy(getUsername()); return toAjax(wmRtVendorLineService.insertWmRtVendorLine(wmRtVendorLine)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmTransferController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmTransferController.java index 642fec5..f85583d 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmTransferController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmTransferController.java @@ -106,7 +106,7 @@ public class WmTransferController extends BaseController wmTransfer.setToWarehouseName(warehouse.getWarehouseName()); } - + wmTransfer.setCreateBy(getUsername()); return toAjax(wmTransferService.insertWmTransfer(wmTransfer)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmTransferLineController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmTransferLineController.java index bdc3a42..e459d2c 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmTransferLineController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmTransferLineController.java @@ -123,6 +123,7 @@ public class WmTransferLineController extends BaseController wmTransferLine.setToAreaCode(area.getAreaCode()); wmTransferLine.setToAreaName(area.getAreaName()); } + wmTransferLine.setCreateBy(getUsername()); return toAjax(wmTransferLineService.insertWmTransferLine(wmTransferLine)); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmItemRecptLineMobController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmItemRecptLineMobController.java new file mode 100644 index 0000000..c198635 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmItemRecptLineMobController.java @@ -0,0 +1,134 @@ +package com.ktg.mes.wm.controller.mobile; + +import com.ktg.common.annotation.Log; +import com.ktg.common.core.controller.BaseController; +import com.ktg.common.core.domain.AjaxResult; +import com.ktg.common.core.page.TableDataInfo; +import com.ktg.common.enums.BusinessType; +import com.ktg.common.utils.StringUtils; +import com.ktg.mes.wm.domain.WmItemRecptLine; +import com.ktg.mes.wm.domain.WmStorageArea; +import com.ktg.mes.wm.domain.WmStorageLocation; +import com.ktg.mes.wm.domain.WmWarehouse; +import com.ktg.mes.wm.service.IWmItemRecptLineService; +import com.ktg.mes.wm.service.IWmStorageAreaService; +import com.ktg.mes.wm.service.IWmStorageLocationService; +import com.ktg.mes.wm.service.IWmWarehouseService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Api("采购入库明细") +@RestController +@RequestMapping("/mobile/wm/itemrecptline") +public class WmItemRecptLineMobController extends BaseController { + + @Autowired + private IWmItemRecptLineService wmItemRecptLineService; + + + @Autowired + private IWmWarehouseService wmWarehouseService; + + @Autowired + private IWmStorageLocationService wmStorageLocationService; + + @Autowired + private IWmStorageAreaService wmStorageAreaService; + + /** + * 查询物料入库单行列表 + */ + @ApiOperation("查询采购入库单明细信息接口") + @PreAuthorize("@ss.hasPermi('mes:wm:itemrecptline:list')") + @GetMapping("/list") + public TableDataInfo list(WmItemRecptLine wmItemRecptLine) + { + startPage(); + List list = wmItemRecptLineService.selectWmItemRecptLineList(wmItemRecptLine); + return getDataTable(list); + } + + /** + * 获取物料入库单行详细信息 + */ + @ApiOperation("查看采购入库单明细信息接口") + @PreAuthorize("@ss.hasPermi('mes:wm:itemrecptline:query')") + @GetMapping(value = "/{lineId}") + public AjaxResult getInfo(@PathVariable("lineId") Long lineId) + { + return AjaxResult.success(wmItemRecptLineService.selectWmItemRecptLineByLineId(lineId)); + } + + /** + * 新增物料入库单行 + */ + @ApiOperation("新增采购入库单明细信息接口") + @PreAuthorize("@ss.hasPermi('mes:wm:itemrecptline:add')") + @Log(title = "物料入库单行", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WmItemRecptLine wmItemRecptLine) + { + if(StringUtils.isNotNull(wmItemRecptLine.getWarehouseId())){ + WmWarehouse warehouse = wmWarehouseService.selectWmWarehouseByWarehouseId(wmItemRecptLine.getWarehouseId()); + wmItemRecptLine.setWarehouseCode(warehouse.getWarehouseCode()); + wmItemRecptLine.setWarehouseName(warehouse.getWarehouseName()); + } + if(StringUtils.isNotNull(wmItemRecptLine.getLocationId())){ + WmStorageLocation location = wmStorageLocationService.selectWmStorageLocationByLocationId(wmItemRecptLine.getLocationId()); + wmItemRecptLine.setLocationCode(location.getLocationCode()); + wmItemRecptLine.setLocationName(location.getLocationName()); + } + if(StringUtils.isNotNull(wmItemRecptLine.getAreaId())){ + WmStorageArea area = wmStorageAreaService.selectWmStorageAreaByAreaId(wmItemRecptLine.getAreaId()); + wmItemRecptLine.setAreaCode(area.getAreaCode()); + wmItemRecptLine.setAreaName(area.getAreaName()); + } + wmItemRecptLine.setCreateBy(getUsername()); + return toAjax(wmItemRecptLineService.insertWmItemRecptLine(wmItemRecptLine)); + } + + /** + * 修改物料入库单行 + */ + @ApiOperation("修改采购入库单明细信息接口") + @PreAuthorize("@ss.hasPermi('mes:wm:itemrecptline:edit')") + @Log(title = "物料入库单行", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody WmItemRecptLine wmItemRecptLine) + { + if(StringUtils.isNotNull(wmItemRecptLine.getWarehouseId())){ + WmWarehouse warehouse = wmWarehouseService.selectWmWarehouseByWarehouseId(wmItemRecptLine.getWarehouseId()); + wmItemRecptLine.setWarehouseCode(warehouse.getWarehouseCode()); + wmItemRecptLine.setWarehouseName(warehouse.getWarehouseName()); + } + if(StringUtils.isNotNull(wmItemRecptLine.getLocationId())){ + WmStorageLocation location = wmStorageLocationService.selectWmStorageLocationByLocationId(wmItemRecptLine.getLocationId()); + wmItemRecptLine.setLocationCode(location.getLocationCode()); + wmItemRecptLine.setLocationName(location.getLocationName()); + } + if(StringUtils.isNotNull(wmItemRecptLine.getAreaId())){ + WmStorageArea area = wmStorageAreaService.selectWmStorageAreaByAreaId(wmItemRecptLine.getAreaId()); + wmItemRecptLine.setAreaCode(area.getAreaCode()); + wmItemRecptLine.setAreaName(area.getAreaName()); + } + return toAjax(wmItemRecptLineService.updateWmItemRecptLine(wmItemRecptLine)); + } + + /** + * 删除物料入库单行 + */ + @ApiOperation("删除采购入库单明细信息接口") + @PreAuthorize("@ss.hasPermi('mes:wm:itemrecptline:remove')") + @Log(title = "物料入库单行", businessType = BusinessType.DELETE) + @DeleteMapping("/{lineIds}") + public AjaxResult remove(@PathVariable Long[] lineIds) + { + return toAjax(wmItemRecptLineService.deleteWmItemRecptLineByLineIds(lineIds)); + } + +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmItemRecptMobController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmItemRecptMobController.java new file mode 100644 index 0000000..25211ad --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmItemRecptMobController.java @@ -0,0 +1,167 @@ +package com.ktg.mes.wm.controller.mobile; + +import com.ktg.common.annotation.Log; +import com.ktg.common.constant.UserConstants; +import com.ktg.common.core.controller.BaseController; +import com.ktg.common.core.domain.AjaxResult; +import com.ktg.common.enums.BusinessType; +import com.ktg.common.utils.StringUtils; +import com.ktg.mes.wm.domain.WmItemRecpt; +import com.ktg.mes.wm.domain.WmStorageArea; +import com.ktg.mes.wm.domain.WmStorageLocation; +import com.ktg.mes.wm.domain.WmWarehouse; +import com.ktg.mes.wm.domain.tx.ItemRecptTxBean; +import com.ktg.mes.wm.service.*; +import com.ktg.system.strategy.AutoCodeUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Api("采购入库") +@RestController +@RequestMapping("/mobile/wm/itemrecpt") +public class WmItemRecptMobController extends BaseController { + + @Autowired + private IWmItemRecptService wmItemRecptService; + + @Autowired + private IWmItemRecptLineService wmItemRecptLineService; + + @Autowired + private IWmWarehouseService wmWarehouseService; + + @Autowired + private IWmStorageLocationService wmStorageLocationService; + + @Autowired + private IWmStorageAreaService wmStorageAreaService; + + @Autowired + private IStorageCoreService storageCoreService; + + @Autowired + private AutoCodeUtil autoCodeUtil; + + /** + * 新增物料入库单 + */ + @ApiOperation("新增采购入库单基本信息接口") + @PreAuthorize("@ss.hasPermi('mes:wm:itemrecpt:add')") + @Log(title = "物料入库单", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WmItemRecpt wmItemRecpt) + { + if(StringUtils.isNotNull(wmItemRecpt.getRecptCode())){ + if(UserConstants.NOT_UNIQUE.equals(wmItemRecptService.checkRecptCodeUnique(wmItemRecpt))){ + return AjaxResult.error("单据编号已存在!"); + } + }else { + wmItemRecpt.setRecptCode(autoCodeUtil.genSerialCode(UserConstants.ITEMRECPT_CODE,"")); + } + + + if(StringUtils.isNotNull(wmItemRecpt.getWarehouseId())){ + WmWarehouse warehouse = wmWarehouseService.selectWmWarehouseByWarehouseId(wmItemRecpt.getWarehouseId()); + wmItemRecpt.setWarehouseCode(warehouse.getWarehouseCode()); + wmItemRecpt.setWarehouseName(warehouse.getWarehouseName()); + } + if(StringUtils.isNotNull(wmItemRecpt.getLocationId())){ + WmStorageLocation location = wmStorageLocationService.selectWmStorageLocationByLocationId(wmItemRecpt.getLocationId()); + wmItemRecpt.setLocationCode(location.getLocationCode()); + wmItemRecpt.setLocationName(location.getLocationName()); + } + if(StringUtils.isNotNull(wmItemRecpt.getAreaId())){ + WmStorageArea area = wmStorageAreaService.selectWmStorageAreaByAreaId(wmItemRecpt.getAreaId()); + wmItemRecpt.setAreaCode(area.getAreaCode()); + wmItemRecpt.setAreaName(area.getAreaName()); + } + wmItemRecpt.setCreateBy(getUsername()); + wmItemRecptService.insertWmItemRecpt(wmItemRecpt); + return AjaxResult.success(wmItemRecpt); + } + + /** + * 修改物料入库单 + */ + @ApiOperation("修改采购入库单基本信息接口") + @PreAuthorize("@ss.hasPermi('mes:wm:itemrecpt:edit')") + @Log(title = "物料入库单", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody WmItemRecpt wmItemRecpt) + { + if(StringUtils.isNotNull(wmItemRecpt.getWarehouseId())){ + WmWarehouse warehouse = wmWarehouseService.selectWmWarehouseByWarehouseId(wmItemRecpt.getWarehouseId()); + wmItemRecpt.setWarehouseCode(warehouse.getWarehouseCode()); + wmItemRecpt.setWarehouseName(warehouse.getWarehouseName()); + } + if(StringUtils.isNotNull(wmItemRecpt.getLocationId())){ + WmStorageLocation location = wmStorageLocationService.selectWmStorageLocationByLocationId(wmItemRecpt.getLocationId()); + wmItemRecpt.setLocationCode(location.getLocationCode()); + wmItemRecpt.setLocationName(location.getLocationName()); + } + if(StringUtils.isNotNull(wmItemRecpt.getAreaId())){ + WmStorageArea area = wmStorageAreaService.selectWmStorageAreaByAreaId(wmItemRecpt.getAreaId()); + wmItemRecpt.setAreaCode(area.getAreaCode()); + wmItemRecpt.setAreaName(area.getAreaName()); + } + return toAjax(wmItemRecptService.updateWmItemRecpt(wmItemRecpt)); + } + + /** + * 删除物料入库单 + */ + @ApiOperation("删除采购入库单基本信息接口") + @PreAuthorize("@ss.hasPermi('mes:wm:itemrecpt:remove')") + @Log(title = "物料入库单", businessType = BusinessType.DELETE) + @Transactional + @DeleteMapping("/{recptIds}") + public AjaxResult remove(@PathVariable Long[] recptIds) + { + for (Long id: + recptIds + ) { + WmItemRecpt itemRecpt = wmItemRecptService.selectWmItemRecptByRecptId(id); + if(!UserConstants.ORDER_STATUS_PREPARE.equals(itemRecpt.getStatus())){ + return AjaxResult.error("只能删除草稿状态的单据!"); + } + + wmItemRecptLineService.deleteByRecptId(id); + } + + return toAjax(wmItemRecptService.deleteWmItemRecptByRecptIds(recptIds)); + } + + /** + * 执行入库 + * @return + */ + @ApiOperation("执行入库接口") + @PreAuthorize("@ss.hasPermi('mes:wm:itemrecpt:edit')") + @Log(title = "物料入库单", businessType = BusinessType.UPDATE) + @Transactional + @PutMapping("/{recptId}") + public AjaxResult execute(@PathVariable Long recptId){ + + WmItemRecpt recpt = wmItemRecptService.selectWmItemRecptByRecptId(recptId); + + //构造Transaction事务,并执行库存更新逻辑 + List beans = wmItemRecptService.getTxBeans(recptId); + + //调用库存核心 + storageCoreService.processItemRecpt(beans); + + //更新单据状态 + recpt.setStatus(UserConstants.ORDER_STATUS_FINISHED); + wmItemRecptService.updateWmItemRecpt(recpt); + + return AjaxResult.success(); + } + + +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmMaterialStockMobController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmMaterialStockMobController.java new file mode 100644 index 0000000..584263c --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/mobile/WmMaterialStockMobController.java @@ -0,0 +1,49 @@ +package com.ktg.mes.wm.controller.mobile; + +import com.ktg.common.core.controller.BaseController; +import com.ktg.common.core.domain.AjaxResult; +import com.ktg.common.core.page.TableDataInfo; +import com.ktg.mes.wm.domain.WmMaterialStock; +import com.ktg.mes.wm.service.IWmMaterialStockService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Api("库存现有量查询") +@RestController +@RequestMapping("/mobile/wm/wmstock") +public class WmMaterialStockMobController extends BaseController { + @Autowired + private IWmMaterialStockService wmMaterialStockService; + + /** + * 查询库存记录列表 + */ + @ApiOperation("查询库存现有量") + @PreAuthorize("@ss.hasPermi('mes:wm:wmstock:list')") + @GetMapping("/list") + public TableDataInfo list(WmMaterialStock wmMaterialStock) + { + startPage(); + List list = wmMaterialStockService.selectWmMaterialStockList(wmMaterialStock); + return getDataTable(list); + } + + /** + * 获取库存记录详细信息 + */ + @ApiOperation("查询库存现有量明细") + @PreAuthorize("@ss.hasPermi('mes:wm:wmstock:query')") + @GetMapping(value = "/{materialStockId}") + public AjaxResult getInfo(@PathVariable("materialStockId") Long materialStockId) + { + return AjaxResult.success(wmMaterialStockService.selectWmMaterialStockByMaterialStockId(materialStockId)); + } +} diff --git a/ktg-system/src/main/java/com/ktg/system/domain/UserTask.java b/ktg-system/src/main/java/com/ktg/system/domain/UserTask.java new file mode 100644 index 0000000..840afbe --- /dev/null +++ b/ktg-system/src/main/java/com/ktg/system/domain/UserTask.java @@ -0,0 +1,111 @@ +package com.ktg.system.domain; + +import com.ktg.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * 所有用户相关的业务单据 + * 用于移动端展示待处理单据和已处理单据 + */ +public class UserTask extends BaseEntity { + + /** + * 单据类型 + */ + private String taskType; + + /** + * 单据的ID + */ + private String taskId; + + /** + * 单据编码 + */ + private String taskCode; + + /** + * 单据名称 + */ + private String taskName; + + + /** + * 单据的状态 + */ + private String status; + + private String nickName; + + private String userName; + + public String getTaskType() { + return taskType; + } + + public void setTaskType(String taskType) { + this.taskType = taskType; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTaskCode() { + return taskCode; + } + + public void setTaskCode(String taskCode) { + this.taskCode = taskCode; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + @Override + public String toString() { + return "UserTask{" + + "taskType='" + taskType + '\'' + + ", taskId='" + taskId + '\'' + + ", taskCode='" + taskCode + '\'' + + ", taskName='" + taskName + '\'' + + ", status='" + status + '\'' + + ", nickName='" + nickName + '\'' + + ", userName='" + userName + '\'' + + '}'; + } +} diff --git a/ktg-system/src/main/java/com/ktg/system/mapper/UserTaskMapper.java b/ktg-system/src/main/java/com/ktg/system/mapper/UserTaskMapper.java new file mode 100644 index 0000000..b5250d9 --- /dev/null +++ b/ktg-system/src/main/java/com/ktg/system/mapper/UserTaskMapper.java @@ -0,0 +1,13 @@ +package com.ktg.system.mapper; + +import com.ktg.system.domain.UserTask; + +import java.util.List; + +public interface UserTaskMapper { + + public List listTodoList(Long userId); + + public List listFinishedList(Long userId); + +} diff --git a/ktg-system/src/main/java/com/ktg/system/service/IUserTaskService.java b/ktg-system/src/main/java/com/ktg/system/service/IUserTaskService.java new file mode 100644 index 0000000..102371f --- /dev/null +++ b/ktg-system/src/main/java/com/ktg/system/service/IUserTaskService.java @@ -0,0 +1,13 @@ +package com.ktg.system.service; + +import com.ktg.system.domain.UserTask; + +import java.util.List; + +public interface IUserTaskService { + + public List listTodoList(Long userId); + + public List listFinishedList(Long userId); + +} diff --git a/ktg-system/src/main/java/com/ktg/system/service/impl/UserTaskServiceImpl.java b/ktg-system/src/main/java/com/ktg/system/service/impl/UserTaskServiceImpl.java new file mode 100644 index 0000000..ae30414 --- /dev/null +++ b/ktg-system/src/main/java/com/ktg/system/service/impl/UserTaskServiceImpl.java @@ -0,0 +1,26 @@ +package com.ktg.system.service.impl; + +import com.ktg.system.domain.UserTask; +import com.ktg.system.mapper.UserTaskMapper; +import com.ktg.system.service.IUserTaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class UserTaskServiceImpl implements IUserTaskService { + + @Autowired + private UserTaskMapper userTaskMapper; + + @Override + public List listTodoList(Long userId) { + return userTaskMapper.listTodoList(userId); + } + + @Override + public List listFinishedList(Long userId) { + return userTaskMapper.listFinishedList(userId); + } +} diff --git a/ktg-system/src/main/resources/mapper/system/UserTaskMapper.xml b/ktg-system/src/main/resources/mapper/system/UserTaskMapper.xml new file mode 100644 index 0000000..4ef6a44 --- /dev/null +++ b/ktg-system/src/main/resources/mapper/system/UserTaskMapper.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file