소스 검색

供应商核实网点采购单

FengChaoYu 8 달 전
부모
커밋
6de7bc6e4a

+ 6 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/material/manage/WebsitMPurchaseBean.java

@@ -57,6 +57,12 @@ public class WebsitMPurchaseBean {
     @ApiModelProperty(value = "备注")
     private String remark;
 
+    @ApiModelProperty(value = "核实备注")
+    private String checkRemark;
+
+    @ApiModelProperty(value = "审核备注")
+    private String confirmRemark;
+
     @ApiModelProperty(value = "创建人")
     private String createBy;
 

+ 77 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/material/vender/WebsitPurchaseCheckVO.java

@@ -0,0 +1,77 @@
+package com.gree.mall.manager.bean.material.vender;
+
+import com.gree.mall.manager.annotation.ZfireField;
+import com.gree.mall.manager.enums.IsYesNoEnum;
+import com.gree.mall.manager.enums.material.MaterialFlagEnum;
+import com.gree.mall.manager.enums.material.WebsitGoodsTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@ApiModel
+@Data
+@ZfireField(tbName = "a")
+public class WebsitPurchaseCheckVO {
+    @ApiModelProperty(value = "单号")
+    private String purchaseId;
+
+    @ApiModelProperty(value = "商户名称")
+    private String companyWechatName;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "网点编号")
+    private String websitId;
+
+    @ApiModelProperty(value = "网点名称")
+    private String websitName;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "商品类型")
+    private WebsitGoodsTypeEnum goodsType;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "供应商编号")
+    private String venderId;
+
+    @ApiModelProperty(value = "供应商名称")
+    private String venderName;
+
+    @ApiModelProperty(value = "采购总金额")
+    private String totalAmount;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "单据状态")
+    private MaterialFlagEnum flag;
+
+    @ApiModelProperty(value = "是否核实")
+    private IsYesNoEnum isRecheck;
+
+    @ApiModelProperty(value = "备注")
+    private String checkRemark;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "核实人")
+    private String checkBy;
+
+    @ApiModelProperty(value = "核实时间")
+    private Date checkTime;
+
+    @ApiModelProperty(value = "审核人")
+    private String confirmBy;
+
+    @ApiModelProperty(value = "审核时间")
+    private Date confirmTime;
+}

+ 9 - 0
mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/MaterialMapper.java

@@ -8,6 +8,7 @@ import com.gree.mall.manager.bean.material.base.*;
 import com.gree.mall.manager.bean.material.manage.*;
 import com.gree.mall.manager.bean.material.stock.WebsitSalesCategoryVO;
 import com.gree.mall.manager.bean.material.stock.WebsitSalesGoodsVO;
+import com.gree.mall.manager.bean.material.vender.WebsitPurchaseCheckVO;
 import com.gree.mall.manager.bean.material.vender.WebsitVenderGoodsRelaVO;
 import com.gree.mall.manager.bean.material.vender.WebsitVenderGoodsVO;
 import com.gree.mall.manager.bean.material.vender.WebsitVenderVO;
@@ -225,4 +226,12 @@ public interface MaterialMapper {
      * @return
      */
     IPage<WebsitPurchaseApplyVO> websitPurchaseApplyPage(Page page, @Param("ex") ZfireParamBean zfireParamBean);
+
+    /**
+     * 核实采购列表
+     * @param page
+     * @param zfireParamBean
+     * @return
+     */
+    IPage<WebsitPurchaseCheckVO> websitPurchaseCheckPage(Page page, @Param("ex") ZfireParamBean zfireParamBean);
 }

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/controller/material/manage/WebsitPurchaseApplyController.java

@@ -106,7 +106,7 @@ public class WebsitPurchaseApplyController {
             if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
                 log.error("获取采购申请单锁超时!");
             }
-            websitMPurchaseLogic.revoke(purchaseId);
+            websitMPurchaseLogic.revoke(purchaseId, 1);
         } catch (InterruptedException e) {
             log.error(purchaseId + " 撤消失败!", e);
             throw new RemoteServiceException(purchaseId + " 撤消失败!" + e.getMessage());

+ 117 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/material/vender/VenderCheckPurchaseController.java

@@ -0,0 +1,117 @@
+package com.gree.mall.manager.controller.material.vender;
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gree.mall.manager.annotation.ZfireList;
+import com.gree.mall.manager.bean.material.manage.WebsitMPurchaseBean;
+import com.gree.mall.manager.bean.material.vender.WebsitPurchaseCheckVO;
+import com.gree.mall.manager.constant.Constant;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.helper.ResponseHelper;
+import com.gree.mall.manager.logic.material.manage.WebsitMPurchaseLogic;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import com.gree.mall.manager.zfire.util.FieldUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.integration.redis.util.RedisLockRegistry;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+
+@Slf4j
+@RestController
+@Api(value = "供应商核实采购API", tags ={"供应商核实采购API"} )
+@RequestMapping(value = "/vender/check/purchase", produces = "application/json; charset=utf-8")
+public class VenderCheckPurchaseController {
+
+    @Resource
+    WebsitMPurchaseLogic websitMPurchaseLogic;
+    @Resource
+    RedisLockRegistry redisLockRegistry;
+
+    @ZfireList
+    @PostMapping("/list")
+    @ApiOperation(value = "核实采购-列表")
+    public ResponseHelper<IPage<WebsitPurchaseCheckVO>> page(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) {
+        IPage<WebsitPurchaseCheckVO> page = websitMPurchaseLogic.checkPage(zfireParamBean);
+        return ResponseHelper.success(page, new TypeReference<WebsitPurchaseCheckVO>() {});
+    }
+
+    @PostMapping("/list/export")
+    @ApiOperation("核实采购-导出")
+    public void listExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //2.查询要导出的内容
+        IPage<WebsitPurchaseCheckVO> baseVOIPage = websitMPurchaseLogic.checkPage(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(baseVOIPage.getRecords(), zfireParamBean.getExportFields(), request, response);
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "核实采购-详情")
+    public ResponseHelper<WebsitMPurchaseBean> detail(
+            @ApiParam(value = "purchaseId", required = true) @RequestParam String purchaseId
+    ) throws RemoteServiceException {
+        WebsitMPurchaseBean bean = websitMPurchaseLogic.detail(purchaseId);
+        return ResponseHelper.success(bean);
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "核实采购-修改")
+    public ResponseHelper update(@RequestBody WebsitMPurchaseBean bean) throws RemoteServiceException {
+        websitMPurchaseLogic.checkUpdate(bean);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/revoke")
+    @ApiOperation(value = "核实采购-撤消")
+    public ResponseHelper revoke(@ApiParam(value = "采购申请单id",required = true) @RequestParam String purchaseId)
+            throws RemoteServiceException {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_MATERIAL_PURCHASE + purchaseId);
+        try {
+            if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
+                log.error("获取采购申请单锁超时!");
+            }
+            websitMPurchaseLogic.revoke(purchaseId, 2);
+        } catch (InterruptedException e) {
+            log.error(purchaseId + " 撤消失败!", e);
+            throw new RemoteServiceException(purchaseId + " 撤消失败!" + e.getMessage());
+        } finally {
+            obtain.unlock();
+        }
+
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/verify")
+    @ApiOperation(value = "核实采购-核实")
+    public ResponseHelper verify(@ApiParam(value = "采购申请单id",required = true) @RequestParam String purchaseId)
+            throws RemoteServiceException {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_MATERIAL_PURCHASE + purchaseId);
+        try {
+            if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
+                log.error("获取采购申请单锁超时!");
+            }
+            websitMPurchaseLogic.verify(purchaseId);
+        } catch (InterruptedException e) {
+            log.error(purchaseId + " 核实失败!", e);
+            throw new RemoteServiceException(purchaseId + " 核实失败!" + e.getMessage());
+        } finally {
+            obtain.unlock();
+        }
+
+        return ResponseHelper.success();
+    }
+
+}

+ 10 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/admin/AdminUserLogic.java

@@ -204,6 +204,11 @@ public class AdminUserLogic {
         if (StringUtils.isBlank(adminUser.getUserName()) || StringUtils.isBlank(adminUser.getPassword())) {
             throw new RemoteServiceException("参数错误");
         }
+        if (Objects.nonNull(adminUser.getIsVender())
+                && adminUser.getIsVender()
+                && StringUtils.isBlank(adminUser.getVenderId())) {
+            throw new RemoteServiceException("请选择供应商");
+        }
         Integer count = adminUserService.lambdaQuery().eq(AdminUser::getUserName, adminUser.getUserName()).count();
         if (count > 0) {
             throw new RemoteServiceException("帐号已被注册");
@@ -276,7 +281,6 @@ public class AdminUserLogic {
 
         //添加部门
         this.addAdminUserDept(adminUser);
-
     }
 
     private void addAdminUserDept(AdminUserAddReqBean adminUser) {
@@ -317,6 +321,11 @@ public class AdminUserLogic {
         if (StringUtils.isBlank(newUser.getRoleId()) || (addUserRole = adminRoleService.getById(newUser.getRoleId())) == null) {
             throw new RemoteServiceException("请为用户选择角色");
         }
+        if (Objects.nonNull(newUser.getIsVender())
+                && newUser.getIsVender()
+                && StringUtils.isBlank(newUser.getVenderId())) {
+            throw new RemoteServiceException("请选择供应商");
+        }
         //  添加用户的角色级别 <= 被添加的用户的角色级别
 //        if (loginRole.getType() <= addUserRole.getType()) {
 //            throw new RemoteServiceException("无法为用户赋予与自身级别相当的角色");

+ 63 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitMPurchaseLogic.java

@@ -9,6 +9,7 @@ import com.gree.mall.manager.bean.admin.AdminUserCom;
 import com.gree.mall.manager.bean.material.manage.WebsitMPurchaseBean;
 import com.gree.mall.manager.bean.material.manage.WebsitMPurchaseItemBean;
 import com.gree.mall.manager.bean.material.manage.WebsitPurchaseApplyVO;
+import com.gree.mall.manager.bean.material.vender.WebsitPurchaseCheckVO;
 import com.gree.mall.manager.bean.material.vender.WebsitVenderGoodsRelaVO;
 import com.gree.mall.manager.commonmapper.MaterialMapper;
 import com.gree.mall.manager.enums.IsYesNoEnum;
@@ -92,6 +93,7 @@ public class WebsitMPurchaseLogic {
         bean.setCompanyWechatName(adminUser.getAdminCompanyWechat().getCompanyName());
 
         bean.setFlag(MaterialFlagEnum.SAVE.getKey());
+        bean.setTotalAmount(BigDecimal.ZERO);
 
         // 检查参数值
         this.validApplyParams(bean);
@@ -229,6 +231,7 @@ public class WebsitMPurchaseLogic {
             itemBean.setParentCategoryName(relaGoods.getParentCategoryName());
             itemBean.setGoodsCategoryId(relaGoods.getGoodsCategoryId());
             itemBean.setGoodsCategoryName(relaGoods.getCategoryName());
+            bean.setTotalAmount(bean.getTotalAmount().add(itemBean.getApplyCostValue()));
         }
     }
 
@@ -267,12 +270,15 @@ public class WebsitMPurchaseLogic {
     }
 
     @Transactional
-    public void revoke(String purchaseId) {
+    public void revoke(String purchaseId, int position) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
         if (!websitPurchaseService.lambdaUpdate()
                 .eq(WebsitPurchase::getPurchaseId, purchaseId)
                 .eq(WebsitPurchase::getFlag, MaterialFlagEnum.SUBMIT.getKey())
                 .eq(WebsitPurchase::getIsRecheck, IsYesNoEnum.NO.getKey())
                 .set(WebsitPurchase::getFlag, MaterialFlagEnum.SAVE.getKey())
+                .set(position == 2, WebsitPurchase::getCheckBy, adminUser.getNickName())
+                .set(position == 2, WebsitPurchase::getCheckTime, DateUtil.date())
                 .update()) {
             throw new RemoteServiceException("撤消失败,单据状态已发生变化,非“提交待核实”");
         }
@@ -301,4 +307,60 @@ public class WebsitMPurchaseLogic {
                 .setSubmitTime(DateUtil.date())
                 .updateById();
     }
+
+    public IPage<WebsitPurchaseCheckVO> checkPage(ZfireParamBean zfireParamBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        FieldUtils.materialParam(zfireParamBean, WebsitPurchaseCheckVO.class, adminUser);
+        if (CollectionUtil.isEmpty(zfireParamBean.getParams())) {
+            zfireParamBean.setParams(new ArrayList<>());
+        }
+
+        if (adminUser.getIsVender()) {
+            QueryParamBean paramBean = new QueryParamBean();
+            paramBean.setParam("a.vender_id").setCompare("=").setValue(adminUser.getVenderId());
+            zfireParamBean.getParams().add(paramBean);
+        }
+
+        return materialMapper.websitPurchaseCheckPage(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+
+    }
+
+    @Transactional
+    public void checkUpdate(WebsitMPurchaseBean bean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        WebsitPurchase purchase = websitPurchaseService.getById(bean.getPurchaseId());
+        purchase.setCheckRemark(bean.getCheckRemark())
+                .updateById();
+
+        List<WebsitPurchaseItem> items = websitPurchaseItemService.lambdaQuery()
+                .eq(WebsitPurchaseItem::getPurchaseId, purchase.getPurchaseId())
+                .list();
+
+        final Map<String, BigDecimal> checkItemMap = bean.getItems().stream()
+                .collect(Collectors.toMap(WebsitMPurchaseItemBean::getGoodsId, WebsitMPurchaseItemBean::getCheckQty));
+
+        for (WebsitPurchaseItem item : items) {
+            BigDecimal checkQty = checkItemMap.get(item.getGoodsId());
+            if (Objects.nonNull(checkQty)) {
+                item.setCheckQty(checkQty);
+            }
+        }
+
+        websitPurchaseItemService.saveOrUpdateBatch(items);
+    }
+
+    @Transactional
+    public void verify(String purchaseId) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+
+        websitPurchaseService.lambdaUpdate()
+                .eq(WebsitPurchase::getPurchaseId, purchaseId)
+                .eq(adminUser.getIsVender(), WebsitPurchase::getVenderId, adminUser.getVenderId())
+                .eq(WebsitPurchase::getFlag, MaterialFlagEnum.SUBMIT.getKey())
+                .eq(WebsitPurchase::getIsRecheck, IsYesNoEnum.NO.getKey())
+                .set(WebsitPurchase::getIsRecheck, IsYesNoEnum.YES.getKey())
+                .set(WebsitPurchase::getCheckBy, adminUser.getNickName())
+                .set(WebsitPurchase::getCheckTime, DateUtil.date())
+                .update();
+    }
 }

+ 26 - 0
mall-server-api/src/main/resources/mapper/MaterialMapper.xml

@@ -429,6 +429,32 @@
         FROM
             websit_purchase a
         ${ex.query}
+        <if test="ex.adminWebsitIds != null and ex.adminWebsitIds.size > 0">
+            AND a.websit_id IN
+            <foreach item="item" index="index" collection="ex.adminWebsitIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="ex.orderBy == null or ex.orderBy ==''">
+            ORDER BY a.create_time DESC
+        </if>
+        ${ex.orderBy}
+    </select>
+
+    <select id="websitPurchaseCheckPage"
+            resultType="com.gree.mall.manager.bean.material.vender.WebsitPurchaseCheckVO">
+        SELECT
+            ${ex.selected}
+        FROM
+            websit_purchase a
+        ${ex.query}
+        <if test="ex.adminWebsitIds != null and ex.adminWebsitIds.size > 0">
+            AND a.websit_id IN
+            <foreach item="item" index="index" collection="ex.adminWebsitIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        AND a.flag IN ('SUBMIT', 'OK')
         <if test="ex.orderBy == null or ex.orderBy ==''">
             ORDER BY a.create_time DESC
         </if>