Przeglądaj źródła

仓库管理人员采购

wuxw 3 lat temu
rodzic
commit
5bede833a3

+ 35 - 21
java110-bean/src/main/java/com/java110/po/resourceStoreTimes/ResourceStoreTimesPo.java

@@ -17,6 +17,7 @@ package com.java110.po.resourceStoreTimes;
 
 import java.io.Serializable;
 import java.util.Date;
+
 /**
  * 类表述: Po 数据模型实体对象 基本保持与数据库模型一直 用于 增加修改删除 等时的数据载体
  * add by 吴学文 at 2022-10-06 21:26:56 mail: 928255095@qq.com
@@ -28,55 +29,68 @@ import java.util.Date;
 public class ResourceStoreTimesPo implements Serializable {
 
     private String price;
-private String applyOrderId;
-private String statusCd = "0";
-private String storeId;
-private String stock;
-private String resId;
-private String timesId;
-public String getPrice() {
+    private String applyOrderId;
+    private String statusCd = "0";
+    private String storeId;
+    private String stock;
+    private String resId;
+    private String timesId;
+
+    public String getPrice() {
         return price;
     }
-public void setPrice(String price) {
+
+    public void setPrice(String price) {
         this.price = price;
     }
-public String getApplyOrderId() {
+
+    public String getApplyOrderId() {
         return applyOrderId;
     }
-public void setApplyOrderId(String applyOrderId) {
+
+    public void setApplyOrderId(String applyOrderId) {
         this.applyOrderId = applyOrderId;
     }
-public String getStatusCd() {
+
+    public String getStatusCd() {
         return statusCd;
     }
-public void setStatusCd(String statusCd) {
+
+    public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
-public String getStoreId() {
+
+    public String getStoreId() {
         return storeId;
     }
-public void setStoreId(String storeId) {
+
+    public void setStoreId(String storeId) {
         this.storeId = storeId;
     }
-public String getStock() {
+
+    public String getStock() {
         return stock;
     }
-public void setStock(String stock) {
+
+    public void setStock(String stock) {
         this.stock = stock;
     }
-public String getResId() {
+
+    public String getResId() {
         return resId;
     }
-public void setResId(String resId) {
+
+    public void setResId(String resId) {
         this.resId = resId;
     }
-public String getTimesId() {
+
+    public String getTimesId() {
         return timesId;
     }
-public void setTimesId(String timesId) {
+
+    public void setTimesId(String timesId) {
         this.timesId = timesId;
     }
 
 
-
 }

+ 37 - 0
java110-doc/readme.md

@@ -148,3 +148,40 @@ reqBody 请求报文
 
 resBody 返回报文
 
+
+### demo
+
+/**
+ * 用户登录 功能
+ * 请求地址为/app/login.pcUserLogin
+ */
+
+@Java110CmdDoc(title = "用户登录",
+        description = "登录功能 主要用于 员工 或者管理员登录使用",
+        httpMethod = "post",
+        url = "http://{ip}:{port}/app/login.pcUserLogin",
+        resource = "userDoc",
+        author = "吴学文",
+        serviceCode = "login.pcUserLogin"
+)
+
+@Java110ParamsDoc(params = {
+        @Java110ParamDoc(name = "username", length = 30, remark = "用户名,物业系统分配"),
+        @Java110ParamDoc(name = "passwd", length = 30, remark = "密码,物业系统分配"),
+})
+
+@Java110ResponseDoc(
+        params = {
+                @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
+                @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
+                @Java110ParamDoc(name = "data", type = "Object", remark = "有效数据"),
+                @Java110ParamDoc(parentNodeName = "data",name = "userId", type = "String", remark = "用户ID"),
+                @Java110ParamDoc(parentNodeName = "data",name = "token", type = "String", remark = "临时票据"),
+        }
+)
+
+@Java110ExampleDoc(
+        reqBody="{'username':'wuxw','passwd':'admin'}",
+        resBody="{'code':0,'msg':'成功','data':{'userId':'123123','token':'123213'}}"
+)
+

+ 4 - 0
java110-doc/src/main/java/com/java110/doc/annotation/Java110CmdDoc.java

@@ -42,6 +42,10 @@ public @interface Java110CmdDoc {
      */
     String url();
 
+    /**
+     * @Java110RequestMappingDoc resource
+     * @return
+     */
     String resource();
 
     String author() default "";

+ 4 - 0
java110-doc/src/main/resources/static/doc-ui.html

@@ -22,6 +22,7 @@
                     <div class="dropdown profile-element">
                         <span class="block m-t-xs font-bold">{{docInfo.title}}</span>
                     </div>
+
                 </li>
                 <li class="flex justify-around" style="color: #999;padding: 0px 10px;font-size: 14px;width:100%">
                     <div class="">
@@ -55,6 +56,9 @@
         </div>
         <div class="margin-left right white-bg border-radius doc-interface">
             <h3 class="">{{content.title}}</h3>
+            <div class="">
+                <span >{{content.description}}</span>
+            </div>
             <div class="doc-margin-top">
                 <div class="doc-title">1、请求地址:</div>
                 <div>{{content.url}}</div>

+ 26 - 25
service-store/src/main/java/com/java110/store/api/PurchaseApi.java

@@ -104,31 +104,32 @@ public class PurchaseApi {
         return purchaseApplyBMOImpl.apply(purchaseApplyPo,reqJson);
     }
 
-    @RequestMapping(value = "/resourceEnter", method = RequestMethod.POST)
-    public ResponseEntity<String> resourceEnter(@RequestBody JSONObject reqJson) {
-        Assert.hasKeyAndValue(reqJson, "applyOrderId", "订单ID为空");
-        PurchaseApplyDto purchaseApplyDto = new PurchaseApplyDto();
-        purchaseApplyDto.setApplyOrderId(reqJson.getString("applyOrderId"));
-        purchaseApplyDto.setStatusCd("0");
-        List<PurchaseApplyDto> purchaseApplyDtoList = purchaseApplyInnerServiceSMOImpl.queryPurchaseApplys(purchaseApplyDto);
-        if(purchaseApplyDtoList!=null && PurchaseApplyDto.STATE_AUDITED.equals(purchaseApplyDtoList.get(0).getState())){
-            throw new IllegalArgumentException("该订单已经处理,请刷新确认订单状态!");
-        }
-        JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
-        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
-        for (int detailIndex = 0; detailIndex < purchaseApplyDetails.size(); detailIndex++) {
-            JSONObject purchaseApplyDetail = purchaseApplyDetails.getJSONObject(detailIndex);
-            Assert.hasKeyAndValue(purchaseApplyDetail, "purchaseQuantity", "采购数量未填写");
-            Assert.hasKeyAndValue(purchaseApplyDetail, "price", "采购单价未填写");
-            Assert.hasKeyAndValue(purchaseApplyDetail, "id", "明细ID为空");
-            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(purchaseApplyDetail, PurchaseApplyDetailPo.class);
-            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
-        }
-        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
-        purchaseApplyPo.setApplyOrderId(reqJson.getString("applyOrderId"));
-        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
-        return resourceEnterBMOImpl.enter(purchaseApplyPo);
-    }
+    //调整为cmd 模式
+//    @RequestMapping(value = "/resourceEnter", method = RequestMethod.POST)
+//    public ResponseEntity<String> resourceEnter(@RequestBody JSONObject reqJson) {
+//        Assert.hasKeyAndValue(reqJson, "applyOrderId", "订单ID为空");
+//        PurchaseApplyDto purchaseApplyDto = new PurchaseApplyDto();
+//        purchaseApplyDto.setApplyOrderId(reqJson.getString("applyOrderId"));
+//        purchaseApplyDto.setStatusCd("0");
+//        List<PurchaseApplyDto> purchaseApplyDtoList = purchaseApplyInnerServiceSMOImpl.queryPurchaseApplys(purchaseApplyDto);
+//        if(purchaseApplyDtoList!=null && PurchaseApplyDto.STATE_AUDITED.equals(purchaseApplyDtoList.get(0).getState())){
+//            throw new IllegalArgumentException("该订单已经处理,请刷新确认订单状态!");
+//        }
+//        JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
+//        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
+//        for (int detailIndex = 0; detailIndex < purchaseApplyDetails.size(); detailIndex++) {
+//            JSONObject purchaseApplyDetail = purchaseApplyDetails.getJSONObject(detailIndex);
+//            Assert.hasKeyAndValue(purchaseApplyDetail, "purchaseQuantity", "采购数量未填写");
+//            Assert.hasKeyAndValue(purchaseApplyDetail, "price", "采购单价未填写");
+//            Assert.hasKeyAndValue(purchaseApplyDetail, "id", "明细ID为空");
+//            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(purchaseApplyDetail, PurchaseApplyDetailPo.class);
+//            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
+//        }
+//        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
+//        purchaseApplyPo.setApplyOrderId(reqJson.getString("applyOrderId"));
+//        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
+//        return resourceEnterBMOImpl.enter(purchaseApplyPo);
+//    }
 
     /**
      * 直接入库操作

+ 170 - 0
service-store/src/main/java/com/java110/store/cmd/purchase/ResourceEnterCmd.java

@@ -0,0 +1,170 @@
+package com.java110.store.cmd.purchase;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.doc.annotation.*;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.dto.resourceStore.ResourceStoreDto;
+import com.java110.intf.store.IPurchaseApplyDetailInnerServiceSMO;
+import com.java110.intf.store.IPurchaseApplyInnerServiceSMO;
+import com.java110.intf.store.IResourceStoreInnerServiceSMO;
+import com.java110.intf.store.IResourceStoreTimesV1InnerServiceSMO;
+import com.java110.po.purchase.PurchaseApplyDetailPo;
+import com.java110.po.purchase.PurchaseApplyPo;
+import com.java110.po.purchase.ResourceStorePo;
+import com.java110.po.resourceStoreTimes.ResourceStoreTimesPo;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 采购人员入库 功能
+ * 请求地址为/app/purchase/resourceEnter
+ */
+
+@Java110CmdDoc(title = "采购人员入库",
+        description = "主要用于 采购人员入库",
+        httpMethod = "post",
+        url = "http://{ip}:{port}/app/purchase/resourceEnter",
+        resource = "storeDoc",
+        author = "吴学文",
+        serviceCode = "/purchase/resourceEnter"
+)
+
+@Java110ParamsDoc(params = {
+        @Java110ParamDoc(name = "applyOrderId", length = 30, remark = "采购申请单订单ID"),
+        @Java110ParamDoc(name = "purchaseApplyDetailVo", type = "Array",length = 30, remark = "采购物品信息"),
+        @Java110ParamDoc(parentNodeName = "-", name = "purchaseQuantity", type = "Int",length = 30, remark = "数量"),
+        @Java110ParamDoc(parentNodeName = "-", name = "price", type = "String",length = 30, remark = "价格"),
+        @Java110ParamDoc(parentNodeName = "-", name = "id", type = "String",length = 30, remark = "采购明细ID"),
+        @Java110ParamDoc(parentNodeName = "-", name = "resId", type = "String",length = 30, remark = "物品ID"),
+})
+
+@Java110ResponseDoc(
+        params = {
+                @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
+                @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
+        }
+)
+
+@Java110ExampleDoc(
+        reqBody="{'applyOrderId':'123123','purchaseApplyDetailVo':[{'purchaseQuantity':'10','price':'1.3','id':'123123','resId':'343434'}]}",
+        resBody="{'code':0,'msg':'成功'}"
+)
+
+/**
+ * 采购人员采购入库功能
+ */
+@Java110Cmd(serviceCode = "/purchase/resourceEnter")
+public class ResourceEnterCmd extends Cmd{
+
+    @Autowired
+    private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
+
+    @Autowired
+    private IPurchaseApplyDetailInnerServiceSMO purchaseApplyDetailInnerServiceSMOImpl;
+
+    @Autowired
+    private IResourceStoreInnerServiceSMO resourceStoreInnerServiceSMOImpl;
+
+    @Autowired
+    private IResourceStoreTimesV1InnerServiceSMO resourceStoreTimesV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+        Assert.hasKeyAndValue(reqJson, "applyOrderId", "订单ID为空");
+        PurchaseApplyDto purchaseApplyDto = new PurchaseApplyDto();
+        purchaseApplyDto.setApplyOrderId(reqJson.getString("applyOrderId"));
+        purchaseApplyDto.setStatusCd("0");
+        List<PurchaseApplyDto> purchaseApplyDtoList = purchaseApplyInnerServiceSMOImpl.queryPurchaseApplys(purchaseApplyDto);
+        if(purchaseApplyDtoList!=null && PurchaseApplyDto.STATE_AUDITED.equals(purchaseApplyDtoList.get(0).getState())){
+            throw new IllegalArgumentException("该订单已经处理,请刷新确认订单状态!");
+        }
+        JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
+        for (int detailIndex = 0; detailIndex < purchaseApplyDetails.size(); detailIndex++) {
+            JSONObject purchaseApplyDetail = purchaseApplyDetails.getJSONObject(detailIndex);
+            Assert.hasKeyAndValue(purchaseApplyDetail, "purchaseQuantity", "采购数量未填写");
+            Assert.hasKeyAndValue(purchaseApplyDetail, "price", "采购单价未填写");
+            Assert.hasKeyAndValue(purchaseApplyDetail, "id", "明细ID为空");
+        }
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+
+        JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
+        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
+        for (int detailIndex = 0; detailIndex < purchaseApplyDetails.size(); detailIndex++) {
+            JSONObject purchaseApplyDetail = purchaseApplyDetails.getJSONObject(detailIndex);
+            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(purchaseApplyDetail, PurchaseApplyDetailPo.class);
+            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
+        }
+        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
+        purchaseApplyPo.setApplyOrderId(reqJson.getString("applyOrderId"));
+        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
+
+        purchaseApplyDetailPos = purchaseApplyPo.getPurchaseApplyDetailPos();
+        for (PurchaseApplyDetailPo purchaseApplyDetailPo : purchaseApplyDetailPos) {
+            purchaseApplyDetailInnerServiceSMOImpl.updatePurchaseApplyDetail(purchaseApplyDetailPo);
+            ResourceStorePo resourceStorePo = new ResourceStorePo();
+            resourceStorePo.setResId(purchaseApplyDetailPo.getResId());
+            resourceStorePo.setPurchasePrice(purchaseApplyDetailPo.getPrice());
+            resourceStorePo.setStock(purchaseApplyDetailPo.getPurchaseQuantity());
+            resourceStorePo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_ENTER);
+            //查询物品资源信息
+            ResourceStoreDto resourceStoreDto = new ResourceStoreDto();
+            resourceStoreDto.setResId(purchaseApplyDetailPo.getResId());
+            List<ResourceStoreDto> resourceStoreDtos = resourceStoreInnerServiceSMOImpl.queryResourceStores(resourceStoreDto);
+            Assert.listOnlyOne(resourceStoreDtos, "查询物品资源信息错误!");
+            if (StringUtil.isEmpty(resourceStoreDtos.get(0).getMiniUnitStock())) {
+                throw new IllegalArgumentException("最小计量单位数量不能为空!");
+            }
+            //获取最小计量单位数量
+            BigDecimal miniUnitStock = new BigDecimal(resourceStoreDtos.get(0).getMiniUnitStock());
+            if (StringUtil.isEmpty(resourceStoreDtos.get(0).getMiniStock())) {
+                throw new IllegalArgumentException("最小计量总数不能为空!");
+            }
+            //获取采购前物品最小计量总数
+            BigDecimal miniStock = new BigDecimal(resourceStoreDtos.get(0).getMiniStock());
+            //计算采购的物品最小计量总数
+            BigDecimal purchaseQuantity = new BigDecimal(purchaseApplyDetailPo.getPurchaseQuantity());
+            BigDecimal purchaseMiniStock = purchaseQuantity.multiply(miniUnitStock);
+            //计算采购后物品最小计量总数
+            BigDecimal nowMiniStock = miniStock.add(purchaseMiniStock);
+            resourceStorePo.setMiniStock(String.valueOf(nowMiniStock));
+            resourceStoreInnerServiceSMOImpl.updateResourceStore(resourceStorePo);
+
+            // 保存至 物品 times表
+            ResourceStoreTimesPo resourceStoreTimesPo = new ResourceStoreTimesPo();
+            resourceStoreTimesPo.setApplyOrderId(purchaseApplyPo.getApplyOrderId());
+            resourceStoreTimesPo.setPrice(purchaseApplyDetailPo.getPrice());
+            resourceStoreTimesPo.setStock(purchaseApplyDetailPo.getPurchaseQuantity());
+            resourceStoreTimesPo.setResId(purchaseApplyDetailPo.getResId());
+            resourceStoreTimesPo.setStoreId(resourceStoreDtos.get(0).getStoreId());
+            resourceStoreTimesPo.setTimesId(GenerateCodeFactory.getGeneratorId("10"));
+            resourceStoreTimesV1InnerServiceSMOImpl.saveResourceStoreTimes(resourceStoreTimesPo);
+        }
+        //获取订单号
+        String applyOrderId = purchaseApplyPo.getApplyOrderId();
+        PurchaseApplyPo purchaseApply = new PurchaseApplyPo();
+        purchaseApply.setApplyOrderId(applyOrderId);
+        purchaseApply.setState(PurchaseApplyDto.STATE_AUDITED);
+        purchaseApply.setStatusCd("0");
+        purchaseApplyInnerServiceSMOImpl.updatePurchaseApply(purchaseApply);
+        context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_OK, "采购申请成功"));
+    }
+}