|
@@ -4,18 +4,15 @@ import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.management.platform.entity.*;
|
|
import com.management.platform.entity.*;
|
|
import com.management.platform.mapper.*;
|
|
import com.management.platform.mapper.*;
|
|
import com.management.platform.service.*;
|
|
import com.management.platform.service.*;
|
|
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
import com.management.platform.util.ExcelUtil;
|
|
import com.management.platform.util.ExcelUtil;
|
|
import com.management.platform.util.HttpRespMsg;
|
|
import com.management.platform.util.HttpRespMsg;
|
|
-import org.apache.poi.hssf.usermodel.HSSFCell;
|
|
|
|
-import org.apache.poi.hssf.usermodel.HSSFRow;
|
|
|
|
-import org.apache.poi.hssf.usermodel.HSSFSheet;
|
|
|
|
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
|
import org.apache.poi.ss.usermodel.CellType;
|
|
import org.apache.poi.ss.usermodel.CellType;
|
|
import org.apache.poi.xssf.usermodel.XSSFCell;
|
|
import org.apache.poi.xssf.usermodel.XSSFCell;
|
|
import org.apache.poi.xssf.usermodel.XSSFRow;
|
|
import org.apache.poi.xssf.usermodel.XSSFRow;
|
|
@@ -25,11 +22,9 @@ import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.util.StringUtils;
|
|
import org.springframework.util.StringUtils;
|
|
-import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
-import javax.print.DocFlavor;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import java.io.*;
|
|
import java.io.*;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
@@ -37,7 +32,6 @@ import java.lang.reflect.Method;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
import java.text.NumberFormat;
|
|
import java.text.NumberFormat;
|
|
-import java.text.SimpleDateFormat;
|
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.time.Year;
|
|
import java.time.Year;
|
|
@@ -46,8 +40,6 @@ import java.time.temporal.TemporalAdjusters;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
-import static java.text.NumberFormat.getPercentInstance;
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
* 服务实现类
|
|
* 服务实现类
|
|
@@ -291,6 +283,180 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
|
|
return msg;
|
|
return msg;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public HttpRespMsg pageOrderByPin(String inchargerId, Integer orderType, String orderName, String orderCode, Integer customId, String businessName, Integer receivedStatus, String startTime, String endTime, String productCode, Integer pageIndex, Integer pageSize, Integer isDelete) {
|
|
|
|
+ HttpRespMsg msg=new HttpRespMsg();
|
|
|
|
+ User user = userMapper.selectById(request.getHeader("token"));
|
|
|
|
+ List<Department> departments = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, user.getCompanyId()));
|
|
|
|
+ boolean viewAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部订单");
|
|
|
|
+ boolean viewDept = sysFunctionService.hasPriviledge(user.getRoleId(), "查看负责部门订单");
|
|
|
|
+ List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, user.getCompanyId()));
|
|
|
|
+ List<SysDict> sysDictOfOrderType = sysDictMapper.selectList(new LambdaQueryWrapper<SysDict>().eq(SysDict::getCompanyId, user.getCompanyId()).eq(SysDict::getCode, "OrderType"));
|
|
|
|
+ LambdaQueryWrapper<SalesOrder> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ List<Custom> customList = customService.list(new LambdaQueryWrapper<Custom>().eq(Custom::getCompanyId, user.getCompanyId()));
|
|
|
|
+ List<BusinessOpportunity> businessOpportunityList = businessOpportunityService.list(new LambdaQueryWrapper<BusinessOpportunity>().eq(BusinessOpportunity::getCompanyId, user.getCompanyId()));
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getCompanyId,user.getCompanyId());
|
|
|
|
+ if(isDelete!=null){
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getIsDelete,isDelete);
|
|
|
|
+ }else {
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getIsDelete,0);
|
|
|
|
+ }
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getStatus,1);
|
|
|
|
+ //判断查看全部的权限
|
|
|
|
+ if(!viewAll){
|
|
|
|
+ //判断查看负责部门的权限
|
|
|
|
+ if(!viewDept){
|
|
|
|
+ //都没有就只能看自己创建的或者负责的
|
|
|
|
+ orderLambdaQueryWrapper.and(wrapper->wrapper.eq(SalesOrder::getCreatorId,user.getId()).or().eq(SalesOrder::getInchargerId,user.getId()));
|
|
|
|
+ }else {
|
|
|
|
+ List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getManagerId, user.getId()));
|
|
|
|
+ List<DepartmentOtherManager> otherManagerList = departmentOtherManagerMapper.selectList(new LambdaQueryWrapper<DepartmentOtherManager>().eq(DepartmentOtherManager::getOtherManagerId, user.getId()));
|
|
|
|
+ List<Integer> deptIds=new ArrayList<>();
|
|
|
|
+ deptIds.add(-1);
|
|
|
|
+ List<Integer> managerDeptIds = departmentList.stream().map(Department::getDepartmentId).distinct().collect(Collectors.toList());
|
|
|
|
+ List<Integer> otherManagerDeptIds = otherManagerList.stream().map(DepartmentOtherManager::getDepartmentId).distinct().collect(Collectors.toList());
|
|
|
|
+ deptIds.addAll(managerDeptIds);
|
|
|
|
+ List<Integer> finalDeptIds1 = deptIds;
|
|
|
|
+ managerDeptIds.forEach(m->{
|
|
|
|
+ List<Integer> branchDepartment = getBranchDepartment(m, departments);
|
|
|
|
+ finalDeptIds1.addAll(branchDepartment);
|
|
|
|
+ });
|
|
|
|
+ deptIds.addAll(otherManagerDeptIds);
|
|
|
|
+ List<Integer> finalDeptIds = deptIds;
|
|
|
|
+ otherManagerDeptIds.forEach(o->{
|
|
|
|
+ List<Integer> branchDepartment = getBranchDepartment(o, departments);
|
|
|
|
+ finalDeptIds.addAll(branchDepartment);
|
|
|
|
+ });
|
|
|
|
+ deptIds=deptIds.stream().distinct().collect(Collectors.toList());
|
|
|
|
+ List<Integer> finalDeptIds2 = deptIds;
|
|
|
|
+ List<String> userIds = userList.stream().filter(u -> finalDeptIds2.contains(u.getDepartmentId())).map(User::getId).collect(Collectors.toList());
|
|
|
|
+ //加上本人
|
|
|
|
+ userIds.add(user.getId());
|
|
|
|
+ orderLambdaQueryWrapper.and(wrapper->wrapper.in(SalesOrder::getCreatorId,userIds).or().in(SalesOrder::getInchargerId,userIds));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (!StringUtils.isEmpty(inchargerId)){
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getInchargerId,inchargerId);
|
|
|
|
+ }
|
|
|
|
+ if(orderType!=null){
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getType,orderType);
|
|
|
|
+ }
|
|
|
|
+ if(customId!=null){
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getCustomId,customId);
|
|
|
|
+ }
|
|
|
|
+ if(!StringUtils.isEmpty(businessName)){
|
|
|
|
+ orderLambdaQueryWrapper.inSql(SalesOrder::getBusinessOpportunityId,"select id from business_opportunity where name like '%"+businessName+"%'");
|
|
|
|
+ }
|
|
|
|
+ if(receivedStatus!=null){
|
|
|
|
+// if(receivedStatus==1){
|
|
|
|
+// //回款金额不为空 切大于0 作为已回款状态
|
|
|
|
+// orderLambdaQueryWrapper.and(wrapper->wrapper.isNotNull(SalesOrder::getReceivedPayment).gt(SalesOrder::getReceivedPayment,0));
|
|
|
|
+// }else {
|
|
|
|
+// //回款金额为空 或者等于0 作为未回款状态
|
|
|
|
+// orderLambdaQueryWrapper.and(wrapper->wrapper.isNull(SalesOrder::getReceivedPayment).or().eq(SalesOrder::getReceivedPayment,0));
|
|
|
|
+// }
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getReceivedStatus,receivedStatus);
|
|
|
|
+ }
|
|
|
|
+ if(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime)){
|
|
|
|
+// orderLambdaQueryWrapper.lt(SalesOrder::getOrderStartDate,endTime).gt(SalesOrder::getOrderEndDate,startTime);
|
|
|
|
+ orderLambdaQueryWrapper.between(SalesOrder::getPlaceTime,startTime,endTime);
|
|
|
|
+ }
|
|
|
|
+ if(!StringUtils.isEmpty(orderName)){
|
|
|
|
+ orderLambdaQueryWrapper.like(SalesOrder::getOrderName,orderName);
|
|
|
|
+ }
|
|
|
|
+ if(!StringUtils.isEmpty(orderCode)){
|
|
|
|
+ orderLambdaQueryWrapper.like(SalesOrder::getOrderCode,orderCode);
|
|
|
|
+ }
|
|
|
|
+ if(!StringUtils.isEmpty(productCode)){
|
|
|
|
+ orderLambdaQueryWrapper.inSql(SalesOrder::getId,
|
|
|
|
+ "select o.order_id from order_product_detail o left join product p on o.product_id=p.id " +
|
|
|
|
+ "where p.company_id="+user.getCompanyId()+" and p.product_code like '%"+productCode+"%'");
|
|
|
|
+ }
|
|
|
|
+ if(pageIndex==null||pageSize==null){
|
|
|
|
+ pageIndex=-1;
|
|
|
|
+ pageSize=-1;
|
|
|
|
+ }
|
|
|
|
+ if(isDelete!=null){
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getIsDelete,isDelete);
|
|
|
|
+ orderLambdaQueryWrapper
|
|
|
|
+ .orderByDesc(SalesOrder::getNeedPin)
|
|
|
|
+ .orderByDesc(SalesOrder::getPinTime)
|
|
|
|
+ .orderByDesc(SalesOrder::getUpdateTime);
|
|
|
|
+ }else {
|
|
|
|
+ orderLambdaQueryWrapper.eq(SalesOrder::getIsDelete,0);
|
|
|
|
+ orderLambdaQueryWrapper
|
|
|
|
+ .orderByDesc(SalesOrder::getNeedPin)
|
|
|
|
+ .orderByDesc(SalesOrder::getPinTime)
|
|
|
|
+ .orderByDesc(SalesOrder::getCreateTime);
|
|
|
|
+ }
|
|
|
|
+ IPage<SalesOrder> orderIPage = salesOrderMapper.selectPage(new Page<>(pageIndex, pageSize), orderLambdaQueryWrapper);
|
|
|
|
+ List<SalesOrder> records = orderIPage.getRecords();
|
|
|
|
+ List<Integer> orderIds = records.stream().map(SalesOrder::getId).distinct().collect(Collectors.toList());
|
|
|
|
+ orderIds.add(-1);
|
|
|
|
+ List<OrderProductDetail> orderProductDetails = orderProductDetailService.list(new LambdaQueryWrapper<OrderProductDetail>().in(OrderProductDetail::getOrderId, orderIds));
|
|
|
|
+ records.forEach(r->{
|
|
|
|
+ Optional<User> item = userList.stream().filter(u -> u.getId().equals(r.getCreatorId())).findFirst();
|
|
|
|
+ if(item.isPresent()){
|
|
|
|
+ r.setCreatorName(item.get().getName());
|
|
|
|
+ }
|
|
|
|
+ Optional<User> incharger = userList.stream().filter(u -> u.getId().equals(r.getInchargerId())).findFirst();
|
|
|
|
+ if(incharger.isPresent()){
|
|
|
|
+ r.setInchargerName(incharger.get().getName());
|
|
|
|
+ }
|
|
|
|
+ Optional<User> companySigner = userList.stream().filter(u -> u.getId().equals(r.getCompanySigner())).findFirst();
|
|
|
|
+ if(companySigner.isPresent()){
|
|
|
|
+ r.setCompanySignerName(companySigner.get().getName());
|
|
|
|
+ }
|
|
|
|
+ Optional<User> customSigner = userList.stream().filter(u -> u.getId().equals(r.getCustomSigner())).findFirst();
|
|
|
|
+ if(customSigner.isPresent()){
|
|
|
|
+ r.setCustomSignerName(customSigner.get().getName());
|
|
|
|
+ }
|
|
|
|
+ Optional<SysDict> type = sysDictOfOrderType.stream().filter(s -> s.getId().equals(r.getType())).findFirst();
|
|
|
|
+ if(type.isPresent()){
|
|
|
|
+ r.setTypeName(type.get().getName());
|
|
|
|
+ }
|
|
|
|
+ Optional<Custom> custom = customList.stream().filter(c -> c.getId().equals(r.getCustomId())).findFirst();
|
|
|
|
+ if(custom.isPresent()){
|
|
|
|
+ r.setCustomName(custom.get().getCustomName());
|
|
|
|
+ }
|
|
|
|
+ Optional<BusinessOpportunity> businessOpportunity = businessOpportunityList.stream().filter(b -> r.getBusinessOpportunityId() != null && b.getId().equals(r.getBusinessOpportunityId())).findFirst();
|
|
|
|
+ if(businessOpportunity.isPresent()){
|
|
|
|
+ r.setBusinessOpportunityName(businessOpportunity.get().getName());
|
|
|
|
+ }
|
|
|
|
+ List<OrderProductDetail> details = orderProductDetails.stream().filter(o -> o.getOrderId().equals(r.getId())).collect(Collectors.toList());
|
|
|
|
+ r.setOrderProductDetailList(details);
|
|
|
|
+ });
|
|
|
|
+ Map map=new HashMap();
|
|
|
|
+ map.put("record",records);
|
|
|
|
+ map.put("total",orderIPage.getTotal());
|
|
|
|
+ msg.setData(map);
|
|
|
|
+ return msg;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public HttpRespMsg pinOrder(SalesOrder order, HttpServletRequest request) {
|
|
|
|
+ HttpRespMsg respMsg = new HttpRespMsg();
|
|
|
|
+// User user = userMapper.selectById(request.getHeader("Token"));
|
|
|
|
+ salesOrderMapper.update(null,new LambdaUpdateWrapper<SalesOrder>()
|
|
|
|
+ .set(SalesOrder::getNeedPin,Boolean.TRUE)
|
|
|
|
+ .set(SalesOrder::getPinTime,new Date())
|
|
|
|
+ .eq(SalesOrder::getId,order.getId())
|
|
|
|
+ );
|
|
|
|
+ return respMsg;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public HttpRespMsg undoPin(SalesOrder order, HttpServletRequest request) {
|
|
|
|
+ HttpRespMsg respMsg = new HttpRespMsg();
|
|
|
|
+// User user = userMapper.selectById(request.getHeader("Token"));
|
|
|
|
+ salesOrderMapper.update(null,new LambdaUpdateWrapper<SalesOrder>()
|
|
|
|
+ .set(SalesOrder::getNeedPin,Boolean.FALSE)
|
|
|
|
+ .set(SalesOrder::getPinTime,null)
|
|
|
|
+ .eq(SalesOrder::getId,order.getId())
|
|
|
|
+ );
|
|
|
|
+ return respMsg;
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public HttpRespMsg importData(MultipartFile multipartFile) {
|
|
public HttpRespMsg importData(MultipartFile multipartFile) {
|