diff --git a/oms_web/oms_vue/src/api/dataProcess/projectTransfer.js b/oms_web/oms_vue/src/api/dataProcess/projectTransfer.js new file mode 100644 index 00000000..e27b1c67 --- /dev/null +++ b/oms_web/oms_vue/src/api/dataProcess/projectTransfer.js @@ -0,0 +1,22 @@ +import request from '@/utils/request' + +// 查询项目管理列表 +export function listProject(query) { + return request({ + url: '/sip/project/vue/list', + method: 'post', + data: query, + headers: { 'Content-Type': 'multipart/form-data' }, + + }) +} + +// 项目转移负责人 +export function transferProject(data) { + return request({ + url: '/sip/dataProcess/projectTransfer', + method: 'post', + data: data + }) +} + diff --git a/oms_web/oms_vue/src/views/dataProcess/projectTransfer.vue b/oms_web/oms_vue/src/views/dataProcess/projectTransfer.vue new file mode 100644 index 00000000..64c17ea5 --- /dev/null +++ b/oms_web/oms_vue/src/views/dataProcess/projectTransfer.vue @@ -0,0 +1,301 @@ + + + diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java index df5aef44..9ba0556d 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java @@ -1,128 +1,41 @@ package com.ruoyi.sip.controller; import com.ruoyi.common.annotation.Anonymous; -import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.sip.domain.*; -import com.ruoyi.sip.dto.inventory.OmsPurchaseOrderItemDto; -import com.ruoyi.sip.mapper.InventoryInfoMapper; -import com.ruoyi.sip.mapper.OmsInventoryInnerMapper; -import com.ruoyi.sip.service.IOmsPayableBillService; -import com.ruoyi.sip.service.IOmsPurchaseOrderService; -import com.ruoyi.sip.service.IProductInfoService; -import com.ruoyi.sip.service.IVendorInfoService; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.mgt.DefaultSecurityManager; -import org.apache.shiro.mgt.SecurityManager; -import org.apache.shiro.subject.Subject; -import org.apache.shiro.subject.SimplePrincipalCollection; -import org.apache.shiro.util.ThreadContext; +import com.ruoyi.sip.dto.ProjectTransferRequest; +import com.ruoyi.sip.service.IDataProcessService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - /** * 数据处理控制器 */ -@Anonymous @RestController @RequestMapping("/sip/dataProcess") public class DataProcessController { @Autowired - private OmsInventoryInnerMapper omsInventoryInnerMapper; - - @Autowired - private InventoryInfoMapper inventoryInfoMapper; - - @Autowired - private IProductInfoService productInfoService; - - @Autowired - private IOmsPurchaseOrderService purchaseOrderService; - - @Autowired - private IOmsPayableBillService payableBillService; - - @Autowired - private IVendorInfoService vendorInfoService; - - @Value("${oms.inventory.innerTax:0.13}") - private String defaultTax; + private IDataProcessService dataProcessService; //入库单生成应付单 + @Anonymous @GetMapping("/inventoryInnerGeneratePayableBill") void inventoryInnerGeneratePayableBill(@RequestParam("innerId") Long innerId) { if (innerId == null) { throw new ServiceException("innerId不能为空"); } - bindShiroUser(1L, "admin", "平台管理员"); - OmsInventoryInner omsInventoryInner = omsInventoryInnerMapper.selectOmsInventoryInnerById(innerId); - List inventoryInfoList = inventoryInfoMapper.selectInventoryInfoByInnerCodeList(Arrays.asList(omsInventoryInner.getInnerCode())); - List productCodeList = inventoryInfoList.stream().map(InventoryInfo::getProductCode).distinct().filter(StringUtils::isNotEmpty).collect(Collectors.toList()); - List productInfos = productInfoService.selectProductInfoByCodeList(productCodeList); - String vendorCode = productInfos.get(0).getVendorCode(); - OmsPayableBill payableBill = new OmsPayableBill(); - VendorInfo vendorInfo = vendorInfoService.selectVendorInfoByVendorCode(vendorCode); - - BigDecimal reduce = inventoryInfoList.stream().map(InventoryInfo::getInnerPrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); - //服务金额为单价* 数量 没有具体的详情 - BigDecimal totalPriceWithTax = Arrays.asList("3", "22").contains(omsInventoryInner.getProductType()) ? - reduce.multiply(new BigDecimal(omsInventoryInner.getQuantity())).setScale(2, RoundingMode.HALF_UP) - : reduce; - //生成应付单 - payableBill.setInventoryCode(omsInventoryInner.getInnerCode()); - payableBill.setVendorCode(omsInventoryInner.getVendorCode()); - payableBill.setProductType(productInfos.get(0).getType()); - payableBill.setProductCode(omsInventoryInner.getProductCode()); - payableBill.setTotalPriceWithTax(totalPriceWithTax); - payableBill.setOrderCode(omsInventoryInner.getOrderCode()); - payableBill.setProjectCode(omsInventoryInner.getProductCode()); - payableBill.setProjectName(omsInventoryInner.getProjectName()); - String purchaseNo = omsInventoryInner.getPurchaseNo(); - BigDecimal taxRate = null; - if (StringUtils.isNotEmpty(purchaseNo)) { - OmsPurchaseOrderItemDto query = new OmsPurchaseOrderItemDto(); - query.setPurchaseNo(purchaseNo); - List omsPurchaseOrderItemDtos = purchaseOrderService.listItem(query); - Map decimalMap = omsPurchaseOrderItemDtos.stream().collect(Collectors.toMap(OmsPurchaseOrderItemDto::getProductCode, OmsPurchaseOrderItemDto::getTaxRate, (v1, v2) -> v1)); - taxRate = decimalMap.get(omsInventoryInner.getProductCode()); - - } - BigDecimal finalTaxRate = taxRate == null ? new BigDecimal(defaultTax) : taxRate; - BigDecimal withoutTax = inventoryInfoList.stream().reduce(BigDecimal.ZERO, (a, b) -> a.add(b.getInnerPrice().divide(BigDecimal.ONE.add(finalTaxRate), 2, RoundingMode.HALF_UP)), BigDecimal::add); - payableBill.setTotalPriceWithoutTax(withoutTax); - payableBill.setTaxRate(finalTaxRate); - payableBill.setTaxAmount(totalPriceWithTax); - payableBill.setTaxAmount(totalPriceWithTax.subtract(payableBill.getTotalPriceWithoutTax())); - payableBillService.insertOmsPayableBill(payableBill, vendorInfo.getPayConfigDay()); + dataProcessService.inventoryInnerGeneratePayableBill(innerId); } - private void bindShiroUser(Long userId, String loginName, String userName) { - SecurityManager securityManager = new DefaultSecurityManager(); - SecurityUtils.setSecurityManager(securityManager); - ThreadContext.bind(securityManager); - - SysUser user = new SysUser(); - user.setUserId(userId); - user.setLoginName(loginName); - user.setUserName(userName); - Subject subject = new Subject.Builder(securityManager) - .principals(new SimplePrincipalCollection(user, "testRealm")) - .buildSubject(); - ThreadContext.bind(subject); + @PostMapping("/projectTransfer") + public AjaxResult projectTransfer(@RequestBody ProjectTransferRequest request) { + return dataProcessService.projectTransfer(request); } } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/ProjectTransferRequest.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/ProjectTransferRequest.java new file mode 100644 index 00000000..6f46a579 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/ProjectTransferRequest.java @@ -0,0 +1,21 @@ +package com.ruoyi.sip.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class ProjectTransferRequest { + + /** 原汇智负责人ID */ + private Long originalHzSupportUser; + /** 原汇智负责人名称 */ + private String originalHzSupportUserName; + /** 汇智负责人ID */ + private Long hzSupportUser; + /** 汇智负责人名称 */ + private String hzSupportUserName; + /** 项目ID列表 */ + private List projectIdList; + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java index b0d9ca11..181ef263 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectInfoMapper.java @@ -72,6 +72,7 @@ public interface ProjectInfoMapper void updateOrderTimeById(Long projectId); void updateCustomerCodeByCode(@Param("oldValue") String oldValue, @Param("newValue")String newValue); + int updateHzSupportUserByProjectIds(@Param("hzSupportUser") Long hzSupportUser, @Param("projectIds") List projectIds); ProjectInfo selectProjectInfoByOrderCode(String orderCode); diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java index 502f8b4e..37e7d294 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java @@ -88,4 +88,9 @@ public interface ProjectOrderInfoMapper List selectInentoryDeliveryByProjectOrderInfoId(@Param("id") Long id); + int updateDutyByProjectIds(@Param("duty") Long duty, + @Param("dutyEmail") String dutyEmail, + @Param("dutyPhone") String dutyPhone, + @Param("projectIds") List projectIds); + } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectUserCollectInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectUserCollectInfoMapper.java index f3596a7f..a4c4a575 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectUserCollectInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectUserCollectInfoMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.sip.mapper; import java.util.List; import com.ruoyi.sip.domain.ProjectUserCollectInfo; +import org.apache.ibatis.annotations.Param; /** * 产品库存Mapper接口 @@ -58,4 +59,13 @@ public interface ProjectUserCollectInfoMapper * @return 结果 */ public int deleteProjectUserCollectInfoByIds(String[] ids); + + /** + * 按项目ID批量删除收藏记录 + * + * @param projectIds 项目ID集合 + * @param userId 用户ID + * @return 结果 + */ + public int deleteProjectUserCollectInfoByProjectIds(@Param("projectIds") List projectIds, @Param("userId") Long userId); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java new file mode 100644 index 00000000..34b33189 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java @@ -0,0 +1,12 @@ +package com.ruoyi.sip.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.sip.dto.ProjectTransferRequest; + +public interface IDataProcessService { + + void inventoryInnerGeneratePayableBill(Long innerId); + + AjaxResult projectTransfer(ProjectTransferRequest request); + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java new file mode 100644 index 00000000..0bc744f3 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java @@ -0,0 +1,159 @@ +package com.ruoyi.sip.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.sip.domain.InventoryInfo; +import com.ruoyi.sip.domain.OmsInventoryInner; +import com.ruoyi.sip.domain.OmsPayableBill; +import com.ruoyi.sip.domain.ProductInfo; +import com.ruoyi.sip.domain.VendorInfo; +import com.ruoyi.sip.dto.ProjectTransferRequest; +import com.ruoyi.sip.dto.inventory.OmsPurchaseOrderItemDto; +import com.ruoyi.sip.mapper.InventoryInfoMapper; +import com.ruoyi.sip.mapper.OmsInventoryInnerMapper; +import com.ruoyi.sip.mapper.ProjectInfoMapper; +import com.ruoyi.sip.mapper.ProjectOrderInfoMapper; +import com.ruoyi.sip.mapper.ProjectUserCollectInfoMapper; +import com.ruoyi.sip.service.IDataProcessService; +import com.ruoyi.sip.service.IOmsPayableBillService; +import com.ruoyi.sip.service.IOmsPurchaseOrderService; +import com.ruoyi.sip.service.IProductInfoService; +import com.ruoyi.sip.service.IVendorInfoService; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.mgt.DefaultSecurityManager; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.subject.SimplePrincipalCollection; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.ThreadContext; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@Service +public class DataProcessServiceImpl implements IDataProcessService { + + @Resource + private OmsInventoryInnerMapper omsInventoryInnerMapper; + + @Resource + private InventoryInfoMapper inventoryInfoMapper; + + @Resource + private IProductInfoService productInfoService; + + @Resource + private IOmsPurchaseOrderService purchaseOrderService; + + @Resource + private IOmsPayableBillService payableBillService; + + @Resource + private IVendorInfoService vendorInfoService; + + @Resource + private ProjectUserCollectInfoMapper projectUserCollectInfoMapper; + + @Resource + private ProjectInfoMapper projectInfoMapper; + @Resource + private ProjectOrderInfoMapper projectOrderInfoMapper; + + @Value("${oms.inventory.innerTax:0.13}") + private String defaultTax; + + @Override + public void inventoryInnerGeneratePayableBill(Long innerId) { + if (innerId == null) { + throw new ServiceException("innerId不能为空"); + } + bindShiroUser(1L, "admin", "平台管理员"); + OmsInventoryInner omsInventoryInner = omsInventoryInnerMapper.selectOmsInventoryInnerById(innerId); + List inventoryInfoList = inventoryInfoMapper.selectInventoryInfoByInnerCodeList(Arrays.asList(omsInventoryInner.getInnerCode())); + List productCodeList = inventoryInfoList.stream().map(InventoryInfo::getProductCode).distinct().filter(StringUtils::isNotEmpty).collect(Collectors.toList()); + List productInfos = productInfoService.selectProductInfoByCodeList(productCodeList); + String vendorCode = productInfos.get(0).getVendorCode(); + OmsPayableBill payableBill = new OmsPayableBill(); + VendorInfo vendorInfo = vendorInfoService.selectVendorInfoByVendorCode(vendorCode); + + BigDecimal reduce = inventoryInfoList.stream().map(InventoryInfo::getInnerPrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal totalPriceWithTax = Arrays.asList("3", "22").contains(omsInventoryInner.getProductType()) ? + reduce.multiply(new BigDecimal(omsInventoryInner.getQuantity())).setScale(2, RoundingMode.HALF_UP) + : reduce; + payableBill.setInventoryCode(omsInventoryInner.getInnerCode()); + payableBill.setVendorCode(omsInventoryInner.getVendorCode()); + payableBill.setProductType(productInfos.get(0).getType()); + payableBill.setProductCode(omsInventoryInner.getProductCode()); + payableBill.setTotalPriceWithTax(totalPriceWithTax); + payableBill.setOrderCode(omsInventoryInner.getOrderCode()); + payableBill.setProjectCode(omsInventoryInner.getProductCode()); + payableBill.setProjectName(omsInventoryInner.getProjectName()); + String purchaseNo = omsInventoryInner.getPurchaseNo(); + BigDecimal taxRate = null; + if (StringUtils.isNotEmpty(purchaseNo)) { + OmsPurchaseOrderItemDto query = new OmsPurchaseOrderItemDto(); + query.setPurchaseNo(purchaseNo); + List omsPurchaseOrderItemDtos = purchaseOrderService.listItem(query); + Map decimalMap = omsPurchaseOrderItemDtos.stream().collect(Collectors.toMap(OmsPurchaseOrderItemDto::getProductCode, OmsPurchaseOrderItemDto::getTaxRate, (v1, v2) -> v1)); + taxRate = decimalMap.get(omsInventoryInner.getProductCode()); + } + BigDecimal finalTaxRate = taxRate == null ? new BigDecimal(defaultTax) : taxRate; + BigDecimal withoutTax = inventoryInfoList.stream().reduce(BigDecimal.ZERO, (a, b) -> a.add(b.getInnerPrice().divide(BigDecimal.ONE.add(finalTaxRate), 2, RoundingMode.HALF_UP)), BigDecimal::add); + payableBill.setTotalPriceWithoutTax(withoutTax); + payableBill.setTaxRate(finalTaxRate); + payableBill.setTaxAmount(totalPriceWithTax.subtract(payableBill.getTotalPriceWithoutTax())); + payableBillService.insertOmsPayableBill(payableBill, vendorInfo.getPayConfigDay()); + } + + private void bindShiroUser(Long userId, String loginName, String userName) { + SecurityManager securityManager = new DefaultSecurityManager(); + SecurityUtils.setSecurityManager(securityManager); + ThreadContext.bind(securityManager); + + SysUser user = new SysUser(); + user.setUserId(userId); + user.setLoginName(loginName); + user.setUserName(userName); + Subject subject = new Subject.Builder(securityManager) + .principals(new SimplePrincipalCollection(user, "testRealm")) + .buildSubject(); + ThreadContext.bind(subject); + } + + @Override + public AjaxResult projectTransfer(ProjectTransferRequest request) { + if (request == null + || request.getHzSupportUser() == null + || StringUtils.isEmpty(request.getHzSupportUserName()) + || request.getProjectIdList() == null + || request.getProjectIdList().isEmpty()) { + return AjaxResult.error("参数不完整"); + } + List sysUsers = projectInfoMapper.selectUserById( + Arrays.asList(String.valueOf(request.getHzSupportUser()))); + if (sysUsers == null || sysUsers.isEmpty()) { + return AjaxResult.error("汇智负责人不存在"); + } + SysUser hzSupportUser = sysUsers.get(0); + // 修改项目中的汇智负责人 + projectInfoMapper.updateHzSupportUserByProjectIds(request.getHzSupportUser(), request.getProjectIdList()); + // 修改订单中负责人信息 + projectOrderInfoMapper.updateDutyByProjectIds(request.getHzSupportUser(), + hzSupportUser.getEmail(), + hzSupportUser.getPhonenumber(), + request.getProjectIdList()); + // 删除原负责人对应的收藏记录 + projectUserCollectInfoMapper.deleteProjectUserCollectInfoByProjectIds(request.getProjectIdList(), request.getOriginalHzSupportUser()); + return AjaxResult.success("项目转移成功"); + } + +} diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml index 14e92450..fcdfd1a7 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml @@ -478,6 +478,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} + + update project_info + set hz_support_user = #{hzSupportUser}, + update_time = now() + where id in + + #{projectId} + + + delete from project_info where id = #{id} diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml index 478931f4..1e304aeb 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml @@ -880,6 +880,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update project_order_info set partner_code = #{newValue} where partner_code = #{oldValue} + + update project_order_info + set duty = #{duty}, + duty_email = #{dutyEmail}, + duty_phone = #{dutyPhone}, + update_time = now() + where project_id in + + #{projectId} + + + delete from project_order_info where id = #{id} diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectUserCollectInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectUserCollectInfoMapper.xml index 5892efa1..6f54ea14 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectUserCollectInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectUserCollectInfoMapper.xml @@ -66,4 +66,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - \ No newline at end of file + + delete from project_user_collect_info where project_id in + + #{projectId} + + and user_id = #{userId} + + +