ソースを参照

嘉兴双拓 销售合同 添加 草稿功能,指定研发负责人,列表添加权限过滤

yzc 1 年間 前
コミット
8cc2f536f1

+ 10 - 0
hx-jxst/src/main/java/com/fjhx/jxst/entity/sales/po/SalesContract.java

@@ -146,4 +146,14 @@ public class SalesContract extends BasePo {
      */
     private BigDecimal otherFee;
 
+    /**
+     * 流程状态
+     */
+    private Integer flowStatus;
+
+    /**
+     * 研发负责人id
+     */
+    private Integer devUserId;
+
 }

+ 5 - 0
hx-jxst/src/main/java/com/fjhx/jxst/flow/SalesContractFlow.java

@@ -3,6 +3,7 @@ package com.fjhx.jxst.flow;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.enums.PushBusinessTypeEnum;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.jxst.entity.sales.dto.SalesContractDto;
@@ -45,12 +46,16 @@ public class SalesContractFlow extends FlowDelegate {
         SalesContractDto salesContractDto = submitData.toJavaObject(SalesContractDto.class);
         salesContractDto.setFlowId(flowId);
         salesContractDto.setFlowKey(getFlowKey());
+        salesContractDto.setFlowStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
         salesContractService.add(salesContractDto);
         return salesContractDto.getId();
     }
 
     @Override
     public void end(Long flowId, Long businessId, JSONObject submitData) {
+        SalesContractDto salesContractDto = submitData.toJavaObject(SalesContractDto.class);
+        salesContractDto.setFlowStatus(FlowStatusEnum1.PASS.getKey());
+        salesContractService.updateById(salesContractDto);
         //按产品往“工单管理”中插入对应的工单数据
         List<SalesContractDetails> salesContractDetailsList = salesContractDetailsService.list(q -> q.eq(SalesContractDetails::getSalesContractId, businessId));
         for (SalesContractDetails salesContractDetails : salesContractDetailsList) {

+ 36 - 28
hx-jxst/src/main/java/com/fjhx/jxst/service/sales/impl/SalesContractServiceImpl.java

@@ -3,11 +3,13 @@ package com.fjhx.jxst.service.sales.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.account.po.AccountManagement;
 import com.fjhx.account.service.account.AccountManagementService;
 import com.fjhx.area.utils.CustomizeAreaUtil;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.corporation.po.Corporation;
 import com.fjhx.common.enums.CodingRuleEnum;
 import com.fjhx.common.service.coding.CodingRuleService;
@@ -32,15 +34,14 @@ import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
+import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -69,6 +70,8 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
     private CorporationService corporationService;
     @Autowired
     private CodingRuleService codingRuleService;
+    @Autowired
+    private ISysRoleService sysRoleService;
 
     @Override
     public Page<SalesContractVo> getPage(SalesContractSelectDto dto) {
@@ -89,10 +92,21 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
         //是否结清过滤
         wrapper.eq("sc", SalesContractSelectDto::getIsSettled, dto.getIsSettled());
 
+        //获取用户角色列表
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        Set<String> permissionList = sysRoleService.selectRolePermissionByUserId(SecurityUtils.getUserId());
+        DynamicDataSourceContextHolder.poll();
+
+        //分页权限过滤(财务/管理员看所有,负责人看当前部门,部门总监看部门及子部门数据,其他人只能看自己)
+        if(!permissionList.contains("admin") && !permissionList.contains("finance")){
+            List<Long> authUserIdList = UserUtil.getAuthUserIdList();
+            wrapper.in("sc",SalesContract::getCreateUser,authUserIdList);
+        }
+
         wrapper.orderByDesc("sc", SalesContract::getId);
         Page<SalesContractVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<SalesContractVo> records = page.getRecords();
-        if(ObjectUtil.isEmpty(records)){
+        if (ObjectUtil.isEmpty(records)) {
             return page;
         }
         List<Long> salesContractIds = records.stream().map(SalesContract::getId).collect(Collectors.toList());
@@ -108,13 +122,13 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
         //赋值销售合同明细生产进度
         List<SalesContractDetailsVo> salesContractDetailsVos = salesContractDetailsService.getProductionSchedule(
                 IWrapper.<SalesContractDetails>getWrapper()
-                .in("scd", SalesContractDetails::getSalesContractId, salesContractIds)
+                        .in("scd", SalesContractDetails::getSalesContractId, salesContractIds)
         );
         //计算完工率
-        salesContractDetailsVos.forEach(item->{
+        salesContractDetailsVos.forEach(item -> {
             BigDecimal multiply = BigDecimal.valueOf(100);
-            if(item.getProductionQuantity().compareTo(BigDecimal.ZERO)!=0) {
-                 multiply = item.getCompletedQuantity()
+            if (item.getProductionQuantity().compareTo(BigDecimal.ZERO) != 0) {
+                multiply = item.getCompletedQuantity()
                         .divide(item.getProductionQuantity(), 2, RoundingMode.HALF_UP)
                         .multiply(BigDecimal.valueOf(100));
             }
@@ -127,7 +141,7 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
         });
         Map<Long, List<SalesContractDetailsVo>> scdMap = salesContractDetailsVos.stream()
                 .collect(Collectors.groupingBy(SalesContractDetails::getSalesContractId));
-        records.forEach(item->item.setContractDetailsList(scdMap.get(item.getId())));
+        records.forEach(item -> item.setContractDetailsList(scdMap.get(item.getId())));
 
         return page;
     }
@@ -188,20 +202,14 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
     @DSTransactional
     @Override
     public void add(SalesContractDto salesContractDto) {
-        List<SalesContractDetails> salesContractDetailsList = salesContractDto.getSalesContractDetailsList();
-//        BigDecimal count = BigDecimal.ZERO;
-//        for (SalesContractDetails salesContractDetails : salesContractDetailsList) {
-//            count = count.add(salesContractDetails.getUnitPrice().multiply(salesContractDetails.getQuantity()));
-//        }
-//        salesContractDto.setContractAmount(count);
-//        salesContractDto.setCode(CodeEnum.SALES_CONTRACT.getCode());
         salesContractDto.setCode(codingRuleService.createCode(CodingRuleEnum.JXST_SALES_CONTRACT.getKey(), salesContractDto.getCustomerId()));
+        this.saveOrUpdate(salesContractDto);
 
-        this.save(salesContractDto);
-        for (SalesContractDetails salesContractDetails : salesContractDetailsList) {
-            salesContractDetails.setSalesContractId(salesContractDto.getId());
-        }
-        salesContractDetailsService.saveBatch(salesContractDetailsList);
+        List<SalesContractDetails> salesContractDetailsList = salesContractDto.getSalesContractDetailsList();
+        salesContractDetailsList.forEach(item -> item.setSalesContractId(salesContractDto.getId()));
+
+        //处理被删除的数据,并保存/修改
+        salesContractDetailsService.editLinked(salesContractDetailsList, SalesContractDetails::getSalesContractId, salesContractDto.getId());
     }
 
     /**
@@ -257,7 +265,7 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
     /**
      * 公共的计算代码块
      */
-    private SettlementBo profitClearingConn(SettlementBo record){
+    private SettlementBo profitClearingConn(SettlementBo record) {
         //总收入
         record.setTotalIncome(record.getContractClaimAmount().setScale(4, RoundingMode.HALF_UP));
 
@@ -302,11 +310,11 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
         wrapper.eq("sc.is_settled", dto.getIsSettled());
 
 
-        wrapper.like("cu.name",dto.getCustomerName());
-        wrapper.like("sc.code",dto.getSalesContractCode());
+        wrapper.like("cu.name", dto.getCustomerName());
+        wrapper.like("sc.code", dto.getSalesContractCode());
 
-        wrapper.ge("sc",SalesContract::getCreateTime,dto.getBeginTime());
-        wrapper.le("sc",SalesContract::getCreateTime,dto.getEndTime());
+        wrapper.ge("sc", SalesContract::getCreateTime, dto.getBeginTime());
+        wrapper.le("sc", SalesContract::getCreateTime, dto.getEndTime());
 
         return wrapper;
     }
@@ -318,7 +326,7 @@ public class SalesContractServiceImpl extends ServiceImpl<SalesContractMapper, S
     public void budget(SalesContractDto dto) {
         Assert.notEmpty(dto.getId(), "");
         SalesContract salesContract = this.getById(dto.getId());
-        Assert.notEmpty(salesContract,"查询不到合同信息!");
+        Assert.notEmpty(salesContract, "查询不到合同信息!");
         this.updateById(dto);
     }
 }

+ 5 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/work/vo/WorkOrderVo.java

@@ -116,4 +116,9 @@ public class WorkOrderVo extends WorkOrder {
      */
     private String buyAddress;
 
+    /**
+     * 研发用户id
+     */
+    private String devUserId;
+
 }

+ 2 - 1
hx-mes/src/main/resources/mapper/work/WorkOrderMapper.xml

@@ -22,7 +22,8 @@
                      wo.technology_status,
                      wo.production_quantity,
                      wo.stock_wait_quantity,
-                     wo.research_status
+                     wo.research_status,
+                     sc.dev_user_id
               FROM work_order wo
                        LEFT JOIN bytesailing_jxst.sales_contract sc ON wo.source_id = sc.id
                        LEFT JOIN production_plan pp ON pp.work_order_id = wo.id